Seltsamens Verhalten bei for Scheife

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
cyberangle
User
Beiträge: 19
Registriert: Freitag 30. Oktober 2020, 09:39

Dienstag 17. November 2020, 14:16

Hallo zusammen,

Ich habe eine liste mit ca 50 Zahlen beginnen mit 000 auf index bis 666 . diese jeweils 3 Zahlen setzteen sich zusammen
aus 3 Würfelwerten die ich mir über den Zufallgenerator hole. in der WurfList sind alle Zahlen die vorkommen können enthalten.
Über eine For Schleife möchte ich den Index der einzelnen Werte erfahren also 111 die 1 112 die 2 221 die 56. Das funtioniert im
Programm leider nicht mir wird zwar an der richtigen Stelle gefunden angezeigt aber der Index ist seltsamer Weise 0.

Ändere ich aber die For Schleife auf

Code: Alles auswählen

for werte in andereList, WurfList:  
kappt das Programm.

Die beiden Werte in andere List können beim würfeln gar nicht Vorkommen den kein Würfel hat eine 7 oder eine 8 aber ohne andereList
spinnt das Programm oder ich denke mal wieder falsch.
Hier der Code:

Code: Alles auswählen

andereList = ['117','118']
WurfList = ['000','111','112','113','114','115','116','222','333','444','555','666','123','234','345','456','665','664','663',
			'662','661','655','653','652','651','644','643','642','641','633','632','631','622','621','554','553','552','551',
			'544','542','541','533','532','531','522','521','443','442','441','443','431','422','421','332','331','322','221',]

finde = 1
test = "0"
while test != 9:
	test = input('Bitte 3 stellinge Zahl eingeben: ')
	if test == '9':     ####  Wenn Eingabe 9  While Abbruch    ####
		break
	for werte in WurfList:
		print(werte)
		try:
			if finde > 0:
				finde = werte.index(test)
				print('Gefunden Wert von >>finde<< : ', finde)
				print(WurfList[test])
				break
	
		except:
			print('Neuer Versuch!!')
	
print('Programmende')
Danke für die Denkanstöße.
Vielen Dank
cyberagle
Sirius3
User
Beiträge: 14594
Registriert: Sonntag 21. Oktober 2012, 17:20

Dienstag 17. November 2020, 14:26

Hier wurde Dir schon gesagt, dass man immer mit 4 Leerzeichen pro Ebene einrückt, dass die while-Schleife eine while-True-Schleife sein sollte, dass man keine nackten Excepts benutzen sollte, usw.
Zum Programmieren gehört eine große Portion Sorgfalt, und die fehlt hier.

Da Du ja `werte` schon ausgibst, sollte Dir auffallen, was für einen Wert werte hat, und dass ein werte.index maximal test am Index 0 finden kann, womit dann das Problem auftritt, das __blackjack__ Dir auch schon im anderen Thread gesagt hatte.

Daher beantworte einfach die Frage: was für einen Zweck hat die for-Schleife.
cyberangle
User
Beiträge: 19
Registriert: Freitag 30. Oktober 2020, 09:39

Dienstag 17. November 2020, 17:42

Hallo,
ich rücke immer nur 4 schritte ein, das macht pycharm automatisch. Warum der Abstand beim Kopieren auf
die Webside großer wird kann ich nicht sagen.

In der for-Schleife will ich den index des Wertes erfahren, den ich vorher eingegeben habe. Als 2. wüßte ich gern
warum die geänderte for Schleife auf

Code: Alles auswählen

for werte in andereList, WurfList:  
ändere genau das macht was ich erwarte
Vielen Dank
cyberagle
Benutzeravatar
__blackjack__
User
Beiträge: 8716
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Dienstag 17. November 2020, 17:48

@cyberangle: Du rückst nicht vier Schritte ein sondern mit Tabulatorzeichen. Das sollte PyCharm eigentlich nicht machen, das sollte mit vier Leerzeichen einrücken. Du musst da also etwas an den Einstellungen geändert haben das Du rückgängig machen solltest.

Du sagst Du änderst die ``for``-Schleife — wie denn? Also wir wissen wie die *jetzt* aussieht, aber wie sieht es denn aus wenn das Programm nicht das macht was Du erwartest?

Wobei es das ziemlich sicher auch mit der Schleife nicht macht weil da zwei Fehler drin sind, die ich im anderen Thema schon beschrieben habe. Den mit dem Index an der Stelle 0 habe ich ja sogar mit einem Beispiellauf demonstriert.
long long ago; /* in a galaxy far far away */
Sirius3
User
Beiträge: 14594
Registriert: Sonntag 21. Oktober 2012, 17:20

Mittwoch 18. November 2020, 09:25

@cyberangle: warum beantwortest Du nicht einfach meine Fragen? Dann kommst Du selbst auf die Lösung.
cyberangle
User
Beiträge: 19
Registriert: Freitag 30. Oktober 2020, 09:39

Mittwoch 18. November 2020, 09:26

Hallo _blackjack_,

for werte in andereList, WurfList: mit dieser Schleife macht das Programm was ich will

for werte in WurfList: damit macht es nicht was ich will

in Pycharm spring das Programm durch drücken der Tab-Taste genau 4 schritte weiter und das ist auch so eingestellt.
Vielen Dank
cyberagle
Benutzeravatar
/me
User
Beiträge: 3434
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Mittwoch 18. November 2020, 09:40

cyberangle hat geschrieben:
Mittwoch 18. November 2020, 09:26
for werte in WurfList: damit macht es nicht was ich will
Das wissen wir. Programmieren besteht aber nicht darin, so lange wüst Codeschnipsel durcheinander zu werfen bis vielleicht zufällig etwas funktioniert.

