Hallo zusammen,
fange gerade an so Hobbymäßig mit dem Python an.
Es gibt eine Sache die ich nicht verstehe. und zwar geht es um Punkte zusammen zählen.
punkte = 0
print("Willkommen beim Quiz!!")
print ("\n\n1.Welcher Staat ist nicht in der EU? a)Kongo b)Deutschland oder c)Kroatien")
eingabe = input("Geben Sie bitte a,b oder c ein.")
if eingabe == "a":
print("Gut gemacht!")
punkte +=1
else:print("Leider falsch")
print("\n\n2.Welche ist die beliebteste Programmiersprache? a)Python b)C oder c)Java")
eingabe = input("Geben Sie bitte a,b oder c ein. ")
if eingabe == "a":
print ("Gut gemacht!")
punkte +=1
else:
print("Leider falsch!")
print(punkte)
So werden die Punkte korrekt addiert und zum Schluss ausgegeben.
Wenn ich aber nicht "punkte + = 1 sondern nur " punkte + 1 oder punkte =+ 1 werden sie nicht zusammen addiert.
Warum ist das so. Habe da ein Verständnissproblem.
Kann mir das einer erklären. Wie gesagt habe heute mit dem Python angefangen.
LG
Punkte addieren
`+=` ist ein anderer Operator als `+` oder `=`.
`a + b` bedeutet addiere zu einem Wert einen anderen Wert und man bekommt einen neuen Wert, die Summe. `=` ist der Zuweisungsoperator, weise einem Variablennamen einen Wert zu, und `+=` ist die Kombination aus beidem, `a += b` ist also addiere den Wert a mit dem Wert b und weise das Ergebnis wieder a zu.
`a + b` bedeutet addiere zu einem Wert einen anderen Wert und man bekommt einen neuen Wert, die Summe. `=` ist der Zuweisungsoperator, weise einem Variablennamen einen Wert zu, und `+=` ist die Kombination aus beidem, `a += b` ist also addiere den Wert a mit dem Wert b und weise das Ergebnis wieder a zu.
+= ist ein Augmented Assignment. Wenn du value+=23 hast, dann wird der Wert aus value genommen und 23 hinzugezählt, Das Ergebnis wird dann in einem neuen Integer-Objekt abgelegt und value wird an dieses neue Integer-Objekt gebunden.
Mit value+23 addierst du wie im ersten Fall value und 23. Das Ergebnis wird dann auch in einem Integer-Objekt abgelegt, aber nicht neu an einen Namen gebunden. Python wirft das Objekt dann anschließend automatisch wieder weg.
value=+23 ist eine einfache Zuweisung. Dort erzeugst du ein Integer-Objekt und bindest es an den Namen value. Im Endeffekt ist das das gleiche wie value=23.
Mit value+23 addierst du wie im ersten Fall value und 23. Das Ergebnis wird dann auch in einem Integer-Objekt abgelegt, aber nicht neu an einen Namen gebunden. Python wirft das Objekt dann anschließend automatisch wieder weg.
value=+23 ist eine einfache Zuweisung. Dort erzeugst du ein Integer-Objekt und bindest es an den Namen value. Im Endeffekt ist das das gleiche wie value=23.
- __blackjack__
- User
- Beiträge: 14076
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@qcaine: Ergänzend vielleicht noch, dass das ein schönes Beispiel dafür ist, warum Leerzeichen um binäre Operatoren und das ``=`` bei Zuweisungen (ausserhalb von Argumentlisten) den Quelltext verständlicher machen, denn ``value=+23`` würde man besser ``value = +23`` schreiben, dann fällt es deutlicher auf, dass es sich bei ``=+`` nicht um *einen* Operator handelt, im Gegensatz zu ``+=``. Das unäre ``+`` ist das Gegenstück zum unären ``-`` und eigentlich überflüssig, wenn man das nicht bei einem Datentyp mit Funktionalität überlädt, oder beim Code-Golf um beispielsweise aus einem Wahrheitswert (Typ `bool`) eine Zahl (Typ `int`) zu machen.
Der Code enthält ja im Grunde zweimal fast das gleiche und scheint tatsächlich zweimal eingetippt worden zu sein, weil sich die beiden ”Kopien” geringfügig unterscheiden. Also nicht nur in den Fragetexten.
So etwas macht man als Programmierer nicht. Also weder mehrfach den fast gleichen Code tippen, noch Quelltext kopieren, einfügen, und leicht anpassen.
Das löst man mit Funktionen und/oder Schleifen und Datenstrukturen.
Streng genommen unterscheiden sich die beiden Kopien ja nur durch die Frage. Die Fragen könnte man also in eine Liste stecken und dann eine Schleife über die Elemente dieser Liste schreiben. Den Code der eine Frage stellt, die Antwort entgegen nimmt, und die Bewertung ausgibt und gegebenfalls die Punkte hoch zählt, braucht man dann nur einmal schreiben. Die auszugebende Nummer kann man auch in der/für die Schleife generieren lassen:
Das lässt sich leicht durch weitere Fragen erweitern oder durch andere Fragen ersetzen in dem man nur die Fragen in der Liste verändert. Der Code ist unabhängig von Anzahl und Inhalt der Fragen und bleibt immer gleich. Man kann dann auch einfach die Fragen, die ja nun nur noch Daten sind, und nicht mehr fest im Code stehen, auch leicht in Datendateien auslagern, und Quizzes für verschiedene Themenbereiche erstellen und die in jeweils einer eigenen Datei speichern, und immer das gleiche Programm benutzten um die Fragen zu stellen und die Antworten auszuwerten.
In der obigen Form ist es natürlich noch nicht so ganz brauchbar, weil die Spieler schnell herausfinden würden, dass immer Antwort "a" die richtige ist. Also müsste man bei den Fragen noch die richtige Antwort speichern, damit man die richtige Antwort auch an anderen Positionen angeben kann:
Der Code enthält ja im Grunde zweimal fast das gleiche und scheint tatsächlich zweimal eingetippt worden zu sein, weil sich die beiden ”Kopien” geringfügig unterscheiden. Also nicht nur in den Fragetexten.
So etwas macht man als Programmierer nicht. Also weder mehrfach den fast gleichen Code tippen, noch Quelltext kopieren, einfügen, und leicht anpassen.
Das löst man mit Funktionen und/oder Schleifen und Datenstrukturen.
Streng genommen unterscheiden sich die beiden Kopien ja nur durch die Frage. Die Fragen könnte man also in eine Liste stecken und dann eine Schleife über die Elemente dieser Liste schreiben. Den Code der eine Frage stellt, die Antwort entgegen nimmt, und die Bewertung ausgibt und gegebenfalls die Punkte hoch zählt, braucht man dann nur einmal schreiben. Die auszugebende Nummer kann man auch in der/für die Schleife generieren lassen:
Code: Alles auswählen
punkte = 0
print("Willkommen beim Quiz!!")
fragen = [
"Welcher Staat ist nicht in der EU? a) Kongo b) Deutschland oder c) Kroatien",
"Welche ist die beliebteste Programmiersprache? a) Python b) C oder c) Java",
]
for nummer, frage in enumerate(fragen, 1):
print(f"\n\n{nummer}. {frage}")
eingabe = input("Geben Sie bitte a, b oder c ein. ")
if eingabe == "a":
print("Gut gemacht!")
punkte += 1
else:
print("Leider falsch!")
print(punkte)
In der obigen Form ist es natürlich noch nicht so ganz brauchbar, weil die Spieler schnell herausfinden würden, dass immer Antwort "a" die richtige ist. Also müsste man bei den Fragen noch die richtige Antwort speichern, damit man die richtige Antwort auch an anderen Positionen angeben kann:
Code: Alles auswählen
punkte = 0
print("Willkommen beim Quiz!!")
fragen = [
(
"Welcher Staat ist nicht in der EU? a) Kongo b) Deutschland oder c) Kroatien",
"a",
),
(
"Welche ist die beliebteste Programmiersprache? a) Python b) C oder c) Java",
"a",
),
]
for nummer, (frage, korrekte_antwort) in enumerate(fragen, 1):
print(f"\n\n{nummer}. {frage}")
eingabe = input("Geben Sie bitte a, b oder c ein. ")
if eingabe == korrekte_antwort:
print("Gut gemacht!")
punkte += 1
else:
print("Leider falsch")
print(punkte)
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Hi blackjack,
ich stimme Dir absolute zu dass das so wie du vorgeschlagen hast mehr Sinn macht.
Aber es ist mein erster Tag mit Python.
Bei Schleifen for oder while bin ich noch nicht.
Kommt aber alles noch.
Das der Punkt irgendwann kommt wo man sich seinen alten Code anschaut den man vor Monaten getippt hat ..und sich denkt.. "was hast du da für ne Scheiße fabriziert ..ginge doch um die Hälfte der Zeilen weniger". Das dauert aber noch ein wenig. Aber danke dass Du mich drauf hingewiesen hast.
LG
ich stimme Dir absolute zu dass das so wie du vorgeschlagen hast mehr Sinn macht.
Aber es ist mein erster Tag mit Python.
Bei Schleifen for oder while bin ich noch nicht.
Kommt aber alles noch.
Das der Punkt irgendwann kommt wo man sich seinen alten Code anschaut den man vor Monaten getippt hat ..und sich denkt.. "was hast du da für ne Scheiße fabriziert ..ginge doch um die Hälfte der Zeilen weniger". Das dauert aber noch ein wenig. Aber danke dass Du mich drauf hingewiesen hast.
LG
