Seite 1 von 1
Warum is das eine Endlosschleife?
Verfasst: Samstag 15. Juli 2006, 20:48
von CrackPod
Code: Alles auswählen
print 'Suche gestartet. Bitte geben Sie die Kriterien - mit Kommata gertennt - ein, nach denen Sie suchen wollen.'
print 'Beispiel: Vorname,Nachname'
print ''
columns = raw_input('Suchkriterien: ')
cols = columns.split(',')
i = 0
while i in range(len(cols)):
cols[i].strip
print cols[i]
Suche gestartet. Bitte geben Sie die Kriterien - mit Kommata gertennt - ein, nach denen Sie suchen wollen.
Beispiel: Vorname,Nachname
Suchkriterien: vorname, nachname
vorname
[...]
vorname
vme
Traceback (most recent call last):
File "Adressenverwaltung.py", line 401, in ?
main()
File "Adressenverwaltung.py", line 398, in main
menu.search()
File "Adressenverwaltung.py", line 356, in search
print cols
KeyboardInterrupt
Irgendwie is das ne Endlosschleife geworden, aber die will ich gar nich haben
Was hab ich falsch gemacht? Das sollte doch so stimmen oder?!
Greetz
Verfasst: Samstag 15. Juli 2006, 21:36
von DatenMetzgerX
So geht es
Code: Alles auswählen
print 'Suche gestartet. Bitte geben Sie die Kriterien - mit Kommata gertennt - ein, nach denen Sie suchen wollen.'
print 'Beispiel: Vorname,Nachname'
print ''
columns = raw_input('Suchkriterien: ')
cols = columns.split(',')
#Zuweisung für i nicht nötig
for i in range(len(cols)): #Forschleife keine Whileschleife
cols[i].strip() #KLAMMERN
print cols[i]
Re: Warum is das eine Endlosschleifen?
Verfasst: Samstag 15. Juli 2006, 21:39
von Zando
Eine for-Schleife anstatt eine while-Schleife, weil er ja sonst i nicht hochzählt und somit i immer 0 bleibt und der Ausdruck immer wahr bleibt?
So long
Carsten
edit: war jemand schneller
Verfasst: Samstag 15. Juli 2006, 21:47
von keppla
um mal den subtilen Unterschied genauer zu beleuchten:
bei der while-schleife gilt alles hinter dem while als Bedingung. Wir haben also hier den legalen code
und da du i = 0 zugewiesen hast, ergibt das
was logischerweise immer True ist, da 0 ja im tupel (0,1,...x) ist.
bei der for-schleife wird das "in" nicht als Operator eines Ausdrucks (wie oben) interpretiert, sondern als teil des for-syntax (for namen in ausdruck:) interpretiert.
Verfasst: Samstag 15. Juli 2006, 22:32
von Leonidas
Könnte einer mal den Pythonic-Mode einschalten? Die Schleife schreibt man in Python so:
Code: Alles auswählen
for column in cols:
column.strip()
# column ist ein String ist und daher zeigt strip() keine Wirkung
print column
Vorteil: Nutzt keine sinnlosen, Java/C'esken Zähvariablen sondern iteriert schön über ein Objekt.
Verfasst: Sonntag 16. Juli 2006, 17:30
von Masaru
Hm ... irgendwas hatte mich auch an dem .strip() gestört, jetzt weiss ichs wieder. So sollte es eigentlich heissen (vorrausgesetzt - wie Leonidas schon angedeutet hat - es handelt sich bei "column" wirklich um String Objekte):
Code: Alles auswählen
for column in cols:
column = column.strip()
print column
Die Klassenmethode "strip" ändert nicht
permant den eigenen Wert, sondern liefert lediglich den gestrippten Wert zurück.
Wird dieser natürlich nicht in in eine andere Variable (oder über das eigene Objekt) geschrieben, so strippt man lediglich in den freien Raum hinnein
, jedoch bleiben die vor- und nachlaufenden Leerzeichen weiterhin im Wert des String-Objektes.
Verfasst: Sonntag 16. Juli 2006, 19:35
von CrackPod
Danke, es geht jetzt.
Ich dachte nur, dass man das bei Listen so ähnlich, wie bei Dictionaries machen muss. ( for value in dic.values(): )
Hab die Doku auch ewig lange nach einer ähnlichen Methode für Listen durchsucht...
Greetz
Verfasst: Montag 17. Juli 2006, 12:43
von Leonidas
CrackPod hat geschrieben:Ich dachte nur, dass man das bei Listen so ähnlich, wie bei Dictionaries machen muss. ( for value in dic.values():
Wieso so umständlich?
Code: Alles auswählen
d = {'eins': 1, 'zwei': 2}
for key, value in d.items():
print key, value