Python计数游戏代码随机出现EOF Error,求解决方案
解决计数游戏程序的EOF Error问题
你的代码出现EOF Error的根本原因是无限循环没有终止条件,且耐心值归0后仍继续尝试读取输入。当测试用例的输入全部读完后,程序还在执行a = input(),此时没有输入可读取,就会触发EOFError。所谓的“随机出现”其实是因为输入是否耗尽的时机不同导致的。
解决方案
- 当耐心值归0时,打印提示后直接跳出循环,停止后续的输入读取操作。
- 添加对EOFError的捕获,处理输入意外结束的情况,让程序更健壮。
修正后的代码
patience = int(input()) # 处理初始输入可能提前结束的情况 try: a = input() except EOFError: print("输入提前结束") exit() streak = 0 mistake = False one = "one" two = "two" three = "three" four = "four" nextNum = one while True: if a == nextNum: mistake = False streak += 1 # 更新下一个目标数字 if nextNum == one: nextNum = two elif nextNum == two: nextNum = three elif nextNum == three: nextNum = four elif nextNum == four: nextNum = one elif not mistake: mistake = True nextNum = one patience -= 1 # 输出失败提示 print(f"The counting streak was {streak}, but you failed.") streak = 0 if patience == 0: print("Enough for today.") # 耐心值耗尽,终止循环 break # 仅当还有耐心时才读取下一个输入 if patience > 0: try: a = input() except EOFError: print("输入提前结束") break else: break
关键修改说明
- 在初始读取和后续读取输入时,用
try-except捕获EOFError,避免输入意外结束导致程序崩溃。 - 当耐心值归0时,通过
break跳出循环,不再执行后续的input()调用,从根源避免EOFError。 - 读取下一个输入前先检查耐心值,避免无意义的输入读取操作。
- 用f-string简化了打印语句,让代码更简洁易读。
内容的提问来源于stack exchange,提问作者Piolm
相关产品推荐
相关产品推荐

