Python 3中int(input())的EOF错误解决及HackerRank图案代码疑问
问题1:解决Python 3中
int(input())触发的EOF错误 EOFError本质是当input()函数尝试从标准输入读取内容时,输入流已经结束(没有更多数据可读)。这种情况在HackerRank这类在线平台上常见的原因要么是你的代码读取输入的次数比题目提供的输入多,要么是本地测试时不小心触发了输入结束(比如Unix下按Ctrl+D,Windows下按Ctrl+Z)。
这里有几种可靠的解决方法:
捕获异常优雅处理:
用try-except块包裹input()调用,当触发EOFError时设置默认值或做其他处理,避免程序直接崩溃:try: num = int(input()) except EOFError: num = 0 # 根据题目需求调整默认值,或者直接输出题目要求的默认结果一次性读取全部输入:
通过sys.stdin.read()一次性读取所有输入,再拆分处理,这样能避免多次调用input()导致的问题:import sys # 读取所有输入并按空格拆分(如果输入是多个值) input_content = sys.stdin.read().split() if input_content: num = int(input_content[0]) else: num = 0 # 处理空输入的情况核对输入次数:
仔细检查题目要求的输入数量,确保代码中input()的调用次数和题目要求完全匹配。比如题目只要求输入一个整数,就不要在代码里多次调用input()。
问题2:HackerRank图案生成代码排查与修正
先看你的代码逻辑,核心思路是对的——分上下两部分循环生成图案,通过切片获取左右两侧的字母并拼接。但有两个关键问题导致输出不符合预期:
- 字符串填充方式错误:你用
rjust和ljust分别处理左右部分,导致每行总长度不一致,正确的做法应该是把拼接好的整行字符串居中,用'-'填充到统一的总长度。 - 部分代码未完成:第二个循环里的
textn切片没写完,需要补全。
修正后的完整代码:
size = int(input()) letters = 'abcdefghijklmnopqrstuvwxyz' # 计算每行的总长度:4*size -3,比如size=3时总长度是9 total_length = 4 * size - 3 def build_line(i): # 生成左侧字母部分:从最大字母往回取i个 left_part = '-'.join(letters[size-1 : size-1 -i : -1]) # 生成右侧字母部分:从中间字母的下一个到最大字母 right_part = '-'.join(letters[size - i : size]) middle_char = letters[size-1 -i] if i == 0: # 第一行只有中间字母 return middle_char # 拼接左右-中间-左右的结构 return f"{left_part}-{middle_char}-{right_part}" # 生成上半部分(包括中间行) for i in range(size): print(build_line(i).center(total_length, '-')) # 生成下半部分(从中间行的上一行倒序到第一行) for i in range(size-2, -1, -1): print(build_line(i).center(total_length, '-'))
代码说明:
- 总长度计算:
4*size -3是根据图案的规律得出的——中间行的长度是2*size-1个字母加上2*size-2个分隔符,总和就是4*size-3。 - 复用逻辑:把生成单条线的逻辑封装成函数
build_line,避免重复代码,也更容易维护。 - 居中填充:用
str.center()方法把每行内容居中,自动用'-'填充到总长度,保证所有行对齐。
测试size=3时,输出会是:
----c---- --c-b-c-- c-b-a-b-c --c-b-c-- ----c----
完全符合HackerRank这类题目对字母图案的要求。
内容的提问来源于stack exchange,提问作者user9375283
相关产品推荐
相关产品推荐

