Python 3 нужна помощь в школьном проекте - PullRequest
0 голосов
/ 23 ноября 2018

Итак, я сейчас учусь на курсе по программированию в старшей школе и создаю программу игры, которую учитель назначил для всех нас.Игра называется «игра на палочках» (если вы хотите лучше понять, как работает игра, пропустите примерно половину этого видео https://www.youtube.com/watch?v=dUXW3Kh_kxo&t=280s). В основном у нас на столе 15 палочек, и вы можете забрать 1, 2 или 3 стика. У меня есть код, который работает для игры, но он говорит, что я делаю нелегальный ход для 5 стиков, оставшихся в любой игре. Я не могу найти проблему и надеялся, что кто-то другой мог.

pl1 = input("Player 1, what is your username?") #player 1
pl2 = input("Player 2, what is your username?") #player 2
turnsa = 0 #player1 turns
turnsb = 0 #player2 turns
x = 15 #number of sticks
whichplayer = 1 
while(x != 1): 
 while(whichplayer == 1):
   P1 = int(input(pl1 + ', choose an amount of sticks from 1-3 ' + str(x) + 
' sticks remaining')) 
   if P1 < x and P1 < 4: # check for legal move
     x = x - P1
     turnsa = turnsa + 1
     whichplayer = 2 #ending loop to start player 2 turn
   if P1 > 3 or P1 > x: #check for illegal move
     print('illegal move')
     continue #restarting player 1 loop
 while(whichplayer == 2):
   P2 = int(input(pl2 + ', choose an amount of sticks from 1-3 ' + str(x) + 
' sticks remaining'))
   if P2 < x and P2 < 4:
     x = x - P2
     turnsb = turnsb + 1
     whichplayer = 1
   if P2 > 3 or P2 > x:
     print('illegal move')
     continue 
if turnsa > turnsb:
  print('congrats ' + pl1 + ' you win')
if turnsb > turnsa:
  print('congrats ' + pl2 + ' you win')

1 Ответ

0 голосов
/ 23 ноября 2018

Вы уменьшаете x в первом операторе if, затем, когда второй if проверяет P1 > x, это правда, потому что вы устанавливаете x с 5 на 2 и P1 это 3.Вы можете просто использовать if/else здесь, так как если ход недействителен, вы уже знаете, что он будет недопустимым.Кроме того, у вас есть некоторые крайние случаи, которые необходимо проверить с помощью сравнений >, < и != (попробуйте брать по 3 палки за ход и посмотреть, что произойдет).Я оставлю все остальное для работы, так как это школьная работа, и это будет хорошим опытом обучения.Отредактирую позже, если потребуется помощь.

if P1 < x and P1 < 4: # check for legal move
    x = x - P1 # <========= decrementing here then checking it in the next if
    turnsa = turnsa + 1
    whichplayer = 2 #ending loop to start player 2 turn
if P1 > 3 or P1 > x: #check for illegal move
    print('illegal move')
    continue #restarting player 1 loop
...