我正在尝试对我正在关注的其中一门课程提出挑战。我是编程新手,但我很想学习。 你能详细告诉我为什么会发生这个错误以及如何解决它。
default_names =['Justin', 'john','Emilee', 'jim','Ron','Sandra','veronica','Wiskley']
i=0
for i in default_names:
default_names[i]=default_names[i][0].upper()
i+=1
if i==len(default_names):
break
print default_names
错误: TypeError:列表索引必须是整数,而不是str
答案 0 :(得分:0)
您正在寻找的是:
for i,s in enumerate(default_names):
或简单:
for i in range(len(default_names)):
您所犯的错误是当您说for i in default_names:
时i
值是一个字符串而不是int
正在尝试使用。
for i in default_names:
print(i)
会给:
OUT: Justin
john
Emilee
jim
Ron
Sandra
veronica
Wiskley
所以实际的代码应该是,假设你试图将列表中的每个字符串转换为大写:
for i in range(len(default_names)):
default_names[i]=default_names[i].upper()
编辑: OP只希望First char为大写,并且由于string
是不可变的,因此将代码更改为:
for i in range(len(default_names)):
default_names[i]=default_names[i][0].upper() + default_names[i][1:]
答案 1 :(得分:0)
default_names =['Justin', 'john','Emilee', 'jim','Ron','Sandra','veronica','Wiskley']
for i in range(len(default_names)):
default_names[i]=default_names[i].upper()
print default_names
答案 2 :(得分:0)
正如您在错误中看到的那样:TypeError:list indices必须是整数,而不是str。这是因为要访问列表的元素,您必须使用索引,它是一个整数。根据代码的结构,您可能来自不同的语言。 Python的for循环与其他语言不同。它不会增加您在循环上创建的变量,而是迭代元素并将值传递给变量。我认为将你的i初始化为0后,使用while循环与你所做的代码更合适。例如。
default_names =['Justin', 'john','Emilee', 'jim','Ron','Sandra','veronica','Wiskley']
i=0
while i < len(default_names):
default_names[i]=default_names[i].upper() #removed the [0] here
i+=1
#removed the other codes here
print default_names
随着你在python中变得更好,你可以找到更有效的方法来做这些事情。您想要的结果可以通过
简单地完成
default_names = [name.upper() for name in default_names]
简单地迭代所有名称,使其成为大写并将其保存回default_names