Python 循环错误 - 它在 6 个字符串上运行良好,但超过 6 个字符串时就会崩溃

Python loop error - Its runs fine for 6 character strings but falls apart for more than that

任务
给定一个从 到 索引的给定长度的字符串,将其索引为偶数和索引为奇数的字符作为 space 分隔的字符串打印在一行上。 正如您所看到的,它可以很好地处理 grace,但不能以相同的方式处理 thomasshelby。你能告诉我,这段代码有什么问题吗?

length = int(input()) 
k=1
while k <= length:
    name = input()
    name1 = name2 = ""
    for i in name:
        if name.index(i)%2 == 0:
            name1 = name1 + i

    for j in name:
        if name.index(j)%2 != 0:
            name2 = name2 + j

    print(name1,name2)
    k += 1

这是结果

2

thomasshelby
toaeb hmsshly

grace
gae rc 

奇偶字符可以直接使用字符串切片

检查下面的例子:

name = input()
name1 = name[::2]
name2 = name[1::2])

str.index方法returns最小索引值。

这是对方法的描述:

    def index(self, sub, start=None, end=None): # real signature unknown; restored from __doc__
        """
        S.index(sub[, start[, end]]) -> int
        
        Return the lowest index in S where substring sub is found,
        such that sub is contained within S[start:end].  Optional
        arguments start and end are interpreted as in slice notation.
        
        Raises ValueError when the substring is not found.
        """

所以在你的程序中,当输入字符串中存在相同的元素时,它不会是理想的。

您可以使用索引循环变量代替索引内置方法:

length = int(input()) 
k=1
while k <= length:
    name = input()
    name1 = name2 = ""
    for i in range(len(name)):
        if i%2 == 0:
            name1 = name1 + name[i]

    for j in range(len(name)):
        if j%2 != 0:
            name2 = name2 + name[j]

    print(name1,name2)
    k += 1