Python报错expected an indented block:while循环缩进问题求助
解决「expected an indented block」错误并修复你的石头剪刀布游戏
你的错误根源是Python的缩进规则——Python靠缩进划分代码块,而你的while循环体里的所有语句都没做缩进,包括最后那个break,Python找不到属于循环的代码块,就抛出了这个语法错误。除此之外,代码还有几个逻辑和写法上的问题,我一起帮你修正:
主要问题分析
- 缩进缺失:
while循环、if分支的代码块都没有正确缩进,这是触发报错的直接原因。 - 错误的输赢判断逻辑:
if "you lose":这个判断永远为True(非空字符串在Python里属于真值),完全起不到统计输赢的作用。 - 不当的导入位置:
import random放在循环里会重复导入模块,这是不符合Python编码规范的,应该放在脚本最开头。 - 循环条件错误:你用了
input!="exit",但input是Python内置函数,应该用存储用户输入的变量来判断退出条件。
修正后的完整代码
import random options = ["rock", "paper", "scissors"] your_wins = 0 my_wins = 0 while True: turn = input("Please choose rock,paper or scissors (type 'exit' to quit):") # 处理退出逻辑 if turn.lower() == "exit": break print(f"You chose: {turn}") my_choice = random.choice(options) print(f"I chose: {my_choice}") # 判断胜负并更新分数 if my_choice == turn: print("It's a tie!") elif (my_choice == "rock" and turn == "scissors") or \ (my_choice == "paper" and turn == "rock") or \ (my_choice == "scissors" and turn == "paper"): print("You lose!") my_wins += 1 else: print("You win!") your_wins += 1 # 游戏结束后显示最终比分 print(f"\nGame over! Your wins: {your_wins}, My wins: {my_wins}")
关键修正点说明
- 缩进规范:把
while循环内的所有语句都缩进了4个空格(Python的标准缩进),break现在属于循环的代码块,不会再触发缩进错误。 - 简化胜负判断:用
if-elif-else替代了大量重复的if语句,逻辑更清晰,也避免了冗余判断。 - 正确的退出逻辑:先判断用户输入是否为
exit,是的话直接break跳出循环,不用再依赖原代码里的错误条件。 - 分数统计修正:把分数更新直接放在对应的胜负分支里,确保每次结果都能正确统计。
- 格式化字符串:用
f-string替代了字符串拼接,代码更易读、更简洁。
内容的提问来源于stack exchange,提问作者Shahar Yhezkel
相关产品推荐
相关产品推荐

