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

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默认输出的浮点数不会自动补全两位小数,不符合题目要求的固定两位小数输出格式。

可通过的修正方案

  1. 替换硬读取单行的逻辑,改成一次性读取全部标准输入内容再拆分,彻底规避EOF读取错误:通过sys.stdin.read()一次性拉取所有输入流内容,提前过滤空字符后再做拆分,不管输入流是单行还是被拆成多行、有没有末尾空行,都不会触发读取出错。
  2. 严格对齐题目规则做判断:只有当取款金额是5的整数倍、且取款金额+0.5元手续费不超过当前账户余额时,才执行扣款操作,否则余额保持不变。
  3. 强制统一输出格式:最终计算得到的余额必须格式化为保留两位小数的字符串输出,避免浮点数默认输出格式不符合题目要求。

修正后的可通过代码示例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 15:24:04