簡體   English   中英

Python錯誤TypeError:字符串索引必須是整數

[英]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指出的那樣,因為stringsimmutable ,所以不能使用索引來更改它們。 所以使用連接或replace方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM