2017-10-19 3 views
-1

Also versuche ich Python zu lernen und ich habe ein Programm geschrieben, das im Wesentlichen entwickelt wurde, um ein Spiel mit dem Benutzer und einem Computer zu spielen.Mein Programm erzeugt Ungültigkeitsanweisung in einer Schleife. Ich weiß nicht, wie ich es beheben kann

dieses Spiel Mechanik sind:

Es gibt zwei Spieler: der Benutzer und der Computer, der alternative dreht, bis einer von ihnen erreicht 100 Punkte oder höher.

• Der Benutzer ist immer der erste Spieler.

• Wenn ein Spieler am Ende seines Zuges 100 Punkte oder mehr erreicht, endet das Spiel sofort und der andere Spieler erhält keinen weiteren Zug.

• Eine Runde besteht aus folgendem: Der Spieler würfelt einen 6-seitigen Würfel.
o Wenn sie eine 1 würfeln, erhalten sie 1 Punkt und ihr Zug ist beendet. Selbst wenn ein Spieler angesammelte Punkte aus vorherigen Würfen hat, wenn er eine 1 würfelt, ist sein Ergebnis für diesen Zug 1 Punkt und sein Zug ist beendet.

o Wenn sie eine andere Zahl würfeln, wird der Roll-Punktestand zum Turn-Total addiert.

o Dann haben sie die Option, weiter zu rollen oder zu halten. Es gibt keine Einschränkung wie oft ein Spieler in einem Zug rollen darf.

• Halten: Wenn ein Spieler hält, erhält er die aktuelle Runde und sein Zug endet. Wenn zum Beispiel ein Spieler eine 3, 4 und 2 würfelt, dann entscheidet er zu halten, erhält er 9 Punkte.

• Wenn der Spieler den Benutzer ist, sie die Möglichkeit, zu bestimmten, ob sie möchten
weiter rollen oder halten Sie nach jeder sie das Werkzeug Zeit rollen und bekommen keine 1.

• Wenn der Spieler ist der Computer, sie werden immer weiter rollen, bis sie insgesamt
den Wert 10 oder höher erreichen.

Das Problem mit dem Code ist es erzeugt eine unendliche Druckanweisung, wenn der Code ausgeführt wird. Ich habe es auf die Boolesche Anweisung in der Hauptfunktion heruntergearbeitet, wo ich is_user_turn = True gesetzt habe. Ich habe den Code durchsortiert, aber es gibt etwas, das ich nicht sehe, und brauche Hilfe, es zu reparieren. Hier

ist der Code:

import random 

def welcome(): 
    print("Welcome to Jeopordy") 

def print_current_player(is_user_turn): 

    if (is_user_turn == True): 
     print("It is now human's turn") 
    if (is_user_turn == False): 
     print("It is now computer's turn") 

def roll_die(): 

    roll = random(1,6) 
    return roll 

def take_turn(is_user_turn,Computer_Hold): 

    turn_total = 0 

    if(is_user_turn == True): 
     while(is_user_turn == True): 
      roll = roll_die() 

     if(roll == 1): 
      return 1 
     turn_total = turn_total + roll 
     print("Your turn total is 1") 
     is_user_turn = False 

    else: 
     print("You rolled a ",roll) 
     turn_total = turn_total + roll 
     print("Your turn total is ",turn_total) 
     play = input("Do you want to roll gain (Y/N)?") 

    if(play == 'N' or play == 'n'): 
     is_user_turn = False 
     return turn_total 

    else: 
     is_user_turn == True 

    if(is_user_turn == False): 

      while(is_user_turn == False): 
       roll = roll_die() 

      while(turn_total <= Computer_Hold): 
       if(roll + turn_total <= Computer_Hold): 
        print("You rolled a ", roll) 
        turn_total = turn_total + roll 
        print("Your turn total is ",turn_total) 

    return turn_total 

def report_points(userscore,computerscore): 
    print("computer: ",computerscore) 
    print("user: ",userscore) 

