[Python] Generatory - krótkie pytanie

Awatar użytkownika
musialmi
Użytkownik
Użytkownik
Posty: 3466
Rejestracja: 3 sty 2014, o 13:03
Płeć: Mężczyzna
Lokalizacja: PWr ocław
Podziękował: 382 razy
Pomógł: 434 razy

[Python] Generatory - krótkie pytanie

Post autor: musialmi »

Mam funkcję-generator

Kod: Zaznacz cały

def f(n):
 if n==1:
  yield 'a'
 else:
  yield f(n-1)+'a'
To nie działa ze względu na to, że nie można potraktować dodawaniem generatora i stringa. Oczywiście ta funkcja ma mi wyświetlić tyle a W JEDNEJ LINII, ile chcę i niestety, ale muszę to zrobić tą metodą (generatorem). Co wstawić zamiast znaku "+", żeby to działało?
Ostatnio zmieniony 11 maja 2014, o 14:41 przez Afish, łącznie zmieniany 2 razy.
Powód: Poprawa wiadomości.
Awatar użytkownika
Althorion
Użytkownik
Użytkownik
Posty: 4541
Rejestracja: 5 kwie 2009, o 18:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy
Pomógł: 662 razy

[Python] Generatory - krótkie pytanie

Post autor: Althorion »

Najczytelniej? Pozbyć się rekurencji:

Kod: Zaznacz cały

def f(n):
    l = ''
    num = 0
    while n < num:
        l += 'a'
        yield l
        num += 1
Awatar użytkownika
musialmi
Użytkownik
Użytkownik
Posty: 3466
Rejestracja: 3 sty 2014, o 13:03
Płeć: Mężczyzna
Lokalizacja: PWr ocław
Podziękował: 382 razy
Pomógł: 434 razy

[Python] Generatory - krótkie pytanie

Post autor: musialmi »

Niestety chyba jest mi ona potrzebna. Prawdziwe zadanie polega na tym, żeby z dwóch liter "a" i jednej litery "b" złożyć wszystkie możliwe wyrazy, czyli
aab
aba
baa

Dodatkowo, ilość liter a, b, c (tutaj c jest 0) oraz same litery są zmiennymi wprowadzanymi przez użytkownika.
Awatar użytkownika
Althorion
Użytkownik
Użytkownik
Posty: 4541
Rejestracja: 5 kwie 2009, o 18:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy
Pomógł: 662 razy

[Python] Generatory - krótkie pytanie

Post autor: Althorion »

Jeśli to całe zadanie, to wykorzystałbym bibliotekę

Kod: Zaznacz cały

https://docs.python.org/3.5/library/itertools.html
(część biblioteki standardowej), konkretniej funkcję combinations z niej. Listę na której ma pracować łatwo jest skonstruować na podstawie danych użytkownika.
Awatar użytkownika
musialmi
Użytkownik
Użytkownik
Posty: 3466
Rejestracja: 3 sty 2014, o 13:03
Płeć: Mężczyzna
Lokalizacja: PWr ocław
Podziękował: 382 razy
Pomógł: 434 razy

[Python] Generatory - krótkie pytanie

Post autor: musialmi »

Dziękuję, to prawdopodobnie będzie bardzo przydatne!
EDIT: Potrzebowałem permutations, nie combinations, ale i tak bardzo pomogłeś.
ODPOWIEDZ