我正在用python从一本教程中制作一个石头剪刀布游戏。我想我是严格按照书上的要求来做的,但是由于某种原因,这个break语句不起作用。
while True: # Main game loop
print('%s Wins, %s Losses, %s Ties' %(wins,losses,ties))
while True: # Player input loop
print('Enter your move: (r)ock (p)aper (s)cissors or (q)uit')
playerMove = input()
if playerMove== 'q':
sys.exit() # Quit the program
if playerMove == 'r' or playerMove =='p' or playerMove =='s':
print('at least this is working')
break # Break out of player input loop
print('but this is not')
# Display player move
if playerMove == 'r':
print('ROCK versus...')
elif playerMove == 'p':
代码继续,但这是与这个问题相关的所有内容。当我运行它时,它显示如下
ROCK,PAPER,SCISSORS
0 Wins, 0 Losses, 0 Ties
Enter your move: (r)ock (p)aper (s)cissors or (q)uit
r
at least this is working
0 Wins, 0 Losses, 0 Ties
Enter your move: (r)ock (p)aper (s)cissors or (q)uit
退出选项的'q'工作得很好,所以它显然得到了输入。除此之外,它一直在重复这个循环。正如你所看到的,我在那里放了一些文本,只是为了试验和显示事情发生故障的地方。
我在这里做错了什么?
break
语句将带您离开最内层循环,而不是"主"循环;外循环。最好把内循环改成这样:
input_loop = True
while input_loop: # Player input loop
print('Enter your move: (r)ock (p)aper (s)cissors or (q)uit')
playerMove = input()
if playerMove== 'q':
sys.exit() # Quit the program
if playerMove == 'r' or playerMove =='p' or playerMove =='s':
print('at least this is working')
input_loop = False # Break out of player input loop
print('but this is not')
您有两个嵌套循环。如果你打破了第一个循环,你立即重新进入它,因为你没有跳出第二个循环。我将把第一个循环改为,而不是说while True
,说while playing
,并在游戏结束时将play设置为False。
正如其他人已经告诉您的那样,您嵌套了两个循环。break
语句只能使您脱离内循环,但是您想跳出外循环。这里有很多关于如何解决这个问题的答案。
我现在已经解决了这个问题,
最初的原因
print('but this is not')
没有打印is,因为我已经打破了while循环。
下面的代码没有从# Display player move
部分开始运行的原因是缩进。它和程序的其余部分与# Player input loop
处于相同的缩进级别,因此在循环中断后被忽略。
我将剩下的代码移动到一个缩进级别,现在程序工作正常