Weiß jemand wie man in drei Zeilen ein Programm in Python programmiert, was in 7 Versuchen eine Zahl errät?
Ich will ein Programm in Python programmierern, was eine Zahl in 7 Versuchen eine eingebene Zahl errät. Es soll wenn's geht in drei Zeilen Code Programmiert werden. Wenn nicht das nicht geht ,auch mehr Zeilen Code möglich
3 Antworten
low, high = 1, 100
for _ in range(7):
guess = (low + high) // 2
print(f"Ich rate: {guess}")
feedback = input("Ist das (k)orrekt, zu (h)och oder zu (n)iedrig? ").lower()
if feedback == 'k':
print("Ich habe deine Zahl erraten!")
break
elif feedback == 'h':
high = guess - 1
elif feedback == 'n':
low = guess + 1
else:
print("Ich konnte die Zahl nicht in 7 Versuchen erraten.")
Komprimiert:
a,b=1,100
for _ in range(7):c=(a+b)//2;print(c);r=input();[exit() for _ in[0] if r=='k'];a,b=[c+1,b]if r=='n'else[a,c-1]if r=='h'else[a,b]
Beschreibe mal genauer, wie du dir das vorstellst. Beispielsweise mit einem Beispiel, wie die Eingabe bzw. Ausgabe aussehen soll. Ich verstehe nämlich anhand deiner Beschreibung noch nicht, was das Programm machen soll.
Denn... Wenn du die Zahl eingibst, kennt das Programm die Zahl doch. Da braucht das Programm doch nicht raten.
Ich will ein Programm in Python programmierern, was eine Zahl in 7 Versuchen eine eingebene Zahl errät.
Also sowas in der Art...?
print("Denke Sie sich eine natürliche Zahl kleiner als 128.")
print("Ich werde die Zahl nach 7 Versuchen (Fragen) nennen.")
a, b = 0, 128
for n in range(1, 8):
c = (a + b)//2
while True:
r = input(f"{n}. Versuch: Ist die Zahl kleiner als {c}? [y/n]: ").lower()
if r in ['y', 'yes', 'j', 'ja', '1']:
b = c
break
elif r in ['n', 'no', 'nein', '0']:
a = c
break
else:
print("Ihre Eingabe wurde nicht erkannt.")
continue
print(f"Die von Ihnen gedachte Zahl ist: {a}")
Beispiel-Durchlauf für die gedachte Zahl 36...
Denke Sie sich eine natürliche Zahl kleiner als 128.
Ich werde die Zahl nach 7 Versuchen (Fragen) nennen.
1. Versuch: Ist die Zahl kleiner als 64? [y/n]: y
2. Versuch: Ist die Zahl kleiner als 32? [y/n]: n
3. Versuch: Ist die Zahl kleiner als 48? [y/n]: y
4. Versuch: Ist die Zahl kleiner als 40? [y/n]: y
5. Versuch: Ist die Zahl kleiner als 36? [y/n]: y
6. Versuch: Ist die Zahl kleiner als 34? [y/n]: n
7. Versuch: Ist die Zahl kleiner als 35? [y/n]: n
Die von Ihnen gedachte Zahl ist: 35
Es sollte möglich sein, das auch in 3 Zeilen zu programmieren. Das wären dann aber recht lange Zeilen, und es wird sehr unübersichtlich. Glaub mir, das möchtest du nicht in 3 Zeilen haben.
Kommentar:
# Nach jedem Schritt hat man zwei Zahlen a, b, wobei a <= g < b
# mit der gedachten Zahl g gilt.
# Es sind 128 gedachte Zahlen möglich.
# In jedem der Versuch-Schritte wird der Suchbereich halbiert.
# Wegen 128 = 2**7 ist die Suche nach 7 Schritten beendet,
# da nur noch eine Zahl im Suchbereich verbleibt.
Drei Zahlen Code? Von was träumst du denn :D
Hier ein Code der das ausführt was du nach meinem Verständnis suchst. Lass es mal laufen und gib mir Feedback ob es das war was du gesucht hast.
def rate_zahl():
print("Denke dir eine Zahl zwischen 1 und 100 aus. Ich werde sie in maximal 7 Versuchen erraten!")
niedrig = 1
hoch = 100
versuche = 0
while versuche < 7:
versuche += 1
rateversuch = (niedrig + hoch) // 2
print(f"Versuch {versuche}: Ist es {rateversuch}?")
antwort = input("Antwort (zu klein / zu groß / richtig): ").lower()
if antwort == "richtig":
print(f"Juhu! Ich habe die Zahl in {versuche} Versuchen erraten.")
break
elif antwort == "zu klein":
niedrig = rateversuch + 1
elif antwort == "zu groß":
hoch = rateversuch - 1
else:
print("Ungültige Antwort. Bitte antworte mit 'zu klein', 'zu groß' oder 'richtig'.")
if versuche == 7 and antwort != "richtig":
print("Oh nein! Ich konnte die Zahl in 7 Versuchen nicht erraten.")
# Starte das Spiel
rate_zahl()
Ich meine wo das Programm immer eine Fragen stellt zur Zahl und dann am Ende mir die Zahl ausgibt