Выполнение одной строки кода внутри цикла while только один раз - PullRequest
0 голосов
/ 27 января 2019

Как сделать так, чтобы определенная строка кода выполнялась только один раз в цикле while?

Я хочу строку: "Hello %s, please enter your guess: " %p1" запускаться только один раз, а не каждый раз, когда игрок угадает.

Есть ли команда или функция, которую я могу использовать, или я должен структурировать всю игру по-другому? Есть ли в этой форме простое исправление программы?

import random

number = random.randint(1,9)

p1 = input("Please enter your name: ")

count = 0

guess = 0

while guess != number and guess != "exit":

    guess = input("Hello %s, please enter your guess: " % p1)

    if guess == "exit":
        break

    guess = int(guess)
    count += 1

    if guess == number:
        print("Correct! It Took you only", count, "tries. :)")
        break
    elif guess > number:
        print("Too high. Try again.")
    elif guess < number:
        print("Too low. Try again.")

Ответы [ 4 ]

0 голосов
/ 27 января 2019

Вы должны запросить имя пользователя вне цикла и запросить ввод в начале цикла.

Внутри цикла вы создаете вывод в конце и запрашиваете ввод на следующей итерации.То же самое будет работать для первой итерации: создать вывод (вне цикла), а затем запросить ввод (сначала внутри цикла)

0 голосов
/ 27 января 2019

Вы должны запрашивать новый guess на каждой итерации - в противном случае код будет зацикливаться либо бесконечно (после первого неверного предположения), либо сразу же завершаться.

Чтобы изменитьсообщение, которое вы можете использовать в своем принте в виде троицы (aka: inline if), чтобы сделать его условным:

# [start identical]

while guess != number and guess != "exit": 
    guess = input("Hello {}, please enter your guess: ".format(p1) if count == 0 
                  else "Try again: ")

# [rest identical]

См. Имеет ли Python троичный условный оператор?

троичный проверяет инкрементную переменную count и печатает одно сообщение, если оно 0, и при последовательном запуске запускает другой текст (поскольку count больше не 0).

Возможно, вы захотите переключиться на более современные формы форматирования строк: str.format - также работает для 2.7

0 голосов
/ 27 января 2019

Способ выполнить инструкцию только x раз в цикле while может заключаться в реализации счетчика и добавлении условия if, которое проверяет, является ли счетчик

0 голосов
/ 27 января 2019

Вы можете создать переменную-флаг, например,

print_username = True

перед циклом while.Внутри цикла снимите флажок после первой итерации цикла:

if print_username:
    guess = input("Hello %s, please enter your guess: " % p1)
    print_username = False
else:
    guess = input("Try a new guess:")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...