Как использовать файл в цикле другого файла - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь импортировать игры в «хаб», который позволяет вам играть в игры столько раз, сколько вы хотите, и позволяет вам выбрать новую игру после окончания игры. Код снова работает, и я не могу понять, почему.

Я пробовал разные типы циклов и разные способы импорта игр, но это не работает. Я не получаю сообщение об ошибке, но игра не запускается снова. вместо этого код запускает цикл, но действует так, как будто код игры отсутствует после первого запуска. Это также не позволит вам снова выбрать игру после того, как вы сыграли в нее один раз.

while True:

    print("What game would you like to play?")
    print("")
    print("(please only type in a number)")
    Ghoice = int(input("We have: \n 1. Rock Paper Scissors \n 2. Hangman \n 3. Guess the number \n 4. Two player Tic Tac Toe"))

    if Ghoice == 1:

        import ROCK_PAPER_SCISSORS
        while True:
            ROCK_PAPER_SCISSORS.RPS
            if input("Play again? (type y or n)") != "y" or "Y":
                break

    if input("Do you want to play another game? (type y or n)") in ["n", "N"]:
        break

Примечание: у меня есть больше кода после первого выбора, но это тот же тип кода, что и в операторе if, поэтому я не думал, что это важно показывать.
Вот код для игры, на которую я ссылаюсь:

from random import randint

def RPS():
    player = input("Rock (r), Paper (p), or Scissors (s)?")
    chosen = randint(1,3)
    if chosen == 1:
        comp = 'r'
    elif chosen == 2:
        comp = 'p'
    else:
        comp = 's'

    print(player , 'vs.' , comp)

    if player == comp:
        print('DRAW!')
    elif player == 'r' and comp == 's':
        print('Player wins!')
    elif player == 'p' and comp == 'r':
        print('Player Wins!')
    elif player == 'r' and comp == 'p':
        print('Computer Wins!')
    elif player == 'p' and comp == 's':
        print('Computer Wins!')
    elif player == 's' and comp == 'p':
        print('Player Wins!')
    elif player == 's' and comp == 'r':
        print('Computer Wins!')
    else:
        print('You either typed a capital version of one of the letters,')
        print('Or an incorrect choice. either way, you gotta try again.')

RPS()

1 Ответ

0 голосов
/ 18 апреля 2019

Ну, во-первых, again не определяется, когда вы тестируете его внизу.

Во-вторых, эта строка:

if input("Play again? (type y or n)") != "y" or "Y":

Не будет делать то, что вы думаете, что он делает. Он не проверяет, равен ли вход «y» или «Y». Скорее, он проверяет, равен ли ввод «y», а если нет, то оценивает «Y», что является правдой. Вы, вероятно, хотите что-то вроде этого:

while True:

    print("What game would you like to play?")
    print("")
    print("(please only type in a number)")
    Ghoice = int(input("We have: \n 1. Rock Paper Scissors \n 2. Hangman \n 3. Guess the number \n 4. Two player Tic Tac Toe"))

    if Ghoice == 1:
        import ROCK_PAPER_SCISSORS
        while True:
            ROCK_PAPER_SCISSORS.RPS
            if input("Play again? (type y or n)") not in ["y", "Y"]:
                break
    # Code for other choices
    if input("Do you want to play another game? (type y or n)") in ["n", "N"]:
        break

Теперь вы полагаетесь на то, что игровой код запускается во время загрузки модуля, но это произойдет только один раз, независимо от того, сколько раз выполняется оператор import. Чтобы это исправить, вам нужно заменить последнюю строку кода игры на

if __name__ == "__main__":
    RPS()

Это гарантирует, что при загрузке модуля ничего не запускается автоматически, но вы сможете запускать игру как отдельную программу, если хотите. Затем вы захотите заменить

...
while True:
    ROCK_PAPER_SCISSORS.RPS
    ...

с

...
while True:
    ROCK_PAPER_SCISSORS.RPS()
    ...

для фактического запуска игрового кода на каждой итерации цикла while.

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