While循环永远运行

时间:2019-01-10 03:51:23

标签: python python-3.x while-loop

我正在做摇滚,剪纸,剪刀游戏,并且使用了几个功能作为该程序的后端。我的问题是,除了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 :(得分:0)

每个字母都不是r或p,因为r和p都不是字母。因此,您的while循环永远不会结束。

答案 1 :(得分:0)

这里有两点:

首先,lower是一个函数(使用方括号)。 其次,您需要使用“和”而不是“或”。但是,您可以像下面这样重写它。

#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)

答案 2 :(得分:0)

也许如果您首先设置允许响应的set(),就可以得到想要的。

>>> 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 ....")
...

[不能百分百确定此“输入”功能,请使用适合您的任何输入功能。

正如@David指出的那样,如果将.lower()附加到输入函数的末尾,则会简化比较。

答案 3 :(得分:0)

您没有使用正确的 aaa,bbb 函数形式。您的条件也不正确。

  

始终最好的做法是将任何无效或无效通知用户。   输入错误,而是再次询问。

为清楚起见,您可以按以下方式修改代码:

lower()