Seit ein paar Wochen versuche ich, mir autodidaktisch Python beizubringen, nachdem ich mich an ein Permutationsproblem gewagt habe, hab ich mir folgenden Code "geklaut" und versuche nun, ihn zu verstehen:
(das Beispiel und die 'prints' sind von mir, zum Verständnis)
Hoffe ihr könnt ein wenig Licht reinbringen! Fragen, siehe Kommentare unten...
Vielen Dank schonmal,
Werner
Code: Alles auswählen
beispiel = 'Beispiel'
for i in (beispiel[1:]):
print(i)
def all_perms(str):
if len(str) <=1:
yield str
else:
for perm in all_perms(str[1:]): # <--- Rekursion, Ja oder Nein?
print('perm:', perm)
for i in range(len(perm)+1):
print('i:', i)
print('yield:', perm[:i] + str[0:1] + perm[i:])
yield perm[:i] + str[0:1] + perm[i:]
print(tuple(all_perms('ABC')))
e # beispiel[1:] alles ausser dem ersten Buchstaben, eins weiter unten aber nicht, oder doch???
i
s
p
i
e
l
perm: C # <--- Wieso 'C' zuerst? So wie ich das lese müsste es 'B' sein denn: str[1:] heisst doch "alles ausser dem ersten Buchstaben"?
i: 0
yield: BC # Hier wird 'BC' an die erste Schleife zurückgegeben, richtig? Woher weiss das Programm, dass 'BC' nicht zum Ergebnis gehört?
perm: BC
i: 0
yield: ABC
i: 1
yield: BAC
i: 2
yield: BCA
i: 1
yield: CB
perm: CB
i: 0
yield: ACB
i: 1
yield: CAB
i: 2
yield: CBA
('ABC', 'BAC', 'BCA', 'ACB', 'CAB', 'CBA')
