2017-11-15 2 views
1

Ich bin ein kompletter Neuling und habe versucht, dieses Problem (mit meinem eigenen Kopf und mit Online-Forschung) für die letzten 5 Stunden zu lösen.Python 3: Wie man Schleife ohne Stoppen der Funktion beendet

Unten ist ein Ausschnitt einer Funktion, die wir geschrieben haben, um ein Spiel zu simulieren. Wir wollen die Möglichkeit bieten, eine neue Runde zu beginnen - das heißt, wenn ein Spieler "b" schlägt, sollte das Spiel wieder am Anfang der Reihe beginnen (0, Spieler). Aber jetzt geht es nur auf den nächsten Spieler im Bereich (wenn Spieler 1 tritt in „b“, das Programm ruft Spieler 2)

players = input(4) 
if players in range(3, 9): 
    for player in range(0, players): 
     sum_points = 0 
     throw_per_player_counter = 0 
     print("\nIt is player no.", player+1, "'s turn!\n") 
     print("\nPress 'return' to roll the dice.\n" 
       "To start a new round press 'b'.\n" 
       "Player", player+1) 
     roll_dice = input(">>> ") 
     if roll_dice == "b": 
      player = 0 
      throw_per_player_counter = 0 
      sum_points = 0 
      print("\n * A new round was started. * \n") 

Ich habe Rückkehr versucht und bricht, versuchte auch, sie alle in einer anderen zu setzen while-loop ... ist fehlgeschlagen. Break und Return haben die Funktion gerade beendet. Alle Hinweise sehr geschätzt!

Antwort

1

können Sie die for Schleife in eine while Schleife ändern. stattdessen ein range zu verwenden, machen player einen Zähler

players = 4 
if 3 <= players < 9: 
    player = 0 # here's where you make your counter 
    while player < players: 
     sum_points = 0 
     throw_per_player_counter = 0 
     print("\nIt is player no.", player+1, "'s turn!\n") 
     print("\nPress 'return' to roll the dice.\n" 
       "To start a new round press 'b'.\n" 
       "Player", player+1) 
     roll_dice = input(">>> ") 
     player += 1 # increment it 
     if roll_dice == "b": 
      player = 0 # now your reset should work 
      throw_per_player_counter = 0 
      sum_points = 0 
      print("\n * A new round was started. * \n") 
+0

Thank you! das hat tatsächlich geholfen, die Schleife zu durchbrechen! Einige Testfälle scheitern mit den sum_points (sie verdoppeln scheinbar Punkte, die sie nicht sollten), und es verrechnet manchmal, welche Spieler es sind. Werde daran arbeiten :-) –

+0

ich habe eine Menge 'player + 1' hier bemerkt und das könnte leicht ein Grund für Fehler und Fehleinschätzungen sein. Die Variable repräsentiert nicht den tatsächlichen Wert. Da "player" eine Spielernummer darstellt, die mit "1" beginnt, kann es sich lohnen, die Variable "player" neu zu schreiben, um den tatsächlichen Wert konsistent wiederzugeben. 'player = 1',' while player <= Spieler: ',' ​​print ("Spieler", Spieler) '. Dadurch kann Ihr Bug (wo immer er sich versteckt) leichter zu erkennen sein. auch, froh, dass es geholfen hat. –

Verwandte Themen