Hackerrank Day6问题求助:Python标准输入输出及格式异常
Hackerrank Day6 字符串拆分输出问题解决
问题详情
自学Python,在解决Hackerrank Day6的字符串奇偶索引拆分输出问题时遇到以下问题:
- 代码在本地Jupyter Notebook能得到正确输出,但提交到Hackerrank无法正常运行
- 输出格式不符合要求:当前输出没有空格(比如应该是
hcekr rnak,实际输出成hcekrrnak) - 尝试过调整
if __name__ == '__main__'的位置、把print(numbers)改成返回函数,都没效果
原代码如下:
import sys import os import random import re import math def numbers(): S=x.split()[0] for idx, ele in enumerate(S): if idx % 2 == 0: print(ele,end='') for idx, ele in enumerate(S): if idx %2 != 0: print(ele,end='') N=x.split()[1] for idx, ele in enumerate(N): if idx % 2 == 0: print(ele,end='') for idx, ele in enumerate(N): if idx %2 != 0: print(ele,end='') if __name__ == '__main__': x=str(input().strip()) print(numbers)
问题症结
- 函数调用错误:
print(numbers)是打印函数本身的对象,不是调用函数,正确写法是numbers() - 输出格式不达标:每个字符串的奇偶索引结果之间需要加空格,不同字符串的结果要换行
- 输入逻辑不符合题目要求:Hackerrank原题要求先输入测试用例数,再逐个输入字符串,你的代码假设输入是一行两个字符串,这是提交失败的核心原因
- 依赖全局变量:函数
numbers()用了外部的x,在Hackerrank环境下可能引发兼容性问题
修正方案
方案1:微调原代码(保留你原有的输入逻辑)
只调整输出和函数调用,不改变核心循环逻辑:
import sys import os import random import re import math def numbers(): S=x.split()[0] # 收集偶数索引字符 even_part = '' for idx, ele in enumerate(S): if idx % 2 == 0: even_part += ele # 收集奇数索引字符 odd_part = '' for idx, ele in enumerate(S): if idx %2 != 0: odd_part += ele # 打印带空格的结果 print(f"{even_part} {odd_part}") N=x.split()[1] even_part_n = '' for idx, ele in enumerate(N): if idx % 2 == 0: even_part_n += ele odd_part_n = '' for idx, ele in enumerate(N): if idx %2 != 0: odd_part_n += ele print(f"{even_part_n} {odd_part_n}") if __name__ == '__main__': x=str(input().strip()) # 正确调用函数 numbers()
方案2:完全符合Hackerrank题目要求的版本
这个版本严格匹配题目输入输出规则,提交肯定能过:
def process_string(s): even_chars = [] odd_chars = [] for idx, char in enumerate(s): if idx % 2 == 0: even_chars.append(char) else: odd_chars.append(char) # 拼接成要求的格式并打印 print(''.join(even_chars) + ' ' + ''.join(odd_chars)) if __name__ == '__main__': # 先输入测试用例数量 test_cases = int(input()) for _ in range(test_cases): # 逐个处理每个字符串 current_str = input().strip() process_string(current_str)
修正要点说明
- 把
print(numbers)改成numbers(),确保函数被调用执行 - 用字符串拼接替代多次
print(ele, end=''),方便添加空格分隔奇偶结果 - 方案2严格遵循Hackerrank的输入规则:先读测试用例数,再处理每个字符串,这是解决提交失败的关键
- 移除全局变量依赖,改用函数参数传递数据,代码更健壮
内容的提问来源于stack exchange,提问作者Marla Gansukh
相关产品推荐
相关产品推荐

