Snažím se vytvořit funkci, která zapíše do souboru všechny kombinace zadaných písmen o zadané délce. Zatím mám tohle:
def men(pozice,pismeno,ret):
ret2=""
for i in range(pozice):
ret2=ret2+ret[i]
ret2=ret2+pismeno
for i in range(pozice+1,len(ret)):
ret2=ret2+ret[i]
return ret2
def kombinace(soubor,nabidka,delka=None,ret=None,menim=None):
if ret==None: ret=nabidka[0]*delka; soubor.write(ret+"\n")
if menim==None: menim=len(ret)-1
try:
ret=men(menim,nabidka[nabidka.find(ret[menim])+1],ret)
soubor.write(ret+"\n")
kombinace(soubor,nabidka,ret=ret)
except IndexError:
if menim!=0:
kombinace(soubor,nabidka,ret=men(menim,nabidka[0],ret),menim=menim-1)
else:
print "Hotovo!"
Funkce men mění v řetězci ret znak na pozici pozice na znak pismeno.
Funkce kombinace změní podle nabídky poslední znak a zavolá sama sebe znovu. Tohle opakuje dokud nedojde k poslednímu znaku z nabídky. Pak zavolá znovu sama sebe, ale přidá i argument menim, který zmení písmeno na pozici o jednu blíž (předposlední). A celé se to opakuje.
Doufám, že jste aspoň trochu pochopili, jak to má fungovat... :smile14:
Problém je v tom, že pokud zadám hodně velkou nabídku nebo délku nastane moc velký počet rekurzí a program se přeruší. Nevím, jak se tomu mám vyhnout. :smile10:
Jinak nejsem v programování nějak moc zběhlá, takže omluvte naprostou neeleganci a složitost kódu:)