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

Python石头剪刀布代码遇EOFError问题求助

问题分析与解决

问题描述

我是13岁编程初学者,跟着code-bullet的视频入门。写了一个石头剪刀布的Python代码,本地Python Shell能正常运行,但在线代码测试器一直报EOFError,提示问题在if语句第3行。尝试参考别人的方案修复,反而出现其他错误,删了相关代码后还是搞不懂if语句的问题。

原代码:

import random

foe = random.randint(1, 3)
you = int(input("pick 1-3"))
print(you)
if you == foe:
    print("it's a tie")
elif you > foe:
    try:
        print("checking for special conditions")
    except:
        if you == 3 and foe == 1:
            print("you lose")
    else:
        print("you win")
    finally:
        print("complete")
else:
    try:
        print("checking for special conditions")
    except:
        if you == 1 and foe == 3:
            print("you win")
    else:
        print("you lose")
    finally:
        print("complete")

问题1:EOFError报错原因

在线代码测试器如果没有预先提供输入内容,input()函数会因为读取不到输入而抛出EOFError(文件结束错误)。本地Shell会等待你手动输入,所以没问题,但在线测试器需要你提前指定输入值,或者代码里加输入异常处理。

解决办法:

  • 在线测试时,找到测试器的输入配置区域,手动输入1-3的数字再运行;
  • 或者给代码加输入异常捕获,比如:
try:
    you = int(input("pick 1-3: "))
except (EOFError, ValueError):
    # 读取不到输入或输入不是数字时,随机选一个值
    you = random.randint(1, 3)
    print(f"自动选择:{you}")

问题2:if语句的逻辑错误

你代码里的try-except完全没用——print("checking for special conditions")不会抛出任何异常,所以except块永远不会执行。这就导致:

  • 当你选3、对手选1时(本来应该输),代码会执行elif you>foe里的else分支,输出"you win",逻辑完全反了;
  • 当你选1、对手选3时(本来应该赢),代码会执行else里的else分支,输出"you lose",也是错的。

修正后的代码

去掉多余的try-except,直接用逻辑判断处理特殊情况:

import random

# 规则:1赢2,2赢3,3赢1(可根据你的设定调整)
foe = random.randint(1, 3)
try:
    you = int(input("pick 1-3: "))
except (EOFError, ValueError):
    you = random.randint(1, 3)
    print(f"输入无效,自动选择:{you}")

print(f"你选了:{you},对手选了:{foe}")

if you == foe:
    print("it's a tie")
elif (you == 3 and foe == 1) or (you < foe and not (you ==1 and foe ==3)):
    print("you lose")
else:
    print("you win")
print("complete")

逻辑说明

  1. 先判断平局;
  2. 判断输的情况:要么是3 vs 1,要么是普通的你选的数字比对手小(排除1 vs3的特殊赢局);
  3. 剩下的情况都是赢。

这样逻辑清晰,也解决了在线测试的EOF问题。


内容的提问来源于stack exchange,提问作者ayconn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:42:21