当试图从codewars分配操作字符串时,是否接收退出代码(1)?我怎样才能做得不同,避免索引错误?

2024-04-25 15:17:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我整天都在做这个代码战任务,但是我一直没有通过代码战测试。遇到索引错误和退出代码(1),即使我通过了每一次测试和尝试,退出代码看起来是如此的虚幻而混乱。我理解如果我的程序没有完成它应该做的,但是它通过了测试,现在有一些错误我不太理解,以我甚至无法理解的方式把我的程序弄乱了。因为他们完全按照任务的要求返回字符串,所以为什么。。。它不起作用吗?我做错了什么?请帮助我,全能的代码向导,我是一个noob

处理拆分字符串:完成解决方案,以便将字符串拆分为两个字符对。如果字符串包含奇数个字符,则应将最后一对中缺少的第二个字符替换为下划线(“”)

这是我的密码:

def solution(string):
    join_string = "-".join(string[i:i+2] for i in range(0, len(string), 2))
    x_string = join_string.split("-")
    underscore = "_"
    index = (len(string) - len(x_string))
    if index % 2 == 0:
      for i in range(0, index):
        return x_string
        break
      else:
        x_string[index] = x_string[index] + underscore
        return x_string 
    elif index > 2:
        x_string[index] = x_string[index] + underscore
        return x_string
    elif index < 1:
        x_string = []
        return x_string 

错误出现在

x_string[index] = x_string[index] + underscore
IndexError: list index out of range

Tags: 字符串代码in程序forstringindexlen
1条回答
网友
1楼 · 发布于 2024-04-25 15:17:25

这条线

join_string = "-".join(string[i:i+2] for i in range(0, len(string), 2))

已完成所需的全部作业,但如果输入中的字符数为奇数,则末尾的下划线除外。你的代码使这个特殊情况变得非常恶劣。检查输入字符串的字符数是否为奇数:

if len(string) % 2 == 1: 

如果有,则在返回值后面加一个下划线:

join_string += "_"

您的问题并没有说明预期的输出是什么,而且很难从代码中分辨出来,因此,为了抓住要点,整个函数变得

def solution(string):
    join_string = "-".join(string[i:i+2] for i in range(0, len(string), 2))
    if len(string) % 2 == 1:
        join_string += "_"
    return join_string

我得到输出

>>> solution("123465")
'12-34-65'
>>> solution("1234657")
'12-34-65-7_'
>>> solution("1")
'1_'
>>> solution("")
''

如果你想要,比如说,一个由两个字符串组成的列表,那么就这样做

return join_string.split("-")

相关问题 更多 >