ilość cyfr składających się z różnych liczb w określonym przedziale

0

Dla zadanego przedziału określ ile liczb w tym przedziale składa się wyłącznie z różnych cyfr, tzn. w ich zapisie cyfry się nie powtarzają. Np. liczba 87 składa się z różnych cyfr, natomiast liczba 100 już nie, ponieważ cyfra 0 się powtarza 2 razy
Wejście:
a := 87
b := 104
wynik:
14
Czy pomoże mi ktoś z implementacją tego zadania w Pythonie 3 ?
Rozumiem iż muszę wczytać dwie cyfry (jako przedział cyfr), następnie w tym przedziale liczb sprawdzić które cyfry się powtarzają w obrębie jednej cyfry,

Z przedziału
87,104
następujące liczby składają się wyłącznie z różnych cyfr:
87,89,90,91,92,93,94,95,96,97,98,102,103,10487,89,90,91,92,93,94,95,96,97,98,102,103,104

a = int(input('podaj a: '))
b = int(input('podaj b: '))
for i in range(a,b+1):
    print(i)
5

na szybko:

wsad = list(range(87,105))
different = [x for x in wsad if len(set(str(x))) == len(str(x))]
0

Rozumiem iż muszę wczytać dwie cyfry (jako przedział cyfr), następnie w tym przedziale liczb sprawdzić które cyfry się powtarzają w obrębie jednej cyfry,

Nie, nikt Ci nic takiego nie mówił. Nawet w przykładzie masz liczbę trzycyfrową.

0

@Althorion: przepraszam chodziło mi o to że muszę wczytać dwie liczby (np 10 oraz 50) i z przedziału pomiędzy nimi wypisać ilość liczb które zawierają różne cyfry, znaczy tak to rozumiem

0

Których wszystkie cyfry są różne (tzn. 123 jest OK, ale 122 czy 111 już nie), czy te, które zawierają przynajmniej dwie różne cyfry (tzn. 123 oraz 122 są OK, ale 111 nie)?

0

okej są te które mają każdą cyfrę różną, to znaczy:
87 ok,
88 nie,
89 ok,
90 ok,
99 nie,
100 nie,
101 nie,
102 ok,
103 ok,

3
mikko napisał(a):

Rozumiem iż muszę wczytać dwie cyfry (jako przedział cyfr), następnie w tym przedziale liczb sprawdzić które cyfry się powtarzają w obrębie jednej cyfry,

Nie wiem czy ktoś już ci to napisał, ale nie widzisz różnicy między cyfrą a liczbą co bardzo utrudnia robienie takich zadań. W uproszczeniu cyfra to litera a liczba to wyraz

0

znam różnicę :D, w pierwszym poście mi się pomyliło, sprostowałem to później, lecz nie mogę edytować pierwszego postu

1

OK. Czy rozumiesz odpowiedź leidiego12 wyżej, a jeśli nie, to czego konkretnie w niej nie rozumiesz?

W szczególności:

  1. Czy wiesz, co to jest set w Pythonie?
  2. Czy wiesz, co robi funkcja str w Pythonie? Czy umiesz sobie wyobrazić, jaki będzie rezultat str(101)?
  3. Czy umiesz sobie wyobrazić, jaki będzie efekt połączenia dwójki z jedynką, tzn. jaki będzie rezultat set(str(101))?
  4. Czy wiesz, co robi funkcja len w Pythonie?
  5. Czy umiesz sobie wyobrazić, jaki będzie efekt połączenia dwójki z czwórką, tzn. jaki będzie rezultat len(str(101))?
  6. Czy umiesz sobie wyobrazić, jaki będzie efekt połączenia trójki z czwórką, tzn. jaki będzie rezultat len(set(str(101)))?
  7. Czy umiesz wykorzystać połączyć piątkę z szóstką i wykorzystać to do rozwiązania zadania? Jeśli nie, to czego Ci brakuje?
2
ledi12 napisał(a):

na szybko:

wsad = list(range(87,105))
different = [x for x in wsad if len(set(str(x))) == len(str(x))]

Przecież to jest atak brute force na zupełnie niewinne i bezbronne liczby ;-P

I bez sensu w tym przypadku jest robienie listy z range, tylko pamięć i czas procesora marnuje, a samo range prawie nie zajmuje pamięci.

A jak by tam był w przyszłości tryliard?
Wiesz, ile by to zajęło pamięci i czasu?

0

@Althorion: Z góry przepraszam za słownictwo z programowaniem u mnie na bakier, o ile dobrze kojarzę set tworzy zbiór ale taki który wyeliminuje powtarzające się elementy, str zmienia dane w stringa, funkcja len informuje z ilu znaków składa się wyraz, Pythona dopiero poznaję, nie do końca wiem jak w praktyce działają te funkcje

1

Spoko. Dobrze mówisz, mniej więcej — len podaje liczbę elementów w kolekcji, wszystko jedno, czy to string (wtedy poda, z ilu liter¹), czy set (wtedy poda, ile ma elementów).

Odpal sobie IDLE, czy jakiego tam masz interaktywnego Pythona, i popróbuj wywołać te wyrażenia. Pozmieniaj wartości na 101, itd. Jak nie będziesz umiał wyczuć, co i jak, to daj znać, będę nakierowywał dalej.

¹ Dla odpowiednio luźnej definicji unikodowej „litery”…

0

@Althorion: Super, czyli to

set(str(102))

Odpowiada za wyświetlenie składowych cyfr danej liczby, ale wyświetli każdą tylko raz, nawet gdy w liczbie ta cyfra się powtórzy 3 razy to zostanie wypisana raz,
teraz już rozumiem w jaki sposób działają te funkcje, lecz nie do końca potrafię zastosować zwracaną wartość (ilość znaków) z punktu 5 oraz 6, rozumiem że na tej podstawie (jeśli liczba wprowadzona ma 3 cyfry, a ta funkcja odpowie ze ta sama liczba ma 2 bądź mniej cyfr to właśnie spełnia to warunek że się powtarzają), lecz nie wiem jak to zastosować

0

No i super, mamy postęp. Do pełnego sukcesu brakuje Ci tego, żeby zauważyć, że jak policzysz niepowtarzające się cyfry len(set(str(liczba))), i ich będzie mniej niż wszystkich cyfr len(str(liczba)), to znaczy, że któraś się powtórzyła i jej nie policzyliśmy.

Czyli dokładnie to, o co pytają w zadaniu. Pozostaje wczytać ograniczenia na zakres (tzn. punkt startowy i punkt końcowy), i przelecieć w pętli przez niego, porównując jak wyżej. Czy wiesz, jak to zrobić? Czy rozumiesz rozwiązanie? Czy brakuje Ci czegoś jeszcze?

1

@Althorion: wiem już wszystko jak rozwiązać to zadanie poprawnie, dziękuję bardzo

1 użytkowników online, w tym zalogowanych: 0, gości: 1