Пока цикл работает вечно - PullRequest
0 голосов
/ 10 января 2019

Я работаю над игрой «Камень, бумага, ножницы» и в качестве бэк-энда для этой программы использовал несколько функций. Моя проблема в том, что я не хочу никаких других входов, кроме R, P, S, Q, r, s, p, q. Поэтому я установил цикл while, чтобы, если ввод не совпадал с этими буквами, цикл продолжит выполняться. Тем не менее, даже если я выполнил его условия, цикл все равно продолжит работать.

#Main Program
print('Welcome to Rock, Paper, and Scissors. You know the rules already. But, we will play for as long as you want. If you win more rounds, then you survive. If I win though, well... you already know.')
w = input('Choose a weapon(r for rock, p for paper, s for scissors, q for quit)!: ').lower
while w != 'r' or w != 'p' or w != 's' or w != 'q':
    w = input('Choose a weapon(r for rock, p for paper, s for scissors, q for quit)!: ').lower
else:
    if w == 'q':
        record(1)
         sys.exit
    else:
        if game(w):
            memory(w, fingers)
            respond(numrock, numpaper, numscissors)
            hand1(fingers)

Ответы [ 4 ]

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

Вы не использовали правильную форму функции lower(). Ваши условия также были не правильными.

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

Вы можете изменить свой код следующим образом для ясности:

print('Welcome to Rock, Paper, and Scissors. You know the rules already. But, we will play for as long as you want. If you win more rounds, then you survive. If I win though, well... you already know.')
while True:
    w = input('Choose a weapon(r for rock, p for paper, s for scissors, q for quit)!: ').lower()
    print("W: ", w)
    if w == 'q':
        break
    elif w == 'r' or w == 'p' or w == 's':
        if game(w):
            memory(w, fingers)
            respond(numrock, numpaper, numscissors)
            hand1(fingers)
    else:
        print("Incorrect Option! Please try again.")
        continue
0 голосов
/ 10 января 2019

Здесь есть два момента:

Во-первых, нижняя - это функция (используйте скобки). Во-вторых, вам нужно использовать «и» вместо «или». Тем не менее, вы можете переписать его, как показано ниже.

#Main Program
print('Welcome to Rock, Paper, and Scissors. You know the rules already. 
 But, we will play for as long as you want. If you win more rounds, then you 
 survive. If I win though, well... you already know.')
w = input('Choose a weapon(r for rock, p for paper, s for scissors, q for 
 quit)!: ').lower()
while w not in 'rpsq' or len(w) > 1:
  w = input('Choose a weapon(r for rock, p for paper, s for scissors, q for 
 quit)!: ').lower()
else:
  if w == 'q':
    record(1)
    sys.exit
else:
  if game(w):
    memory(w, fingers)
    respond(numrock, numpaper, numscissors)
    hand1(fingers)
0 голосов
/ 10 января 2019

Возможно, если вы сначала настроите набор () допустимых ответов, вы сможете получить то, что хотите.

>>> aok = set()
>>> for l in "R" "P" "S" "Q":
...     aok.add(l)
...     aok.add(l.lower())
... 
>>> aok
set(['q', 'p', 'S', 'Q', 'P', 's', 'r', 'R'])

Тогда

>>> while w not in aok:
...    print("Invalid entry. Please re-try"
...    w = input("Please enter ....")
...

[Не уверен на 100% в этой «входной» функции, используйте любую входную функцию, которая вам подходит].

Как указал @David, если вы добавите .lower() в конец функции ввода, это упростит ваши сравнения.

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

Каждая буква не является г или не р, так как ни одна буква не г и р. Таким образом, ваши while петли никогда не могут закончиться.

...