Python TypeError:字符串索引必须是整数..有什么问题吗
我得到了TypeError:字符串索引必须是整数。。。我怎样才能解决这个问题? 代码是:Python TypeError:字符串索引必须是整数..有什么问题吗,python,python-3.x,python-2.7,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 您应该索引x迭代x的实际索引,而不是其值,从而执行范围(len(x))或枚举(x)。此外,您不能在for循环中修改迭代器,如果要这样做,您需要while: def myfunc(x): y=''
def myfunc(x):
y=''
for i in x:
y=y+x[i].upper() +x[i+1]
i+=2
return y
您应该索引
x
迭代x
的实际索引,而不是其值,从而执行范围(len(x))
或枚举(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
def myfunc(x):
y=''
i=0
而i
您应该索引x
迭代x
的实际索引,而不是其值,从而执行范围(len(x))
或枚举(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
def myfunc(x):
y=''
i=0
而i
当你说:对于x中的i:
就像你说的“对于x字符串中的每个字母”,所以在每次迭代中,i
将是字符串中的下一个字母。您可以使用print i
语句创建一个简单的循环来查看行为
代码的另一个问题是x[i+1]
语句。当for循环到达最后一次迭代时,您将尝试访问不存在的内容,并将得到一个索引器。话虽如此,您应该像这样修改代码:
def myfunc(x):
y = ''
for i in range(0, len(x) - 1, 2):
y = y + x[i].upper() + x[i + 1]
return y
因为您希望每隔一个字符迭代一次,所以我还为范围使用了另一组参数:范围([start],stop[,step])
- 开始:序列的开始编号
- 停止:生成最多的数字,但不包括此数字
- 步骤:序列中每个数字之间的差值
干杯 当你说:对于x中的i:
就像你说的“对于x字符串中的每个字母”,所以在每次迭代中,i
将是字符串中的下一个字母。您可以使用print i
语句创建一个简单的循环来查看行为
代码的另一个问题是x[i+1]
语句。当for循环到达最后一次迭代时,您将尝试访问不存在的内容,并将得到一个索引器。话虽如此,您应该像这样修改代码:
def myfunc(x):
y = ''
for i in range(0, len(x) - 1, 2):
y = y + x[i].upper() + x[i + 1]
return y
因为您希望每隔一个字符迭代一次,所以我还为范围使用了另一组参数:范围([start],stop[,step])
- 开始:序列的开始编号
- 停止:生成最多的数字,但不包括此数字
- 步骤:序列中每个数字之间的差值
干杯 尽可能避免迭代索引。您可以通过迭代x
zipped和它自己的尾巴来实现这一点:
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:]))))
尽可能避免迭代索引。您可以通过迭代x
zipped和它自己的尾巴来实现这一点:
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:]))))
您可以使用枚举
:
代码:
输出:
AbCdEf
您可以使用枚举
:
代码:
输出:
AbCdEf
你应该小心x[i+1]
。您可能会收到索引器
@尼克松在如何实现循环方面展示了一种正确的方法。我怀疑这与<“nope”中i的code>:打印(i)
i+=2
没有任何影响,因为循环的下一次迭代将简单地用x
的下一个元素覆盖i
的值。您应该小心x[i+1]
。您可能会收到索引器
@尼克松在如何实现循环方面展示了一种正确的方法。我怀疑这与<“nope”中i的code>:打印(i)
i+=2
没有任何影响,因为循环的下一次迭代将简单地用x
的下一个元素覆盖i
的值i+=2
是没有意义的;你对i
所做的任何更改都会被你正在迭代的内容中的下一个值覆盖。是的,我忘记了:)我更新了我的答案。非常感谢。很抱歉实际上,我本想在问题中添加该评论,但点击了错误的“添加评论”链接。I+=2
毫无意义;你对i
所做的任何更改都会被你正在迭代的内容中的下一个值覆盖。是的,我忘记了:)我更新了我的答案。非常感谢。很抱歉实际上,我是想把那个评论添加到问题中,然后点击了错误的“添加评论”链接。如果x的长度是奇数,你会在这里得到一个索引器。True@Moberg主要关注循环的逻辑,而忽略了内部代码。现在应该没事了。如果x的长度是奇数,那么你会得到一个索引器。True@Moberg主要关注循环的逻辑,而忽略了内部代码。现在应该没事了。谢谢