2017-11-15 11 views
1

私は完全な初心者であり、過去5時間にわたってこの問題を解決しようとしています。Python 3:関数を停止せずにループを終了する方法

以下は、ゲームをシミュレートするために作成した関数のスニペットです。我々は、新しいラウンドを開始するためにooportunityを提供したい - つまり、プレーヤーが "b"に当たった場合、ゲームは範囲の始め(0人、プレーヤー)で再び開始する必要がある。しかし、今、それはちょうど私はまた別でそれをすべて入れてみました、リターンと休憩をしようとしている範囲内の次のプレイヤー(プレイヤー1が「b」を入力した場合、プログラムがプレイヤー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") 

に行きますwhileループ...失敗しました。ブレークとリターンは関数を終了させました。 ヒントをいただければ幸いです!

答えて

1

forループをwhileループに変更することができます。代わりにrangeを使用しての、playerカウンタ

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

をありがとう!作りますそれは実際にループを壊すのに役立った!いくつかのテストケースはsum_pointsで失敗します(明らかに倍増するべきではありません)。また、どのプレイヤーがそれを回すのかを誤って評価することもあります。 –

+0

私はここで 'player + 1'をたくさん気付きました。それは簡単にエラーや誤算の原因になります。変数は実際の値を表していません。 'player'は' 1'で始まるプレーヤー番号を表すので、 'player'変数がその実際の値を一貫して反映するように書き直す価値があるかもしれません。 「player = 1」、「player <= players: '、' print( "player"、player)」のようになります。これにより、あなたのバグがどこに隠れていても見つけやすくなります。また、喜んでそれが助けました。 –

関連する問題