Hilfe bei Informatik Zahlenraten?

4 Antworten

Man sieht nicht was bzw. ob etwas in der ersten Zeile bei dir steht.

Jedenfalls sieht es danach aus, als ob du das random-Modul nicht geladen hast. Dementsprechend kann Python mit dem „random.[irgendwas]“ nichts anfangen. Ergänze zu Beginn deines Codes

import random

um das random-Modul zu laden.

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

Bei „if versuch == 1 - 100“ solltest du bedenken, dass das im Prinzip „if versuch == -99“ ist. Du möchtest wohl nicht vergleichen, ob die Zahl gleich -99 ist, sondern ob die im Bereich von 1 bis 100 liegt. Da bräuchtest du dann „if 1 <= versuch <= 100“.

Und die weiteren ifs werden so immer erfüllt sein, wenn die erste if-Bedingung erfüllt ist. Dementsprechend sind die anderen ifs an der entsprechenden Stelle nutzlos. Ich denke auch, dass du eher die Vergleichszeichen andersrum haben möchtest, also beispielsweise „if versuch > 100“ statt „if versuch < 100“. Dann solltest du nicht einrücken bzw. evtl. sogar eher ein else-if verwenden, damit die hier Sinn ergeben.

Bzw. ist mir gerade aufgefallen, dass man stattdessen das erste if einrücken sollte. So wie es gerade dasteht, wird einfach unendlich oft nach einer Eingabe gefragt. Das erste if befindet sich außerhalb hinter der Schleife.

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

Des Weiteren hast du noch nicht implementiert, dass die Anzahl der Versuche mitgezählt wird bzw. es alternativ maximal 5 Rateversuche sein sollen. Auch dass der Nutzer nach einem Erfolg nicht nochmal eine Zahl zum Raten eingeben muss. Und du sollst auch ausgeben, ob der Rateversuch größer oder kleiner ist, als die gewählte Ratezahl.


mihisu  16.09.2021, 23:26

Ich habe gerade mal überlegt, wie ich das selbst programmieren würde. Hier meine Lösung zum Vergleich:

from random import randint
ratezahl = randint(1, 100)


print("Ich habe mir eine ganze Zahl im Bereich von 1 bis 100 ausgedacht.")
print("Versuche diese Zahl zu erraten. (Du hast bis zu 5 Versuche.)")


erraten = False
for i in range(1, 6):
    try:
        versuch = int(input(f"\n{i}. Versuch: "))
    except ValueError:
        print("Eingabe ungültig. Gib eine ganze Zahl ein!")
        continue
    if versuch < 1 or versuch > 100:
        print("Die eingegebene Zahl liegt nicht im Bereich von 1 bis 100.")
    elif versuch == ratezahl:
        print("Richtig erraten!")
        erraten = True
        break
    elif versuch < ratezahl:
        print("Leider falsch. Die eingegebene Zahl ist zu klein.")
    elif versuch > ratezahl:
        print("Leider falsch. Die eingegebene Zahl ist zu groß.")
    else:
        raise RuntimeError("Beim Vergleich der Zahlen ist ein unerwarteter Fehler aufgetreten.")
if not erraten:
    print("\nLeider hast du die Zahl nicht innerhalb von 5 Versuchen erraten.")
    print(f"Die richtige Zahl wäre {ratezahl} gewesen.")

Du solltest natürlich bedenken, dass das nicht DIE richtige Lösung ist. Das Spiel kann man auf unterschiedliche Weise programmieren. Und außerdem geht es ja auch eher darum, dass die Aufgabe dazu da ist, dass du Programmieren lernst bzw. übst. Daher ist es evtl. sinnvoller, wenn du dich an deinem Programmier-Versuch orientierst und versucht diesen zu verbessern, statt zu viel von mir zu übernehmen. Aber evtl. bekommst du aufgrund meiner Lösung evtl. Ideen/Ansätze.

0
mihisu  16.09.2021, 23:36
@mihisu

Die Lösung aus meinem vorigen Kommentar ist für die Alternative mit maximal 5 Versuchen. Hier noch ein Lösungsvorschlag ohne diese Begrenzung:

from random import randint
ratezahl = randint(1, 100)


print("Ich habe mir eine ganze Zahl im Bereich von 1 bis 100 ausgedacht.")
print("Versuche diese Zahl zu erraten.")
print("Durch Eingabe von 0 kannst du das Spiel abbrechen.")


anzahlVersuche = 0
while True:
    anzahlVersuche += 1
    try:
        versuch = int(input(f"\n{anzahlVersuche}. Versuch: "))
    except ValueError:
        print("Eingabe ungültig. Gib eine ganze Zahl ein!")
        continue
    if versuch == 0:
        print(f"Du hast das Spiel nach {anzahlVersuche} Versuchen abgebrochen.")
        break
    elif versuch < 1 or versuch > 100:
        print("Die eingegebene Zahl liegt nicht im Bereich von 1 bis 100.")
    elif versuch == ratezahl:
        print(f"Glückwunsch! Du hast die Zahl {ratezahl} nach {anzahlVersuche} Versuchen richtig erraten!")
        erraten = True
        break
    elif versuch < ratezahl:
        print("Leider falsch. Die eingegebene Zahl ist zu klein.")
    elif versuch > ratezahl:
        print("Leider falsch. Die eingegebene Zahl ist zu groß.")
    else:
        raise RuntimeError("Beim Vergleich der Zahlen ist ein unerwarteter Fehler aufgetreten.")
0

dir fehlt der import für das random-Modul :-)

import random

ratezahl = random.randint(1,100)
versuche = 0
print("Ich hab mir eine Zahl von 1-100 ausgedacht.")

while True:
    versuch = int(input("Rate meine Zahl"))
    versuche = versuche + 1 
    if versuch == ratezahl:
        print("Richtig erraten! Du hast { versuche } gebraucht")
        break;
    if versuch < ratezahl:
        print("deine Zahl ist zu klein")
    if versuch > ratezahl:
        print("deine Zahl ist zu groß")
Woher ich das weiß:Berufserfahrung

Du musst zuerst "random" importieren, also:

import random

Das kommt in die erste Zeile, darunter dein restlicher Code

Und schreib in Zeile 8 folgendes rein:

if versuch == ratezahl:

A) Du musst random erst importieren. Das ist der Syntaxfehlee.

B) Keine Ahnung was dein Vergleich == 1 - 100 soll, aber du musst auf die Zufallszahl prüfen


procoder42  16.09.2021, 22:40

C) Deine Weiteren Überprüfungen ergeben auch keinen Sinn. Du sollst ausgeben, ob die Eingegebene Zahl kleiner oder größer der Zufallszahl ist, damit der Nutzer den Bereich eingrenzen kann

Ach, und dein erstes if in Zeile 8 ist falsch eingerückt

0