import random
def code():
i = int(random.randint(1, 10))
# = True
# print(i)
question = int(input("Enter any number from 1 to 10 here: "))
while question > 10:
print(int("The entry must be from 1 to 10 and cannot be smaller or larger"))
print(code())
while question < 0:
print(int("The entry must be from 1 to 10 and cannot be smaller or larger"))
print(code())
print(i)
# print(question)
if i == question:
print("you got the right number. Congratulation!")
print("If you want to play again click on the - Run 'main' - button in the right top corner.")
while question != i:
print(code())
code()
None wird ausgegeben?
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
wenn du eine Frage zu deinem Code hast, dann solltest du diese stellen... Außerdem fehlen im Code die Einrückungen - damit kann man nicht beurteilen, ob das grundsätzlich überhaupt läuft. Code bitte in einem Codeblock posten. Den erreichst du, indem du im Editor auf die </> Schaltfläche klickst.
`print(code())` macht wenig Sinn, weil die Funktion `code()` keinen Rückgabewert hat. Bzw. den wird `None` zurück gegeben.
Gruß, noisefloor
wenn du eine Frage zu deinem Code hast, dann solltest du diese stellen... Außerdem fehlen im Code die Einrückungen - damit kann man nicht beurteilen, ob das grundsätzlich überhaupt läuft. Code bitte in einem Codeblock posten. Den erreichst du, indem du im Editor auf die </> Schaltfläche klickst.
`print(code())` macht wenig Sinn, weil die Funktion `code()` keinen Rückgabewert hat. Bzw. den wird `None` zurück gegeben.
Gruß, noisefloor
Also "None" wird nicht ausgegeben
(kleiner Tipp an alle die es noch nicht wissen, bei Antwort mit Zitat, sieht man die ursprüngliche Einrückung des Autors)
@Matteo Fragasso
Mit </> - Code Tags würde das so aussehen. Ich habe deine Kommentare entfernt und dafür ein paar Anmerkungen von mir eingefügt
Das wäre mein Vorschlag:
(kleiner Tipp an alle die es noch nicht wissen, bei Antwort mit Zitat, sieht man die ursprüngliche Einrückung des Autors)
@Matteo Fragasso
Mit </> - Code Tags würde das so aussehen. Ich habe deine Kommentare entfernt und dafür ein paar Anmerkungen von mir eingefügt
Code: Alles auswählen
import random
def code():
# wie der Name schon andeutet, liefert randint einen int-Wert. Die Konvertierung in int ist also nicht nötig
i = int(random.randint(1, 10))
question = int(input("Enter any number from 1 to 10 here: "))
while question > 10:
print(int("The entry must be from 1 to 10 and cannot be smaller or larger"))
# Dieser recursive Aufruf ist keine gute Idee. Statt dessen bietet sich eine while True Schleife an
print(code())
while question < 0:
# Dies ist der gleiche Text wie oben und kann zusammen gefasst werden
print(int("The entry must be from 1 to 10 and cannot be smaller or larger"))
print(code())
print(i)
if i == question:
print("you got the right number. Congratulation!")
print("If you want to play again click on the - Run 'main' - button in the right top corner.")
while question != i:
print(code())
code()
Code: Alles auswählen
import random
def guessing_game():
while True:
random_number = random.randint(1, 10)
guess = int(input("Enter any number from 1 to 10 here: "))
if not 1 <= guess <= 10:
print("The entry must be from 1 to 10 and cannot be smaller or larger")
continue
print(random_number)
if random_number == guess:
print("you got the right number. Congratulation!")
print("If you want to play again,")
print("click on the - Run 'main' - button in the right top corner.")
break
guessing_game()
Hallo,
ich habe schon öfters gelesen, das es für 'continue' nicht so viele sinnvolle Anwendungen geben soll. Wann es sinnvoll ist und wann nicht kann ich nicht müsste ich auch erst noch mal nach lesen.
Wie dem auch sei, ich habe hier das Beispiel von @rogerb noch umgeschrieben, so sind beide Vaianten verfügbar.
Grüße
Dennis
ich habe schon öfters gelesen, das es für 'continue' nicht so viele sinnvolle Anwendungen geben soll. Wann es sinnvoll ist und wann nicht kann ich nicht müsste ich auch erst noch mal nach lesen.
Wie dem auch sei, ich habe hier das Beispiel von @rogerb noch umgeschrieben, so sind beide Vaianten verfügbar.
Code: Alles auswählen
import random
def guessing_game():
while True:
random_number = random.randint(1, 10)
guess = int(input("Enter any number from 1 to 10 here: "))
if 1 <= guess <= 10:
if random_number == guess:
print(
"you got the right number. Congratulation!\n"
"If you want to play again,\n"
"click on the - Run 'main' - button in the right top corner."
)
break
else:
print(f"Sorry, the right number is {random_number}")
else:
print("The entry must be from 1 to 10 and cannot be smaller or larger")
def main():
guessing_game()
if __name__ == "__main__":
main()
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
@Dennis89: das `continue` in rogerb`s Code ist nicht so optimal, weil es verschleiert, dass eigentlich in einer Schleife zwei verschiedene Dinge gemacht werden. Erstens so lange eine Eingabe wiederholen, bis die Zahl zwischen 1 und 10 ist, und so lange dieses 1-10-Eingeben wiederholen, bis die Zahl gleich der gewürfelten Zahl ist.
Das macht Dein Code durch die tiefe if-else-Verschachtelung auch nicht besser.
Das macht Dein Code durch die tiefe if-else-Verschachtelung auch nicht besser.
Code: Alles auswählen
import random
def input_number():
while True:
try:
number = int(input("Enter any number from 1 to 10 here: "))
if 1 <= number <= 10:
return number
except ValueError:
pass
print("The entry must be from 1 to 10 and cannot be smaller or larger")
def guessing_game():
while True:
random_number = random.randint(1, 10)
guess = input_number()
if random_number == guess:
break
print(f"Sorry, the right number is {random_number}")
print(
"you got the right number. Congratulation!\n"
"If you want to play again,\n"
"click on the - Run 'main' - button in the right top corner."
)
if __name__ == "__main__":
guessing_game()
Okay, das verstehe ich. Danke für die Erklärung.
Könntest du mir bitte noch sagen, wieso in deinem 'except'-Block ein 'pass' steht?
Ich hätte das 'pass' durch den darunter stehenden 'print'-Aufruf ersetzt. Wäre das falsch?
Grüße
Dennis
Könntest du mir bitte noch sagen, wieso in deinem 'except'-Block ein 'pass' steht?
Ich hätte das 'pass' durch den darunter stehenden 'print'-Aufruf ersetzt. Wäre das falsch?
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
@Dennis89,
"continue" kann man verwenden, um die Einrücktiefe nicht zu groß werden zu lassen. Wird die Abarbeitung der Schleife durch continue abgebrochen, erspart man sich den else-Zweig.
Ich denke dein Code zeigt das auch deutlich.
Ob das jetzt gut oder schlecht ist, sei jedem selbst überlassen.
Ich bin der Meinung, dass die Verwendung von "continue" den Code oft leserlicher macht. Man darf es aber nicht übertreiben. Bei sehr langen und womöglich noch verschachtelten Verzweigungen, kann es zum Problem werden.
Ich gebe Sirus3 in sofern recht, dass meine while-Schleife zu viele verschiedene Dinge tut (also naja, - zwei). Code der in einzelne Funktionen aufgebrochen ist, lässt sich einfacher testen, denn die Kombinationen von Eingangs- und Ausgangsparametern ist dann einfacher zu bewältigen. Wenn man einen Anfänger abholen will, ist es aber manchmal besser den Ausgangscode nicht zu stark zu verändern - meine Meinung.
Abgesehen davon, ist das etwas woran ich persönlich arbeiten muss.
Ich denke an Stelle des "pass" gäbe es eine gute Gelegenheit dem User nochmal feedback zu einer falschen Eingabe zu geben:
Der else-Zweig nach try-except wird nur ausgeführt wenn es keine Exception gab. Dadurch wird das Exception-handling präziser, denn die if-Bedingung muss da nicht mit drin sein.
"continue" kann man verwenden, um die Einrücktiefe nicht zu groß werden zu lassen. Wird die Abarbeitung der Schleife durch continue abgebrochen, erspart man sich den else-Zweig.
Ich denke dein Code zeigt das auch deutlich.
Ob das jetzt gut oder schlecht ist, sei jedem selbst überlassen.
Ich bin der Meinung, dass die Verwendung von "continue" den Code oft leserlicher macht. Man darf es aber nicht übertreiben. Bei sehr langen und womöglich noch verschachtelten Verzweigungen, kann es zum Problem werden.
Ich gebe Sirus3 in sofern recht, dass meine while-Schleife zu viele verschiedene Dinge tut (also naja, - zwei). Code der in einzelne Funktionen aufgebrochen ist, lässt sich einfacher testen, denn die Kombinationen von Eingangs- und Ausgangsparametern ist dann einfacher zu bewältigen. Wenn man einen Anfänger abholen will, ist es aber manchmal besser den Ausgangscode nicht zu stark zu verändern - meine Meinung.
Abgesehen davon, ist das etwas woran ich persönlich arbeiten muss.
Ich denke an Stelle des "pass" gäbe es eine gute Gelegenheit dem User nochmal feedback zu einer falschen Eingabe zu geben:
Code: Alles auswählen
import random
def isvalid(number):
if not 1 <= number <= 10:
print("The entry must be from 1 to 10 and cannot be smaller or larger")
return False
return True
def input_number():
while True:
user_input = input("Enter any number from 1 to 10 here: ")
try:
number = int(user_input)
except ValueError:
print(f"{user_input} is not a valid input. Only numbers are allowed")
else:
if isvalid(number):
return number
def guessing_game():
while True:
random_number = random.randint(1, 10)
guess = input_number()
if random_number == guess:
break
print(f"Sorry, the right number is {random_number}")
print(
"you got the right number. Congratulation!\n"
"If you want to play again,\n"
"click on the - Run 'main' - button in the right top corner."
)
if __name__ == "__main__":
guessing_game()