CS50p PSet4 Adieu程序遇EOF退出码异常求助
问题解决:CS50p Adieu练习check50 EOF退出码错误
问题根源
- 依赖库缺失导致启动异常:代码中保留了本地测试用的
from icecream import ic,但check50运行环境未安装icecream库,程序启动时直接抛出ImportError,异常退出后返回码为1。 - 输出逻辑错误:
print(txt)被嵌套在for循环内部,每拼接一个名字就打印一次,不符合题目要求的单次输出格式。
修正后的代码
def main(): names = [] txt = "Adieu, adieu, to" while True: try: names.append(input()) except EOFError: if len(names) == 1: txt += f" {names[0]}" elif len(names) == 2: txt += f" {names[0]} and {names[1]}" elif len(names) > 2: txt += " " + ", ".join(names[:-1]) + ", and " + names[-1] if names: print(txt) break main()
修正说明
- 移除了仅用于本地测试的
icecream和sys导入语句,消除启动时的导入错误。 - 重构名字拼接逻辑,针对不同数量的名字生成符合要求的格式:
- 1个名字:直接拼接
- 2个名字:用
and连接 - 3个及以上:前面名字用逗号分隔,最后一个用
, and连接
- 仅当存在输入名字时才打印结果,避免无输入时输出无效文本。
- 程序遇到EOF时会正常处理并退出,返回码为0,符合check50的要求。
内容的提问来源于stack exchange,提问作者PquePC
相关产品推荐
相关产品推荐

