这是我的代码:
word = str(input())
list = []
for i in range(len(word)):
B = word[i]
list.append(B)
D = list.pop(0)
E = D.upper()
list.insert(0, E)
capitalized_word = ""
for i in range(0, len(list)):
C = list.pop(i)
capitalized_word = capitalized_word + C
print(capitalized_word)
这是我得到的错误:
wORd
Traceback (most recent call last):
File "/Users/akarsh/Desktop/python/capitalization.py", line 16, in <module>
C = list.pop(i)
IndexError: pop index out of range
在这里,我正在使用0到3之间的值,该值在列表的索引范围内,但仍然出现此错误
答案 0 :(得分:0)
您正在从列表中将前一个值从0弹出到3。弹出这些值后,列表将较小。
答案 1 :(得分:0)
这是因为list.pop修改了原始列表,而range(len(word))在循环开始时只计算了一次。
因此,您要求一种更好的方法。使用str.join()函数在列表中合并字符串。像这样:
capitalized_word = "".join(list)
答案 2 :(得分:0)
首先,不要调用您的变量list
。这是Python的内置类型,将名称用于其他用途会引起您莫名其妙的问题。
首先,这个
word = str(input())
list = []
for i in range(len(word)):
B = word[i]
list.append(B)
是将字符串转换为列表的非常繁琐的方法。改为这样:
>>> word = "fred"
>>> mylist = list(word)
>>> mylist
['f', 'r', 'e', 'd']
要大写列表中的每个单词,请不要使用pop()
,因为它会更改列表的长度,而表达式range(0, len(list))
则假定该长度不变。无需从列表中提取字母即可建立capitalized_word
:
>>> capitalized_word = ""
>>> for c in mylist:
capitalized_word += c
>>> capitalized_word
'fred'
您会注意到,实际上这不是大写字母,因为您的代码实际上并未升档。为此,
>>> capitalized_word = ""
>>> for c in mylist:
capitalized_word += c.upper()
>>> capitalized_word
'FRED'
这向您展示了为什么您的方法不起作用,但这不是在Python中使用字符串的最佳方法。实际上,不要以这种方式这样做。改用内置功能:
>>> word = "fred"
>>> capitalized_word = word.upper()
>>> capitalized_word
'FRED'
类似地,不要这样做以提供初始资本:
D = list.pop(0)
E = D.upper()
list.insert(0, E)
相反,这样做:
>>> word = "fred"
>>> capitalized_word = word.title()
>>> capitalized_word
'Fred'