Можете ли вы создать вход, который изменяется? - PullRequest
0 голосов
/ 12 апреля 2020

Я создаю программу, подобную викторине, и решил определить функцию 'while True' l oop (показанную ниже) как функцию. Чтобы сделать это, мне нужно изменить вход. Тем не менее, я не могу этого сделать, независимо от того, сколько раз я переформатировал вопрос. Вот код:

def whiletrueloop():
    while True:
        choicenumber=input(choice)
        if choicenumber.lower() not in (options):
            print(repeatsentence)
        else:
            break

choice=("What is bigger, an elephant or a mouse?")
choicenumber=("choice1")
options=('elephant','mouse')
repeatsentence=("That isn't an answer!")
whiletrueloop()


if choicenumber=="elephant":
    print("Correct!")
elif choicenumber=="mouse":
    print("Wrong!")

1 Ответ

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

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

choicenumber = ("choice1")

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

elif choicenumber == "choice1":
    print("Global!")

Вы всегда получите «Global!» отображается, потому что локальное значение из функции игнорируется вместо глобального значения.

Есть несколько способов обойти это. Один из них - объявить переменную choicenumber как глобальную внутри функции:

while True:
    global choicenumber
    choicenumber=input(choice)

Однако использование глобальных переменных считается плохой практикой по причинам, которые вы можете посмотреть.

Альтернативой является используйте функцию для возврата значения choicenumber в ответ на вызов функции:

def whiletrueloop():
    while True:
        choicenumber=input(choice)
        if choicenumber.lower() not in (options):
            print(repeatsentence)
        else:
            return choicenumber

choice=("What is bigger, an elephant or a mouse?")
options=('elephant','mouse')
repeatsentence=("That isn't an answer!")

choicenumber = whiletrueloop()

if choicenumber=="elephant":
    print("Correct!")
elif choicenumber=="mouse":
    print("Wrong!")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...