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

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)

问题症结

  1. 函数调用错误:print(numbers)是打印函数本身的对象,不是调用函数,正确写法是numbers()
  2. 输出格式不达标:每个字符串的奇偶索引结果之间需要加空格,不同字符串的结果要换行
  3. 输入逻辑不符合题目要求:Hackerrank原题要求先输入测试用例数,再逐个输入字符串,你的代码假设输入是一行两个字符串,这是提交失败的核心原因
  4. 依赖全局变量:函数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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:35:24