Моя программа не возвращает истину, когда мне это нужно в Python - PullRequest
0 голосов
/ 23 апреля 2020

Я создаю игру, и у меня есть функции, которые принимают параметры и возвращают значение. Я хочу проверить, закончилась ли игра. Игра заканчивается, когда bins = [0, 0, 0, 0, 0]. Я перепробовал все и не могу заставить gameIsOver быть верным в основной функции. Что я делаю не так?

bins = [7, 7, 7, 7, 7]

gameIsOver = False

def checkGameEnd(listOfBins):
    if listOfBins[0] == 0 and listOfBins[1] == 0 and listOfBins[2] == 0 and listOfBins[3] == 0 and listOfBins[4] == 0:
        gameDidEnd = True
        return True
    else:
        gameDidEnd = False
        return False

def _main_():
    print(displayGame(bins))
    checkGameEnd(bins)
    player_1 = "Player 1"
    player_2 = "Player 2"

    while didEndGame == False:
        turnPlayer1_bin = int(input(player_1 + ", which bin do you want to remove matches from?\t"))
        turnPlayer1_matches = int(input(player_1 + ", how many matches will you remove from bin " + str(turnPlayer1_bin) + "?\t"))
        removeMatches(turnPlayer1_bin, turnPlayer1_matches, bins)
        print(displayGame(bins))
        checkGameEnd(bins)
        if didEndGame == True:
            print(player_2 + ", you win!")


        turnPlayer2_bin = int(input(player_2 + ", which bin do you want to remove matches from?\t"))
        turnPlayer2_matches = int(input(player_2 + ", how many matches will you remove from bin " + str(turnPlayer2_bin) + "?\t"))
        removeMatches(turnPlayer2_bin, turnPlayer2_matches, bins)
        print(displayGame(bins))
        checkGameEnd(bins)
        if didEndGame == True:
            print(player_1 + ", you win!")

_main_()

Ответы [ 3 ]

0 голосов
/ 23 апреля 2020

checkGameEnd(bins) может вернуть True, но вы не назначите его для didEndGame. А также вам не нужно вводить didEndGame == False или True. Измените значение while l oop, используя приведенный ниже фрагмент кода:

while not didEndGame:
    turnPlayer1_bin = int(input(player_1 + ", which bin do you want to remove matches from?\t"))
    turnPlayer1_matches = int(input(player_1 + ", how many matches will you remove from bin " + str(turnPlayer1_bin) + "?\t"))
    removeMatches(turnPlayer1_bin, turnPlayer1_matches, bins)
    print(displayGame(bins))
    didEndGame = checkGameEnd(bins)
    if didEndGame:
        print(player_2 + ", you win!")
0 голосов
/ 23 апреля 2020

Исправления вашего кода для создания рабочей версии

def checkGameEnd(bins): 
  return [0]*5 == bins  # check for bins is all zeros

def displayGame(bins):
  print('Bins:', *range(5))
  print('Vals:', *bins)

def removeMatches(turnPlayer1_bin, turnPlayer1_matches, bins):
  bins[turnPlayer1_bin] -= turnPlayer1_matches

def main(): 
  # Initialize bins
  bins = [7, 7, 7, 7, 7]

  displayGame(bins)

  player_1 = "Player 1" 
  player_2 = "Player 2"

  while True:
      turnPlayer1_bin = int(input(player_1 + ", which bin do you want to remove matches from?\t"))
      turnPlayer1_matches = int(input(player_1 + ", how many matches will you remove from bin " + str(turnPlayer1_bin) + "?\t"))
      removeMatches(turnPlayer1_bin, turnPlayer1_matches, bins)

      displayGame(bins)

      if checkGameEnd(bins):
          print(player_2 + ", you win!")
          break

      turnPlayer2_bin = int(input(player_2 + ", which bin do you want to remove matches from?\t"))
      turnPlayer2_matches = int(input(player_2 + ", how many matches will you remove from bin " + str(turnPlayer2_bin) + "?\t"))
      removeMatches(turnPlayer2_bin, turnPlayer2_matches, bins)

      displayGame(bins)

      if checkGameEnd(bins):
          print(player_1 + ", you win!")
          break

main()
0 голосов
/ 23 апреля 2020

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

didEndGame = checkGameEnd(bins)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...