[英]Python error TypeError: string indices must be integers
我對Python很陌生,所以如果這是一個愚蠢的錯誤,請原諒我!
我一直在研究密碼生成器,以便在科技俱樂部展示。 它是如何工作的,它要求你輸入一個單詞。 您輸入的單詞將變為列表。 然后它將列表中的每個字母更改為其他內容以創建一個唯一的密碼(我知道它有缺陷)。 當我運行代碼時,它說TypeError: string indices must be integers
。 我的代碼出了什么問題?
print ("Leo's Password Generator")
print ('Please enter a word')
word = input()
print ('Enter another word:')
word2 = input()
word = word2 + word
word.split()
def print_list(toon):
for i in toon:
if toon[i] == 'e':
toon[i] = '0'
print_list(word)
print (word)
問題是你要將一個字符串傳遞給print_list
。 當您遍歷字符串時,它會將其拆分為單字符字符串。 所以,基本上你正在做的是調用toon['a']
,這是行不通的,因為你必須使用一個整數來通過索引訪問一個iterable。
另請注意,你和Batuhan都在處理字符串的方式上犯了錯誤。 即使您修復了上述錯誤,您仍然會在之后立即獲得另一個錯誤。 在python中, string
不允許項目分配,因此您將不得不創建一個全新的字符串,而不是在其中重新分配單個字符。
如果你願意,你可以使用列表理解來在相當少的空間內完成相同的任務。 這是一個例子:
def print_list(toon):
return ''.join([ch if ch != 'e' else '0' for ch in toon])
這將從toon創建一個新的字符串,其中'e'的所有發生率都被替換為'0',並且所有非'''字符都像以前一樣被保留。
編輯:我可能誤解了你的目的。 word.split()
作為一個語句的整體不做任何事情 - split
不會重新分配,你必須做word = word.split()
如果你想在之后用word等於字符串列表聲明。 但是 - 你是否有理由首先嘗試拆分字符串? 為什么要為一個名為word
變量分配兩個單獨的word
? 這沒有任何意義,使我們很難說出你想要完成的事情。
For loop
已經為您提供了下一個可用項的值 。 在你的情況下, i
不是一個索引 ,它本身就是價值 。
但是,如果要同時訪問索引和值,可以使用enumerate
:
def print_list(toon):
for i, ch in enumerate(toon):
if ch == 'e':
toon = toon[:i] + '0' + toon[i+1:]
print(toon)
或者您可以使用傳統方法迭代字符串:
def print_list(toon):
for i in range(len(toon)):
if toon[i] == 'e':
toon = toon[:i] + '0' + toon[i+1:]
print(toon)
編輯:正如@furkle指出的那樣,因為strings
是immutable
,所以不能使用索引來更改它們。 所以使用連接或replace
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.