def get_next_player(is_user_turn): 
    if(is_user_turn == True): 
     is_user_turn = False 
     return is_user_turn 
    else: 
     is_user_turn = True 
     return is_user_turn 

def main(): 

    Game_End_Points = 100 
    Computer_Hold = 10 
    is_user_turn = True 
    userscore = 0 
    computerscore = 0 

    welcome() 
    while(userscore <= Game_End_Points and computerscore <= Game_End_Points): 
     print_current_player(is_user_turn) 

     if(get_next_player(is_user_turn) == True): 
      userscore = userscore + take_turn(is_user_turn,Computer_Hold) 
      report_points(userscore,computerscore) 
      get_next_player(is_user_turn) 
     elif(get_next_player(is_user_turn) == False): 
      computerscore = computerscore + take_turn(is_user_turn,Computer_Hold) 
      report_points(userscore,computerscore) 
      get_next_player(is_user_turn) 

main() 
+0

Willkommen bei StackOverflow. Bitte lesen und befolgen Sie die Buchungsrichtlinien in der Hilfe. [Minimales, vollständiges, überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) gilt hier. Wir können Ihnen nicht effektiv helfen, bis Sie Ihren MCVE-Code veröffentlicht und das Problem genau beschrieben haben. Wir sollten in der Lage sein, Ihren gesendeten Code in eine Textdatei einzufügen und das beschriebene Problem zu reproduzieren. – Prune

+0

Wir brauchen nicht diesen Hintergrund und Ihr gesamtes Programm. Bitte schneiden Sie Ihre Frage ab. Sie haben das Problem eingegrenzt - großartig! Einfach diesen Teil posten! – Blorgbeard

+0

Sie haben nur einen Fehler in der Einrückung der 8 Zeilen nach der While-Schleife. Sie sollten Teil der While-Schleife sein. – justhalf

Antwort

1

Dieser Teil ist der Fehler:

while(userscore <= Game_End_Points and computerscore <= Game_End_Points): 
     print_current_player(is_user_turn) 

dies führt diese Funktion unendlich:

def print_current_player(is_user_turn): 

    if (is_user_turn == True): 
     print("It is now human's turn") 
    if (is_user_turn == False): 
     print("It is now computer's turn") 

seit Ihrer Funktion userscore oder computerscore nicht ändert, ist es dort stecken bleibt. Das ist mein Hinweis für jetzt. Wenn Sie weitere Hilfe benötigen, fragen Sie einfach bei Kommentar. Hinzugefügt Hinweis: "Indent" auch, nur überprüft Ihren ganzen Code - scheint es auch andere Fehler :)

+0

Nach meinem Verständnis muss diese Funktion beendet werden, um das Drucken dieser Aussage zu stoppen. Ich bin mir nicht ganz sicher, wie ich das machen soll. Vielleicht kann ich einen Zähler benutzen? – dezz

+0

Fixiert auch die Einbuchtung. – dezz

+0

Sie können einen Zähler verwenden, aber das ist nicht das, was Sie in dieser Zeile erreichen möchten, oder? Denken Sie nicht daran, die Schleife zuerst zu beenden, sondern was als nächster Schritt ausgeführt werden soll. Das ist dein erster Schritt dorthin. – jabargas

0

Ich kann nicht sicher sagen, aber es sieht so könnte dies die Schleife verursachen oder zumindest dabei, einige Probleme für Sie zu verursachen:

if(play == 'N' or play == 'n'): 
    is_user_turn = False 
    return turn_total 

else: 
    is_user_turn == True 

In der Else-Anweisung überprüfen Sie, dass is_user_turn True ist, anstatt einen True-Wert zuzuweisen. Sieht aus wie es sein sollte

+0

Ich habe es repariert, danke für den Haken! – dezz

1

Die Variable userscore wird immer weniger als die Game_End_Points und so wird Computer-Score sein und wird daher unendlich Schleife, verwenden Sie einige Zähler in der Schleife.

while(userscore <= Game_End_Points and computerscore <= Game_End_Points): 
    print_current_player(is_user_turn) 
    userscore=userscore+10 #something like this 
    computerscore+=10 
Verwandte Themen