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模式要求提前一次性提供所有需要的输入值,但你的代码存在两处会触发额外输入的逻辑:
- 当输入的upper小于等于lower时,会循环要求重新输入upper;
- 猜数字的循环会持续要求输入直到猜对,输入次数不固定。
如果提前提供的输入数量少于代码实际需要读取的次数,就会触发“读取到文件末尾(EOF)”的错误。
解决步骤
- 明确所有输入次数:提前规划好代码会触发的所有输入场景,比如:
- 固定输入:种子值、初始lower、初始upper;
- 额外输入:如果初始upper不符合要求,需要补充输入正确的upper;
- 猜数字输入:可先通过测试版本(临时添加
print(target))确定目标数,直接输入正确值减少输入次数。
- 一次性提供所有输入:在ZyLab Develop模式的输入框中,按代码读取顺序,每行填写一个输入值。
举个示例(假设种子10,lower=1,初始upper输0(触发错误),正确upper=10,目标数为6):10 1 0 10 6 - 补充作业要求的遗漏逻辑:作业要求第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
相关产品推荐
相关产品推荐

