Phyton run funktioniert nur nach debuggen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Hans888
User
Beiträge: 44
Registriert: Montag 10. Juni 2024, 08:58

@Sirius3
Oh das war mir nicht benwusst mit den Fromat strings, bin noch blutiger Anfänger.
Wenn ich das mit den Format strings machen muss ich da immer vorne dran das kleine f schreiben?

Das mit der while-True-Schleife und der Schleife für das Programmende war ein guter Hinweis, dankeschön.
Nur wenn ich das jetzt so mache und zweimal nicht N oder J eingebe dann starte das Programm trotzdem. o-O

Code: Alles auswählen

import random

while True:
    LOWER_BOUND = 0
    UPPER_BOUND = 100

    secret_Number = random.randint(LOWER_BOUND, UPPER_BOUND)

    print(secret_Number)

    print()
    print("Glückspiel Zahlen raten")
    print()
    print(f"Es wurde soeben eine Zufallszahl zwischen {LOWER_BOUND} und {UPPER_BOUND} generiert.")
    print("Deine Aufgabe ist es, zu erraten welche Zahl es ist.")
    print("Viel Erfolg!")
    print()

    count = 1

    while True:
        guess = int(input(f"Wähle eine Ganzzahl zwischen {LOWER_BOUND} und {UPPER_BOUND}: "))

        if guess == secret_Number:
            print("Yeahhh, das ist korrekt.")
            break
        elif guess < secret_Number:
            print(" Die gesuchte Zahl ist größer als deine geratene Zahl!")
        else:
            print("Die gesucht Zahl ist kleiner als deine geratene Zahl!")
        count = count +1

    print(f"Du hast {count} Versuche benötigt um die korrekte Zahl zu erraten!")
    print()

    c= input("Wollen Sie das Programm beenden? (J/N): ")
    if c == "J":
        break
    elif c == "N":
        print()
    elif c != "J" or "N":
        print("Da ist eine Falsche Eingabe!")
        c= input("Wollen Sie das Programm beenden? (J/N): ")
Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn man etwas öfter machen möchte, dann braucht man eine Schleife.
`c != "J" or "N"` ist nicht das, was Du denkst, das ist ein (c != "J") or ("N"), wobei ersters in Deinem Fall zu True ausgewertet wird, zweiteres immer wie True behandelt wird. Also steht da effektiv `True or True`, man sollte hier auch sonst statt elif else benutzen.
Aber wie schon geschrieben, hier fehlt eine Schleife.
Hans888
User
Beiträge: 44
Registriert: Montag 10. Juni 2024, 08:58

Oh stimmt die Schleife:
So sollte es funktionieren .

Code: Alles auswählen

    c= input("Wollen Sie das Programm beenden? (J/N): ")
    if c == "J":
        break
    
    while True:
        if c == "N":
            print()
            break
        else:
            print("Da ist eine Falsche Eingabe!")
            c= input("Wollen Sie das Programm beenden? (J/N): ")
Hans888
User
Beiträge: 44
Registriert: Montag 10. Juni 2024, 08:58

Update so solle es funktionieren

Code: Alles auswählen

    c= input("Wollen Sie das Programm beenden? (J/N): ")
    
    while True:
        if c == "J":
            break
        elif c == "N":
            print()
            break
        else:
            c != "N"
            print("Da ist eine Falsche Eingabe!")
            c= input("Wollen Sie das Programm beenden? (J/N): ")
    if c == "J":    
        break
Benutzeravatar
snafu
User
Beiträge: 6850
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Warum ziehst du den Input-Teil nicht direkt hinter das while? Auch wird bei der Behandlung der höherliegende Code nicht erfahren, was nun gewählt wurde. Außer du löst das innerhalb einer großen Funktion, wo auf den Wert von "c" weiterhin zugegriffen werden kann.
Hans888
User
Beiträge: 44
Registriert: Montag 10. Juni 2024, 08:58

ok also wäre das ganz so jetzt richitg?
Um meine erste While -True-Schleife zu stoppen mus sich das if == "J": break nochmal eingeben?
gibts da eine elegantere Lösung?

Code: Alles auswählen


import random

while True:
    LOWER_BOUND = 0
    UPPER_BOUND = 100

    secret_Number = random.randint(LOWER_BOUND, UPPER_BOUND)

    print(secret_Number)

    print()
    print("Glückspiel Zahlen raten")
    print()
    print(f"Es wurde soeben eine Zufallszahl zwischen {LOWER_BOUND} und {UPPER_BOUND} generiert.")
    print("Deine Aufgabe ist es, zu erraten welche Zahl es ist.")
    print("Viel Erfolg!")
    print()

    count = 1

    while True:
        guess = int(input(f"Wähle eine Ganzzahl zwischen {LOWER_BOUND} und {UPPER_BOUND}: "))

        if guess == secret_Number:
            print("Yeahhh, das ist korrekt.")
            break
        elif guess < secret_Number:
            print(" Die gesuchte Zahl ist größer als deine geratene Zahl!")
        else:
            print("Die gesucht Zahl ist kleiner als deine geratene Zahl!")
        count = count +1

    print(f"Du hast {count} Versuche benötigt um die korrekte Zahl zu erraten!")
    print()
    

    
    while True:
        c = input("Wollen Sie das Programm beenden? (J/N): ")
        if c in ["J", "N"]:
            break
        print("Da ist eine falsche Eingabe!")
    if c == "J":    
        break
    
Benutzeravatar
snafu
User
Beiträge: 6850
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Kann man so machen. Wenn man etwas geübter ist, würde man Funktionen für die jeweiligen Teilaufgaben erstellen und diese entsprechend anwenden.
Benutzeravatar
__blackjack__
User
Beiträge: 14005
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Alleine eine Funktion für das Hauptprogramm würde schon das mit dem doppelten ``break`` unnötig machen, weil man diese Funktion dann mit ``return`` verlassen könnte, wo im Moment nur die innere Schleife mit ``break`` verlassen wird.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Benutzeravatar
Kebap
User
Beiträge: 772
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Hans888 hat geschrieben: Sonntag 30. Juni 2024, 16:34 gibts da eine elegantere Lösung?
Ja, bald lernst du Funktionen. Die machen solche Sachen einfacher! :mrgreen:
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Hans888
User
Beiträge: 44
Registriert: Montag 10. Juni 2024, 08:58

Ich hoffe es. Danke für eure Hilfe und Erklärungen.
Antworten