Python循环问题求助:猜拳程序无法退出while循环
问题分析与解决
嘿,这问题其实挺典型的,刚学循环逻辑的时候很容易踩这个坑!
核心问题:循环条件的逻辑错误
你的第一个while循环用了or连接三个判断条件,这会导致无论输入什么,循环永远无法退出。为什么?咱们拆解来看:
假设用户输入了'r',那么:
p1_choice != 'r'→ 假p1_choice != 's'→ 真p1_choice != 'p'→ 真
因为or逻辑只要有一个条件为真,整个表达式就为真,所以循环会一直执行。同理,输入's'或'p'时,另外两个条件也会是真,循环根本停不下来。
另外,第二个循环还有个笔误:你把判断p2_choice的条件里写成了p1_choice,这会导致即使玩家2输入正确,只要玩家1的选择不符合s或p,循环还会继续要求玩家2输入,这明显不对。
修正后的代码方案
推荐两种更清晰的写法:
写法1:用and修正逻辑
把or换成and,表示“当输入既不是r,也不是s,也不是p的时候,继续循环”:
# 初始化变量(避免未定义报错) p1_choice = '' p2_choice = '' while p1_choice != 'r' and p1_choice != 's' and p1_choice != 'p': p1_choice = input('Player one please make your choice. Rock(r), Scissors(s), Paper(p): ') # 注意这里把所有p1_choice都改成p2_choice while p2_choice != 'r' and p2_choice != 's' and p2_choice != 'p': p2_choice = input('Player two please make your choice. Rock(r), Scissors(s), Paper(p): ') print() if p1_choice == 'r' and p2_choice == 'p': print('Player two wins') elif p1_choice == 'r' and p2_choice == 's': print('Player one wins') elif p1_choice == 's' and p2_choice == 'r': print('Player two wins') elif p1_choice == 's' and p2_choice == 'p': print('Player one wins') elif p1_choice == 'p' and p2_choice == 'r': print('Player one wins') elif p1_choice == 'p' and p2_choice == 's': print('Player two wins') else: print('The game is a tie')
写法2:用not in简化条件(更Pythonic)
直接检查输入是否不在允许的列表里,代码更简洁易懂:
valid_choices = ['r', 's', 'p'] p1_choice = '' p2_choice = '' while p1_choice not in valid_choices: p1_choice = input('Player one please make your choice. Rock(r), Scissors(s), Paper(p): ') while p2_choice not in valid_choices: p2_choice = input('Player two please make your choice. Rock(r), Scissors(s), Paper(p): ') # 后续判断逻辑不变...
这样修改后,循环就能正常退出啦,而且代码可读性也更高~
内容的提问来源于stack exchange,提问作者Michael Christensen
相关产品推荐
相关产品推荐

