Python: отменить пользовательский ввод, который устарел - PullRequest
0 голосов
/ 24 сентября 2018

Я создал свою версию игры для всех новичков в игре Python: Battleship.Пользователь должен определить две координаты, X и Y.

Я сделал проверку, которая отклоняет любой ввод, который не является целым числом.Если input является целым числом, код продолжает выполняться.В конце, однако, мне нужно жестко закодировать текущий пользовательский ввод в строку, иначе код не войдет в цикл while и повторно запросит у пользователя другой набор координат, когда начнется следующий ход.

На самом деле это работает просто отлично, но я чувствую, что это не самый чистый способ справиться с этим.

Кто-нибудь может предложить лучший способ сделать это?

# ships are positioned, user must sink them

for turn in range(num_of_turns):
    print("Turn", turn + 1)
    while type(guess_col) is not int:
        try:
            guess_col = input("Enter coordinate X: ")
            guess_col = int(guess_col)
        except ValueError:
            print("Enter coordinate X again")
            continue
    while type(guess_row) is not int:
        try:
            guess_row = input("Enter coordinate Y: ")
            guess_row = int(guess_row)
        except ValueError:
            print("Enter coordinate Y again")
            continue

        # do stuff (sink ships, miss ships, etc...)

    guess_col = str(guess_col)
    guess_row = str(guess_row)

1 Ответ

0 голосов
/ 24 сентября 2018

Одним из решений является установка guess_col на что-то, что не является int непосредственно перед циклом while:

guess_col = ''
while ...:

Я предлагаю вам узнать о функциях.Это очень важный инструмент, который помогает вам организовать код в небольшие, последовательные, многократно используемые фрагменты.Например, вы можете написать функцию get_int(), которая выполняет проверку и возвращает значение, когда пользователь вводит число.Затем вы можете повторно использовать эту функцию, чтобы получить ввод, не повторяя код, как в текущем решении.Вы можете сделать что-то вроде

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