Python 3 нужна помощь в школьном проекте

Итак, я сейчас учусь на курсе по программированию в старшей школе и создаю программу игры, которую учитель назначил для всех нас. Игра называется "игра на палках" (если вы хотите лучше узнать, как работает игра, пропустите примерно половину этого видео 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 ответ

Решение

Вы уменьшаете 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
Другие вопросы по тегам