我收到TypeError:字符串索引必须是整数...我该如何解决? 代码是:
def myfunc(x):
y=''
for i in x:
y=y+x[i].upper() +x[i+1]
i+=2
return y
答案 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])
。
干杯!
答案 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