You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:09:58