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

Python High/Low猜数字游戏EOFError报错问题求助

问题:ZyBook猜数字作业遇EOFError报错

运行代码时出现如下错误:

Traceback (most recent call last):
File "/home/runner/local/submission/HigherLowerGame.py", line 13, in 
upper = int(input("What is the upper bound? "))
EOFError: EOF when reading a line

作业要求

本次实验需生成随机数,已提供不可修改的初始化代码:

import random
seedVal = int(input("What seed should be used? "))
random.seed(seedVal)

分三次迭代开发:

  • 提示用户输入lower和upper边界,确保lower<upper,生成并打印随机数用于测试;
  • 移除打印随机数的代码,提示用户猜数字,校验输入在边界内,根据猜测结果输出对应提示;
  • 实现循环直到猜对数字。

注意:ZyLab的Develop模式需提前输入所有测试值,否则会报错。

我的代码

import random

seedVal = int(input("What seed should be used? "))
random.seed(seedVal)

# Prompt for lower bound
lower = int(input("What is the lower bound? "))

# Prompt for upper bound with error checking
upper = int(input("What is the upper bound? "))
while upper <= lower:
    print("Upper bound must be greater than lower bound.")
    upper = int(input("What is the upper bound? "))

# Generate random number between lower and upper bounds
target = random.randint(lower, upper)

# Loop until the user guesses the number
while True:
    guess = int(input("What is your guess? "))
    
    # Check if guess is lower, higher, or equal to target
    if guess < target:
        print("Nope, too low.")
    elif guess > target:
        print("Nope, too high.")
    else:
        print("You got it!")
        break

问题排查与解决

报错原因

EOFError是因为ZyLab Develop模式要求提前一次性提供所有需要的输入值,但你的代码存在两处会触发额外输入的逻辑:

  1. 当输入的upper小于等于lower时,会循环要求重新输入upper;
  2. 猜数字的循环会持续要求输入直到猜对,输入次数不固定。
    如果提前提供的输入数量少于代码实际需要读取的次数,就会触发“读取到文件末尾(EOF)”的错误。

解决步骤

  1. 明确所有输入次数:提前规划好代码会触发的所有输入场景,比如:
    • 固定输入:种子值、初始lower、初始upper;
    • 额外输入:如果初始upper不符合要求,需要补充输入正确的upper;
    • 猜数字输入:可先通过测试版本(临时添加print(target))确定目标数,直接输入正确值减少输入次数。
  2. 一次性提供所有输入:在ZyLab Develop模式的输入框中,按代码读取顺序,每行填写一个输入值。
    举个示例(假设种子10,lower=1,初始upper输0(触发错误),正确upper=10,目标数为6):
    10
    1
    0
    10
    6
    
  3. 补充作业要求的遗漏逻辑:作业要求第2点需校验猜数字的输入是否在边界内,你当前代码未实现,可添加如下逻辑:
    while True:
        guess = int(input("What is your guess? "))
        # 新增:校验输入是否在边界内
        if guess < lower or guess > upper:
            print(f"Guess must be between {lower} and {upper}.")
            continue
        # 原有判断逻辑
        if guess < target:
            print("Nope, too low.")
        elif guess > target:
            print("Nope, too high.")
        else:
            print("You got it!")
            break
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:00:20