2016-09-19 60 views
-1

我寫了下面的python腳本來實現我的版本的遊戲NIMS /石的Python腳本循環

def nims_stones(pile, max_stones): 

    while pile != 0: 

     move = 0 

     while move < 1 or move > max_stones: 
      move = int(raw_input("Player 1 How Many Stones")) 
     pile -= move 

     if pile == 0: 
      print "Player 1 wins" 

     else: 
      print "There are %s stones left." %(pile) 



     move = 0 

     while move < 1 or move > max_stones: 
      move = int(raw_input("Player 2 How Many Stones")) 
     pile -= move 

     if pile == 0: 
      print "Player 2 wins" 

     else: 
      print "There are %s stones left." %(pile) 

    print "Game Over" 

當我調用該函數nims_stones(10,5)這似乎工作,但球員的一個或播放後兩個勝,它不退出循環它不打印「遊戲結束」它只是要求下一步

我不知道爲什麼它不會在玩家獲勝後退出循環。任何幫助將不勝感激。

+0

我對玩家2不知道,但是在打印玩家1獲勝後,你不斷地改變'堆'。當任何一個玩家獲勝時,只要「休息」,並使你的條件成爲「真正的」。它會更清晰。 –

+0

我試過它沒有工作,它只是跳轉到遊戲結束 – user2919794

回答

2

當玩家1清空樁時,您應該停止循環。由於您對第二個玩家的代碼幾乎相同,因此請考慮重新使用代碼。然後,你還必須空堆檢查在循環的末尾:

def nims_stones(pile, max_stones): 
    player = 2 
    while pile != 0: 
     player = 3 - player 
     move = 0 
     while move < 1 or move > max_stones or move > pile: 
      move = int(raw_input("Player %i. How Many Stones" % (player))) 
     pile -= move 
     print ("There are %s stones left." %(pile)) 
    print ("Player %i wins" % (player)) 
    print ("Game Over") 

NB /我還添加了狀態move > pile避免玩家花費比更多的可用。

0

每個玩家獲勝後添加一個break語句將解決您的問題。您應該考慮在樁到達負值時添加邏輯。

while pile != 0: 

    move = 0 

    while move < 1 or move > max_stones: 
     move = int(raw_input("Player 1 How Many Stones")) 
    pile -= move 

    if pile == 0: 
     print "Player 1 wins" 
     break 
    else: 
     print "There are %s stones left." %(pile) 



    move = 0 

    while move < 1 or move > max_stones: 
     move = int(raw_input("Player 2 How Many Stones")) 
    pile -= move 

    if pile == 0: 
     print "Player 2 wins" 
     break 
    else: 
     print "There are %s stones left." %(pile) 

print "Game Over"