Daher die Frage an dich als Entwickler: Wofür benötigt dein Algorithmus die Schleife `for werte in WurfList:`?
Benutzeravatar
sparrow
User
Beiträge: 2709
Registriert: Freitag 17. April 2009, 10:28

Mittwoch 18. November 2020, 09:40

@cyberangel: Du hast in Pycharm womöglich eingestellt, dass die "Darstellung" von Tabs 4 Leerzeichen sein sollen. Aber intern werden noch immer Tabs verwendet. Korrekt müsste die Einstellung sein: Statt Tabs Leerzeichen verwenden. So ist es zumindest bei anderen Editoren. Und meines Wissens ist das bei Pycharm der die Standardeinstellung - möglicherweise hast du das umgestellt.

Das Problem beim Programmieren ist, dass "raten" nicht funktioniert.
Und das schöne an Python ist, dass man Dinge einfach ausprobieren kann.
Wir hier bereits geschrieben wurde: Du lässt dir ja "werte" bereits anzeigen. Bei der einen Variante iterierst du über die Elemente von "WurfList" (schlechter Name) bei der anderen Variante iterierst du über einen Tuple, der als Elemente erst WurfList (schlechter Name) und dann andereList (noch schlechterer Name) iteriert.

Wenn man Variablen aussagekräftige Namen gibt, die zu dem passen, was passiert, dann fallen einem Dinge von ganz alleine auf.
Hat man eine Liste von "würfen" und möchte darüber iterieren, dann ist jedes Element ein "wurf", dann sollte man sich wunden, wenn in "wurf" mehr als ein Element enthalten ist - denn der Name zeigt ja, dass es sich nicht um Mehrzahl handelt.
Deshalb sind korrekte, aussagekräftige Namen wichtig für den Leser. Und der Leser bist im Zweifelsfall du.

Und die schlechte Vergabe von Namen führt in deinem Fall noch dazu, dass niemand eine Idee hat, was du eigentlich vor hast. Es drängt sich nämlich die Erkenntnis auf, dass die for-Schleife völlig fehl am Platz ist. Denn der Code passt ja nicht zu deiner "Aufgabe", die du im ersten Post erwähnst. Zumindest sehe ich nicht, wie "andereList" in diese Anforderung passt.
cyberangle
User
Beiträge: 19
Registriert: Freitag 30. Oktober 2020, 09:39

Mittwoch 18. November 2020, 09:55

hallo sparrow,
die VariableWurfList steht für Würfelliste und enthält alle Würfe die mit 3 Würfeln möglich sind und über den Index kann ich die entsprechenden Würfe auswerten.
Pycharm werde ich in den Einstellungen noch einmal durchsehen.

hallo /me,
weiter oben ist der klomplette Code laß ihn einfach mal mit den beiden for-Schleifen laufen dann siest Du was ich meine
Vielen Dank
cyberagle
Benutzeravatar
sparrow
User
Beiträge: 2709
Registriert: Freitag 17. April 2009, 10:28

Mittwoch 18. November 2020, 10:02

@cyberangel: Aber warum brauchst du dann eine for-Schleife?!? Um zu schauen, an welcher Stelle ein Element in einer Liste steht, gibt es die .index-Methode. Und die verwendest du doch auch. Aber bei der oben gezeigten, von dir als "geht nicht" deklarierten Variante enthält "werte" doch nur einen Wert aus der Liste (deshalb sollst du vernünftige Namen verwenden, dann wäre dir das aufgefallen!). Und wie sinnvoll ist es denn auf EINEN der Werte die index-Methode aufzurufen?
cyberangle
User
Beiträge: 19
Registriert: Freitag 30. Oktober 2020, 09:39

Mittwoch 18. November 2020, 10:49

hallo sparrow,

ich hatte die WurfList vorher auf 4 Listen verteilt und um die 4 Listen auszuwerten nutzte ich die for-Schleife.
erst später habe ich aus den 4 isten eine gemacht und wollte die dann unsinniger Weise mit der for-Schleife
auswerten weile diese ja bereits in Code stand.
Bei pycharm habe ich noch nichts entsprechdendes für die Tab Einstellungen gefunden. Ist auch schwierigda alles Engisch
Vielen Dank
cyberagle
Benutzeravatar
pillmuncher
User
Beiträge: 1266
Registriert: Samstag 21. März 2009, 22:59
Wohnort: München

Mittwoch 18. November 2020, 11:57

@cyberangle: Das englische Wort für Tab ist Tab.
In specifications, Murphy's Law supersedes Ohm's.
cyberangle
User
Beiträge: 19
Registriert: Freitag 30. Oktober 2020, 09:39

Mittwoch 18. November 2020, 17:11

Danke pillmucher,

das hattte ich dank Google Translate schon herausgefunden, aber es scheint bei pycharm keine Möglichkeit zu geben die Tabeinstellungen
zu ändern
Vielen Dank
cyberagle
Benutzeravatar
__blackjack__
User
Beiträge: 8716
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Mittwoch 18. November 2020, 19:20

Natürlich gibt es da eine Möglichkeit. Du hast sie ja verstellt, denn in der Standardeinstellung sollte eine Python-IDE das schon richtig machen.

Bei der IntelliJ IDE vom gleichen Anbieter ist diese Einstellung pro Programmiersprache. Da PyCharm auf dem gleichen Grundgerüst aufgebaut sein dürfte, müsste das da auch so sein.
long long ago; /* in a galaxy far far away */
Antworten