Seite 1 von 1

Zahlenspiel funktioniert nur in PyScripter!

Verfasst: Donnerstag 19. Dezember 2013, 20:41
von Lou Cifer
Moin!

Ich bin noch ganz neu in diesem Forum und auch noch ein totaler Anfänger was das Thema Python angeht.
Ich habe gestern angefangen mit Python zu "experimentieren", habe mir ein kleines Maß an Grundwissen angelesen und mir einige hilfreiche Tutorials angeschaut.

Nun zu meinem Problem:
Ich benutze Python 3.3, habe bis jetzt aber alles in PyScripter geschrieben und anschließend mit Pythons Command Line aufgerufen.
Nun habe ich ein kleines "Ratespiel" geschrieben, bei dem sich der Computer eine Zahl zwischen 1 und 20 ausdenkt und man diese erraten muss. Typisches Anfängerzeug eben.
Das Spiel funktioniert in PyScripter bestens, in Command Line allerdings nur so lange, bis ich die richtige Zahl erraten habe, dann beendet sich das Programm einfach.
Meiner Ansicht nach muss sich das Problem also in den letzten 6 Zeilen befinden, denn bis dahin funktioniert alles prima.

Code: Alles auswählen

# Dies ist ein Zahlenspiel---

import random

guessesTaken = 0

print('Hallo! Wie lautet dein Name?')
myName = input()

number = random.randint(1, 20)
print('Also, '+ myName + ', ich denke an eine Zahl zwischen 1 und 20.')

while guessesTaken < 6:
    print('Rate mal!')
    guess = input()
    guess = int(guess)

    guessesTaken = guessesTaken + 1

    if guess < number:
        print('Deine Zahl ist zu niedrig.')

    if guess > number:
        print('Deine Zahl ist zu hoch.')

    if guess == number:
        break

if guess == number:
    guessesTaken = str(guessesTaken)
    print('Gut gemacht, '+ myName + '! Du hast meine Zahl in  '+ guessesTaken +' Versuchen erraten!')
Könnt ihr mir sagen was ich hier falsch gemacht habe oder warum es bloß in PyScripter funktioniert? Weder die Suchfunktion noch Google hat dazu etwas brauchbares ausgepuckt. :?

Re: Zahlenspiel funktioniert nur in PyScripter!

Verfasst: Donnerstag 19. Dezember 2013, 20:46
von BlackJack
@Lou Cifer: Das was Du beschreibst ist genau das Verhalten welches man erwarten würde. Wenn das Programm bis zum Ende durchläuft ist es zuende.

Re: Zahlenspiel funktioniert nur in PyScripter!

Verfasst: Donnerstag 19. Dezember 2013, 21:04
von Lou Cifer
Danke, BlackJack für den Gedankenanstoß! Ich habe jetzt einfach noch das "time module" importiert und an das Ende ein time.sleep(20) gehangen, jetzt funktioniert alles einwandfrei. :lol: Aller Anfang ist ja bekanntlich schwer.

Re: Zahlenspiel funktioniert nur in PyScripter!

Verfasst: Donnerstag 19. Dezember 2013, 21:27
von BlackJack
@Lou Cifer: Und was soll der Sinn von dieser unnötigen Warterei sein? Das nervt doch am Ende nur die Benutzer das sie dann 20 Sekunden lang das Terminal nicht verwenden können.

Re: Zahlenspiel funktioniert nur in PyScripter!

Verfasst: Donnerstag 19. Dezember 2013, 21:41
von Lou Cifer
Ist ja erstmal nur als Übergangslösung gedacht, bis ich herausgefunden habe wie es besser umgesetzt werden kann. :|

Re: Zahlenspiel funktioniert nur in PyScripter!

Verfasst: Freitag 20. Dezember 2013, 07:11
von peddy
Ich verstehe das Problem nicht. Was ist denn deine Absicht? Soll das Spiel von vorne beginnen, wenn die Zahl erraten wurde, oder was schwebt dir vor?

Re: Zahlenspiel funktioniert nur in PyScripter!

Verfasst: Freitag 20. Dezember 2013, 08:54
von Hyperion
Darüber hinaus: Wieso gibt es keine abschließende Meldung für den Fall, dass man die Zahl nicht erraten konnte? ;-)

Einige kleine Anmerkungen:

- Die Zeilen 15 & 16 kann man doch prima zusammenfassen: ``guess = int(input())``. Man könnte sogar das ``print`` davor einsparen und den Text durch ``input`` ausgeben lassen.

- Aus den drei ``if``s könnte man ein ``if...elif...else`` machen. Denn eine Zahl kann ja nur kleiner, größer oder gleich sein als eine andere ;-) Damit hätte man die ganze Auswertungslogik imho schöner miteinander verknüpft.

- ``guessesTaken`` sieht nach Java / C# o.ä. aus. Laut PEP8 sollte es ``guesses_taken`` heißen.

- Strings konkateniert man in Python besser nicht mittels ``+`-Operator, sondern mit der ``format``-Methode auf Strings oder dem ``%`` Operator. Damit kannst Du Dir am Ende auch das Umwandeln der Versuchsanzahl in einen String sparen, denn mit beiden Methoden nimmt Python eine Umwandlung automatisch vor.

Re: Zahlenspiel funktioniert nur in PyScripter!

Verfasst: Freitag 20. Dezember 2013, 14:27
von Lou Cifer
Ursprünglich lag der Kern meiner Verwirrung dadrin, dass das Spiel in PyScripter ohne Probleme funktionierte, in Command Line allerdings nicht. Ich habe nicht dadran gedacht, dass ich kein richtiges "Ende" geschrieben habe, somit wurde es also logischerweise sofort nach dem Raten der ausgedachten Zahl beendet.

Ich habe mir heute noch ein paar Gedanken über Verbesserungen gemacht und werde logischerweise eine Meldung einfügen für den Fall, dass man die Zahl nicht innerhalb der gegebenen Versuche erraten hat.
Da ich erst vorgestern mit Python angefangen habe, lag mein Hauptaugenmerk auf der Ausführbarkeit des Spiels.
Dass man die Zeilen 15&16 auf diese Art zusammenfassen kann und ich aus den drei ''if''s "if..elif..else" machen kann, hilft mir aber ungemein. Danke für den Tipp!

Wie müsste ich denn an die Sache herangehen, wenn ich das Spiel von neu beginnen lassen will, nachdem man die Zahl erraten oder nicht erraten hat?
Ich würde gerne die Frage "Möchtest du noch einmal spielen? j / n" mit print einfügen und danach dem Benutzer die Möglichkeit geben mittels Eingabe von j oder n das Spiel erneut zu starten oder es zu beenden.
Kann ich das Spiel mit sys.exit beenden lassen? Und wie lasse ich es erneut starten?

Fragen über Fragen.. :o

Nochmals vielen Dank für die Antworten!

Re: Zahlenspiel funktioniert nur in PyScripter!

Verfasst: Freitag 20. Dezember 2013, 14:45
von Hyperion
Lou Cifer hat geschrieben: Wie müsste ich denn an die Sache herangehen, wenn ich das Spiel von neu beginnen lassen will, nachdem man die Zahl erraten oder nicht erraten hat?
Du brauchst eine Endlosschleife, in der ein Abbruch (``break``) stattfindet, sofern der Benutzer aufhören möchte. Überlicher Weise baut man die mit ``while true``. Sinnvoller Weise solltest Du Dich bald mit Funktionen befassen; denn ansonsten musst Du das Raten *und* den Ablauf drum Herum verschachteln - und das wird dann langsam unübersichtlich.

``sys.exit`` brauchst Du eigentlich hier nicht explizit!