TypeError:字符串索引必须是整数..这是什么问题

时间:2018-12-17 13:56:54

标签: python python-3.x python-2.7

我收到TypeError:字符串索引必须是整数...我该如何解决? 代码是:

def myfunc(x):
    y=''
    for i in x:
        y=y+x[i].upper() +x[i+1]
        i+=2

    return y

4 个答案:

答案 0 :(得分:1)

您应该对x而不是其值实际索引x进行索引,从而进行range(len(x))enumerate(x)。另外,您无法在for循环中修改迭代器,如果需要,则需要while

def myfunc(x):
    y=''
    i = 0
    while i < len(x) - 1:
        y=y+x[i].upper() +x[i+1]
        i+=2

    return y

答案 1 :(得分:1)

尽可能避免迭代索引。您可以通过在x上用自己的尾巴进行遍历来实现此目的:

def myfunc(x):
    y = ''
    for x1, x2 in zip(x, x[1:]):
        y = y + x1.upper() + x2
    return y

更好(更有效)的是,您可以使用join从一个列表中创建y

import itertools
def myfunc(x):
    return ''.join(list(itertools.chain.from_iterable(x1.upper() + x2 for x1,x2 in zip(x, x[1:]))))

答案 2 :(得分:0)

当您说:for i in x:就像您在说“ x字符串中的每个字母”一样,因此在每次迭代中,i将是下一个字母从字符串。您可以像使用print i语句那样创建一个简单的循环来查看行为。

您的代码的另一个问题是x[i + 1]语句。当for循环到达最后一次迭代时,您将尝试访问不存在的内容,并得到一个IndexError。话虽如此,您应该像这样修改代码:

def myfunc(x):
    y = ''
    for i in range(0, len(x) - 1, 2):
        y = y + x[i].upper() + x[i + 1]
    return y

由于您要迭代其他所有字符,因此我还为range使用了另一组参数:range([start], stop[, step])

  • start:序列的起始编号。
  • 停止:生成最多但不包括该数字的数字。
  • 步骤:序列中每个数字之间的差异。

干杯!

答案 3 :(得分:0)

您可以使用enumerate来做到这一点:

代码:

x = 'abcdef'

def myfunc(x):
    y = ''
    c = 0
    for i, j in enumerate(x):
        if i == c:
            y += j.upper()
        else:
            y += j
            c += 2
    return(y)


assert myfunc(x) == 'AbCdEf'

print(myfunc(x))

输出:

AbCdEf