Python Adventure Game -> Выберите A или B во время цикла не работает! - PullRequest
1 голос
/ 10 марта 2011

Я пытаюсь создать простую приключенческую игру на Python.Я дошел до того, что мне нужно спросить пользователя, хотят ли они выбрать вариант A или B, и использую цикл while, чтобы попытаться сделать это:

AB = input("A or B?")

while AB != "A" or "a" or "B" or "b":
    input("Choose either A or B")

if AB == "A" or "a":
    print("A")
elif AB == "B" or "b":
    print("B")

Дело в том, что не важното, что вы вводите, возникает вопрос «Выберите либо A, либо B».Что я делаю не так?

Ответы [ 6 ]

5 голосов
/ 10 марта 2011

Ваш оператор while оценивает условия or, что всегда верно для предоставленных вами строк.

while AB != "A" or "a" or "B" or "b":

означает:

while (AB != "A") or "a" or "B" or "b":

Непустые строки всегда имеют значение True, поэтому запись or "B" всегда будет истинной и всегда будет запрашивать ввод. Лучше написать:

while AB.lower() not in ('a','b'):
3 голосов
/ 10 марта 2011

AB != "A" or "a" or "B" or "b" должно быть AB.upper() not in ('A','B')

2 голосов
/ 10 марта 2011
AB != "A" or "a" or "B" or "b"

интерпретируется как

(AB != "A") or ("a") or ("B") or ("b")

и поскольку "a" всегда равно true, результатом этой проверки всегда будет true.

1 голос
/ 10 марта 2011

Вместо этого используйте функцию raw_input(), например:

ab = raw_input('Choose either A or B > ')
while ab.lower() not in ('a', 'b'):
    ab = raw_input('Choose either A or B > ')

input() ожидает выражение Python в качестве ввода;согласно документации Python, это эквивалентно eval(raw_input(prompt)).Просто используйте raw_input() вместе с другими предложениями, размещенными здесь.

1 голос
/ 10 марта 2011

Было бы лучше использовать:

AB = raw_input("A or B?").upper()

, а затем конструкцию not in, как предлагали другие.

0 голосов
/ 10 марта 2011
try:
    inp = raw_input    # Python 2.x
except NameError:
    inp = input        # Python 3.x

def chooseOneOf(msg, options, prompt=': '):
    if prompt:
        msg += prompt
    options = set([str(opt).lower() for opt in options])
    while True:
        i = inp(msg).strip().lower()
        if i in options:
            return i

ab = chooseOneOf('Choose either A or B', "ab")

lr = chooseOneOf('Left or right', ('left','right'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...