“如何修复”;TypeError:字符串索引必须是整数;Python中的错误
我决定编写一些代码,根据一个无序字符串(包括所有ASCII字母)对消息进行编码。代码如下:“如何修复”;TypeError:字符串索引必须是整数;Python中的错误,python,error-handling,Python,Error Handling,我决定编写一些代码,根据一个无序字符串(包括所有ASCII字母)对消息进行编码。代码如下: from string import ascii_letters as letters from random import shuffle Code = list(letters) shuffle(Code) ''.join(Code) print("Your code is:") for i in Code: print(i, end="") print(" ") message =
from string import ascii_letters as letters
from random import shuffle
Code = list(letters)
shuffle(Code)
''.join(Code)
print("Your code is:")
for i in Code:
print(i, end="")
print(" ")
message = input("Input your message: ")
for i in message:
if message[i] == 'a':
message[i] = Code[0]
...
所以我希望它能工作,但出于某种原因,我只得到了“TypeError:字符串索引必须是整数”您有'.join(code)
,但它没有分配给任何对象,所以代码仍然是一个列表。要使其成为字符串docode=''.join(code)
将其转换为字符串后,与打印(代码)相同。
您正在迭代消息,因此i是字符,但您将其视为索引:
您也可以这样做:注意ord将其转换为ascii值
for i in range(len(message)):
if message[i] == 'a':
message = message.replace(message[i], Code[0])
您可以将其转换为ascii以处理其他字符
message = message.replace(message[i], Code[ord(message[i])- ord('a')])
ord(message[i])-ord('a')
获取代码的适当索引。
或
message
是字符串,因此i
是字符(而不是索引),因此您有ie.message[“A”]
。如果i==“a”您需要,您可以使用list作为结果-结果。append(code[0])
或使用作为i,enumarate中的char(message):
来获取char和index。可能需要创建字典{“a”:“z”,“b”:“q”,}
,并使用它来代替所有如果
。它将是更短的代码。
message = message.replace(message[i], Code[ord(message[i])- ord('a')])
for c in message:
message = message.replace(c, Code[ord(c)- ord('a')])