2016-09-19 3 views
-1

Я написал следующий питон скрипт, чтобы реализовать мою версию игры NIMs/камниPython Loop Script

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) Это похоже на работу, но после первого игрока или игрока два выигрыша, он не выходит из цикла, он не печатает «Game Over», он просто просит следующего перемещения

Не знаю, почему он не выходит из цикла после победы игрока. Любая помощь будет оценена.

+0

Я не знаю, для игрока 2, но после того, как печатный игрок выиграл 1, вы продолжаете менять 'pile'. Просто «ломайте», когда побеждает любой из игроков, и делайте свое условие «while True». Это будет намного яснее. –

+0

Я пробовал, чтобы он не работал, он просто перескакивает в Game Over – 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

Добавление заявления о прерывании после победы каждого игрока решит вашу проблему. Вы также должны рассмотреть возможность добавления логики, когда куча достигает отрицательного значения.

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"