VSCode编写Python石头剪刀布游戏时部分代码不可达如何解决
代码不可达的原因
VSCode标记不可达的核心原因是这些代码不存在任何可被执行的路径:
return语句会立刻终止当前函数的运行,只要执行到return 'tie',同缩进级别下紧跟在它后面的内嵌函数定义永远不会运行,因此被置灰。- 你写的第二个
is_win函数定义、print(play())调用要么缩进在其他函数的return语句之后,要么缩进在if分支的return语句之后,程序运行时永远走不到这些位置。 - 你还重复定义了
is_win函数,第一个嵌套在play函数里的定义本身就永远不会被触发,属于无效代码。
修复方法
- 把判断胜负的
is_win函数挪到全局作用域,不要嵌套在其他函数、其他分支的return语句后面,补全判断失败的返回逻辑。 - 调整
play函数内的判断顺序:先判断平局,再判断用户获胜的情况,两个分支都不满足才返回失败结果,不要在return语句后写同层级的其他代码。 - 把启动游戏的
print(play())语句挪到全局最外层,不要缩进在任何函数或分支块内部。
修正后可正常运行的代码
import random def is_win(player, opponent): if (player == 'r' and opponent == 's') or (player == 's' and opponent == 'p') \ or (player == 'p' and opponent == 'r'): return True return False def play(): user = input("What is your choice 'r' for rock, 'p' for paper, 's' for scissors\n") computer = random.choice(['r','p','s']) if user == computer: return 'tie' if is_win(user, computer): return 'You won' return 'You lost' print(play())
内容的提问来源于stack exchange,提问作者Rick Dzurek
相关产品推荐
相关产品推荐

