Python Code funktioniert nicht (nummer erraten)?

3 Antworten

Von Experte Hanibal545 bestätigt

Naja. Schaue dir doch mal an, was du da für eine Fehlermeldung erhältst. Da sollte sowas in der Art stehen...

TypeError: can only concatenate str (not "int") to str

Du kannst einen String (str) nicht direkt mit einer Ganzzahl (int) verketten!

============

Beispielsweise erhältst du den gleichen Fehler bei folgendem Beispiel...

"Zahl: " + 10

Das könntest du beispielsweise beheben, indem du die Zahl in einen String umwandelst...

"Zahl: " + str(10)

Innerhalb der print-Funktion könntest du die Zahl auch (mit Komma getrennt) als weiteres Argument übergeben. Dann wird die Zahl beim printen automatisch in einen string umgewandelt.

print("Zahl:", 10)

[Bei der input-Funktion geht das jedoch nicht! Die input-Funktion erwartet nur ein Argument.]

Beachte dabei, dass zwischen den Argumenten der print-Funktion standardmäßig ein Leerzeichen als Seperator eingesetzt wird. Wenn du das nicht möchtest, musst du einen anderen Seperator (beispielsweise einen leeren String) angeben...

print("Zahl: ", 10, sep='')

Oder du machst sowas wie in der Lösung, und verwendest einen f-string. Dann wird beim Einsetzen die Zahl zu einem String formatiert.

f"Zahl: {10}"

============

Im konkreten Fall hättest du also neben...

guess = int(input(f"Guess a number between 1 and {x}: "))

... also beispielsweise noch die folgenden Möglichkeit:

guess = int(input("Guess a number between 1 and "+str(x)+": "))

tswezy 
Beitragsersteller
 25.12.2022, 18:49

Danke!
Wenn ich die Zahl die ich in einen String umgeschrieben habe noch weiter benutzen möchte für eine Rechnung z.B... könnte ich dann die Zahl wieder mit int umschreiben?

0
mihisu  25.12.2022, 18:59
@tswezy

Ja könntest du. Allerdings würde ich, je nach Anwendungsfall, den entsprechenden String gar nicht abspeichern, sondern die originale Zahl abgespeichert lassen. (Oder gegebenenfalls den String zusätzlich zur originalen Zahl abspeichern.)

Beispiel:

a = 2
print("a = "+str(a))

Hier wird innerhalb die print-Funktion bei str(a) die Zahl a = 2 in den String "2" umgewandelt und mit dem vorigen String "a = " verknüpft, um den string "a = 2" zu erhalten, der dann ausgegeben wird.

Jedoch wird dabei str(a) nicht in der Variable a abgespeichert. Dementsprechend ist am Ende in der Variablen a weiterhin die Zahl 2 abgespeichert, nicht der String "2".

Anders wäre es in dem folgenden Beispiel:

a = 2
a = str(a)
print("a = "+a)
a = int(a)

Hier wird zunächst die Zahl 2 in der Variablen a gespeichert. In der nächsten Zeile wird dann der String "2" in der Variablen a gespeichert, sodass von dort an nicht mehr 2 sondern "2" in a gespeichert ist. Am Ende wird dann wieder "2" in 2 umgewandelt und in a abgespeichert. Aber: Warum sollte man das tun?! Das ist schlechter Stil. Wenn überhaupt würde ich dann eher sowas in der Art machen und den entsprechenden String zusätzlich in einer anderen Variable abspeichern:

a = 2
a_string = str(a)
print("a = "+a_string)

In wenigen Fällen ist es sinnvoll plötzlich in einer Variablen einen anderen Typ (beispielsweise string statt integer) abzuspeichern, wenn vorher ein anderer Typ abgespeichert war. Das führt eher zu Verwirrungen und ist eine potentielle Fehlerquelle, wenn man dann mal kurz nicht aufpasst.

0

x und random_number sind integer, keine Strings.

Und in Python ist die Addition zwischen einem String und einem Integer nicht definiert.

Du musst also entweder vorher den integer in einen String umwandeln (mit string(x)), dann kannst du auch die Strings mit + aneinander reihen, oder du nutzt, wie in der richtigen Version, f Strings.

Das muss kein f String sein, da darf aber kein + hin, das ist ja kein Java


Hanibal545  25.12.2022, 18:37

+ funktioniert auch, da man durch das Plus 2 Strings verbinden kann. Man muss dann nur aufpassen, dass man mit dem Plus nur 2 Strings verbinden kann. Also wenn es z.B. eine Zahl ist, muss man es erst in ein str() formatieren.

https://zetcode.com/python/add-string/

0
Hanibal545  25.12.2022, 19:30
@Maxi170703

Kann man auch machen. Obwohl ich , nicht empfehlen würde, da nicht jede Funktion ein *args hat (z.B. Input). Deshalb ich es eher mit einem f-string machen, um in Zukunft Fehler zu vermeiden.

0