我正在創建一個代碼來對輸入的單詞進行編碼。輸入文本中的字母被轉換為一個數字并存盤在一個串列中。這是我使用的代碼,
z=input("input the word:")
x= z.strip()
y= -1
g=[ ]
while y<=len(x):
y=y 1
if x[y]==" ":
g.insert(y,1000)
if x[y]=="a":
g.insert(y,1001)
if x[y]=="b":
g.insert(y,1002)
等等.....
但我收到了一個錯誤,
Traceback (most recent call last):
File "C:\Users\USER\Desktop\enc.py", line 13, in <module>
if x[y]==" ":
IndexError: string index out of range
>>>
如果有人告訴我代碼中有什么問題,我將不勝感激。
uj5u.com熱心網友回復:
看看你的回圈。即使在 y == len(x) 時,您也會運行回圈,并且您碰到了y第一件事。因此,如果字串為 3,則當 evenx[3]超出范圍時,您將使用 y==4 執行回圈。只需使用 for 回圈。這就是他們的目的。
z=input("input the word:")
x= z.strip()
g=[ ]
for y in range(len(x)):
if x[y]==" ":
g.insert(y,1000)
elif x[y]=="a":
g.insert(y,1001)
elif x[y]=="b":
g.insert(y,1002)
我可能會使用for y,c in enumerate(x):,但我們將把它留作以后的練習。
所以,甚至更好:
g=[]
for c in x:
if c==' ':
g.append(1000)
elif c=='a':
g.append(1001)
elif c=='b':
g.append(1002)
更好的方法是資料驅動:
mapping = {
' ': 1000,
'a': 1001,
'b': 1002
}
g = [mapping[c] for c in x]
uj5u.com熱心網友回復:
問題在于,由于 Python 是 0 索引的,因此您需要調整回圈的結束范圍。len(y)是一個數字,但可互動的最后一個索引總是len(y) - 1。如果您相應地調整回圈,您的問題應該得到解決。
但是,正如另一位用戶評論的那樣,如果您開始使用while回圈,請確保在代碼塊之后增加它;否則,您將始終跳過第一個元素。
while y<=len(x) - 1:
# do code
y = 1
或者
while y < len(x):
# do code
y = 1
更好的是,使用for回圈:
for i in range(len(x)):
# do code
uj5u.com熱心網友回復:
你可以用串列推導來做到這一點。
z = [(1000 if letter == " " else 1001 if letter == "a" else 1002 if letter == "b" else '') for letter in input("input the word: ")]
x = [y for y in z if y]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/350592.html
上一篇:TypeError:'str'物件在我的方法中不可呼叫
下一篇:TypeError:canonlyconcatenatestr(not"tuple")tostr我該如何解決這個問題?
