可以将列表转换为整数

der*_*erp 4 python typeerror python-3.x

我正在尝试编写一个程序来转换邮件密码.我正在尝试创建一个基本代码来处理.这是问题所在.

data = input('statement')
for line in data:
    code = ('l' == '1',
            'a' == '2'
            'r' == '3',
            'y' == '4')
    line = line.replace(data, code, [data])
print(line)    
Run Code Online (Sandbox Code Playgroud)

当我输入我的名字时,上述程序的这一点是这样的:

larry
Run Code Online (Sandbox Code Playgroud)

输出应该是

12334
Run Code Online (Sandbox Code Playgroud)

但我继续接受这个消息

TypeError: 'list' object cannot be interpreted as an integer
Run Code Online (Sandbox Code Playgroud)

所以我认为这意味着我的代码变量必须是一个在replace()中使用的整数有没有办法将该字符串转换为整数或是否有另一种方法来解决这个问题?

Vol*_*ity 6

你的原始代码给你错误的原因是因为line.replace(data, code, [data]).该str.replace方法可以采用3个参数.第一个是要替换的字符串,第二个是替换字符串,第三个可选参数是要替换的字符串实例数 - 一个整数.您正在传递一个列表作为第三个参数.

但是,您的代码也存在其他问题.

code目前(False, False, False, False).你需要的是一本字典.您可能还希望将其分配给循环外部,因此您不会在每次迭代时对其进行评估.

code = {'l': '1', 'a': '2', 'r': '3', 'y': '4'}
Run Code Online (Sandbox Code Playgroud)

然后,将您的循环更改为:

data = ''.join(code[i] for i in data)
Run Code Online (Sandbox Code Playgroud)

print(data) 为您提供所需的输出.

但请注意,如果输入中的字母不在字典中,则会出错.dict.get如果键不在字典中,则可以使用该方法提供默认值.

data = ''.join(code.get(i, ' ') for i in data)
Run Code Online (Sandbox Code Playgroud)

其中第二个参数code.get指定默认值.

所以你的代码应该是这样的:

code = {'l': '1', 'a': '2', 'r': '3', 'y': '4'}

data = input()
data = ''.join(code.get(i, ' ') for i in data)

print(data)
Run Code Online (Sandbox Code Playgroud)