CodeChef HS08TEST(ATM) Python提交报NZEC运行时错误 本地运行正常
HS08TEST 提交报NZEC/EOFError的成因与解决方案
核心报错成因
你碰到的NZEC(非零退出码)错误伴随EOFError: EOF when reading a line报错,本质是判题环境执行代码时,没有从输入流中读到预期的单行内容,和本地测试环境的输入交互逻辑存在本质差异,具体触发点包括:
- 输入读取逻辑容错性为0:本地测试时你手动敲入的测试输入永远是完整的单行内容,但CodeChef判题环境的输入流存在两个常见场景会直接触发读取出错:
- 批量测试时部分用例的输入存在末尾截断、空行残留,直接调用
input()读取第一行时就会因为到达输入流末尾抛出EOF错误 - 部分极端测试用例的输入分隔符不是单空格时,单行拆包
withdraw, balance = input().split()如果拆分后拿到的元素不是2个,也会直接抛值错误,被平台捕获为非零退出码
- 批量测试时部分用例的输入存在末尾截断、空行残留,直接调用
- 输出格式不符合题目要求:哪怕解决了读取出错的问题,原有代码也无法通过校验:走保留原余额的分支时直接输出原始输入字符串,走计算分支时Python默认输出的浮点数不会自动补全两位小数,不符合题目要求的固定两位小数输出格式。
可通过的修正方案
- 替换硬读取单行的逻辑,改成一次性读取全部标准输入内容再拆分,彻底规避EOF读取错误:通过
sys.stdin.read()一次性拉取所有输入流内容,提前过滤空字符后再做拆分,不管输入流是单行还是被拆成多行、有没有末尾空行,都不会触发读取出错。 - 严格对齐题目规则做判断:只有当取款金额是5的整数倍、且取款金额+0.5元手续费不超过当前账户余额时,才执行扣款操作,否则余额保持不变。
- 强制统一输出格式:最终计算得到的余额必须格式化为保留两位小数的字符串输出,避免浮点数默认输出格式不符合题目要求。
修正后的可通过代码示例
import sys # 读取全部输入内容拆分 input_content = sys.stdin.read().strip().split() withdraw = int(input_content[0]) balance = float(input_content[1]) fee = 0.5 # 按题目规则计算剩余余额 if withdraw % 5 == 0 and withdraw + fee <= balance: remaining = balance - withdraw - fee else: remaining = balance # 固定两位小数输出 print(f"{remaining:.2f}")
内容的提问来源于stack exchange,提问作者Tanmay Daga
相关产品推荐
相关产品推荐

