Seite 1 von 1
error mit ">"
Verfasst: Montag 13. April 2020, 13:01
von Ullimell
Hallo Pythoner,
Da, auf Grund von Coruna, viel Zeit versuche ich mich ein klein wenig in programmieren.
Bei mir läuft Python Version 3.6.9 und Tk Version 8.6.8.
In einem Tutorial komme ich einfach nicht weiter. Bekomme in meinem script folgende Meldung:
TypeError: '>' not supported between instances of 'str' and 'int'
Was könnte ich da ändern.
Auch ein copy und paste des Tutorialscriptes gib diese Fehlermeldung aus.
Eine Googlrecherche war nicht Ziehlführend.
Hoffe auf Eure Hilfe.
ullimell
Re: error mit ">"
Verfasst: Montag 13. April 2020, 13:54
von Sirius3
Indem Du zwei Zahlen miteinander vergleichst. Aber ohne Code kann man da nicht viel mehr sagen.
Re: error mit ">"
Verfasst: Montag 13. April 2020, 15:38
von __blackjack__
Noch mal die Ursache, die ja eigentlich ziemlich deutlich in der Fehlermeldung steht, an einem Beispiel verdeutlicht:
Code: Alles auswählen
In [498]: "42" > 23
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-498-d31f8d5e21f8> in <module>
----> 1 "42" > 23
TypeError: '>' not supported between instances of 'str' and 'int'
Re: error mit ">"
Verfasst: Montag 13. April 2020, 19:12
von /me
Ullimell hat geschrieben: Montag 13. April 2020, 13:01
Auch ein copy und paste des Tutorialscriptes gib diese Fehlermeldung aus.
Ist das Tutorialskript vielleicht noch auf das nicht mehr unterstützte Python 2 ausgelegt? Da ging so ein Vergleich noch, brachte dann aber andere Ergebnisse als der Anwender erwartete. Deshalb geht es jetzt zu Recht nicht mehr.
Re: error mit ">"
Verfasst: Dienstag 14. April 2020, 12:24
von unknown_user_123
Wenn ich es richtig sehe, dann handelt es sich bei "42" um einen String und bei 23 um einen Integer. Diese kann man nicht miteinander vergleichen. Wenn sie den Link von dem Tutorial schicken könnt ich mir villeicht kurz ansehen, was falsch erklärt wurde, falls das Tutorial kostenlos ist.
Re: error mit ">"
Verfasst: Dienstag 14. April 2020, 15:43
von Ullimell
Hier das scipt:
import random
ratezahl = random.randint(0,100)
durchgang = 0
aktiv = True
while aktiv:
print(durchgang)
durchgang = durchgang + 1
benutzereingabe = input("Bitte Zahl eingeben: ")
if benutzereingabe == ratezahl:
print("Gewonnen! Zahl richtig")
aktiv = False
break
elif benutzereingabe > ratezahl:
print("Zahl zu groß")
else:
print("Zahl zu klein")
if (durchgang == 7):
print("Schade. Leider verloren")
print("Es wäre die Nummer " + str(ratezahl))
aktive =False
if (benutzereingabe == "ende"):
aktiv = False
print("Ende des Spiels")
Hier die Fehlermeldung
0
Bitte Zahl eingeben: 67
Traceback (most recent call last):
File "/home/ulli/Python-TESTS/1 AUS 7.py", line 17, in <module>
elif benutzereingabe > ratezahl:
TypeError: '>' not supported between instances of 'str' and 'int'
>>>
Gruß
ullimell
Re: error mit ">"
Verfasst: Dienstag 14. April 2020, 16:12
von nezzcarth
Eingaben, die du mit 'input()' entgegen nimmst, sind Strings. Du musst sie mit 'int()' in eine Ganzzahl umwandeln, damit der Vergleich funktioniert.
Re: error mit ">"
Verfasst: Dienstag 14. April 2020, 17:09
von Ullimell
@ nezzcarth,
habe es nun begriffen wenn ein input aus einer Eingabe besteht muss dieses mit int () beginnen.
Beispiel: int (input()).
Danke für die Erklärung.
ullimell
Re: error mit ">"
Verfasst: Dienstag 14. April 2020, 18:28
von __blackjack__
@Ullimell: Anmerkungen zum Quelltext:
Die Klammern um die Bedingungen bei zwei der ``if``-Anweisungen sind überflüssig und sollten dort nicht stehen.
`aktiv` kann man sich sparen wenn man eine ”Endlosschleife” schreibt und die jeweils bei passender Gelegenheit mit ``break`` verlässt. Einmal ist `aktiv` falsch geschrieben und kommt da zu einem `NameError`.
Wobei das auch eher eine ``for``-Schleife ist, denn in dieser ``while``-Schleife wird eine Laufvariable `durchgang` manuell hochgezählt, was sich ganz prima als Schleifenvariable für ``for`` machen würde.
Zeichenketten und Werte mit ``+`` und `str()` zusammenstückeln ist eher BASIC als Python. In Python gibt es dafür Zeichenkettenformatierung mit der `format()`-Methode oder ab Python 3.6 auch f-Zeichenkettenliterale.
Literale Wert die von anderen Werten abhängen sollten aus denen berechnet werden. Sonst hat man unnötig Arbeit und eine potentielle Gefahrenquelle wenn man da mal etwas ändern muss oder will, und daran denken muss auch alle abhängigen Werte entsprechend zu ändern. Die 7 hängt ja beispielsweise ganz klar mit der 100 zusammen (sieht bestimmt auch jeder sofort

).
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python3
import random
from math import ceil, log2
GEHEIMZAHL_OBERGRENZE = 100
def main():
geheime_zahl = random.randint(0, GEHEIMZAHL_OBERGRENZE)
for durchgang in range(ceil(log2(GEHEIMZAHL_OBERGRENZE))):
print(durchgang)
benutzereingabe = input("Bitte Zahl eingeben: ")
if benutzereingabe == "ende":
break
zahl = int(benutzereingabe)
if zahl == geheime_zahl:
print("Gewonnen! Zahl richtig")
break
if zahl > geheime_zahl:
print("Zahl zu groß")
else:
print("Zahl zu klein")
else:
print("Schade. Leider verloren")
print("Es wäre die Nummer", geheime_zahl)
print("Ende des Spiels")
if __name__ == "__main__":
main()