可以将列表转换为整数

时间:2013-03-02 00:22:29

标签: python python-3.x typeerror

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

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

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

larry

输出应为

12334

但我继续收到此消息

TypeError: 'list' object cannot be interpreted as an integer

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

4 个答案:

答案 0 :(得分:6)

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

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

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

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

然后,将你的循环改为:

data = ''.join(code[i] for i in data)

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

但请注意,如果输入中的字母不在字典中,您将收到错误消息。如果密钥不在字典中,您可以使用dict.get方法提供默认值。

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

code.get的第二个参数指定默认值。

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

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

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

print(data)

答案 1 :(得分:1)

总结一下:

%cat ./test.py

#!/usr/bin/env python
data = raw_input()
code = {'l': '1', 'a': '2',
        'r': '3', 'y': '4'}

out = ''.join(code[i] for i in data)
print (out)

%python ./test.py

larry
12334

答案 2 :(得分:1)

您可以使用translate

>>> print("Larry".lower().translate(str.maketrans('lary', '1234')))
12334

(假设Python 3)

答案 3 :(得分:0)

之前的评论应该会对您的错误消息做出很好的解释, 所以我会给你另一种方法来进行从datacode的翻译。 我们可以使用Python的translate方法

# We will use the "maketrans" function, which is not included in Python's standard Namespace, so we need to import it.
from string import maketrans

data = raw_input('statement')
    # I recommend using raw_input when dealing with strings, this way
    # we won't need to write the string in quotes.

# Now, we create a translation table
# (it defines the mapping between letters and digits similarly to the dict)
trans_table = maketrans('lary', '1234')

# And we translate the guy based on the trans_table
secret_data = data.translate(trans_table)

# secret_data is now a string, but according to the post title you want integer. So we convert the string into an integer.
secret_data = int(secret_data)

print secret_data


只是为了记录,如果您对编码数据感兴趣,您应该检查 的散列即可。
哈希是一种广泛使用的生成秘密数据格式的方法
Python中一个简单的散列示例(使用所谓的sha256散列方法):

>>> import hashlib
>>> data = raw_input('statement: ')
statement: larry
>>> secret_data = hashlib.sha256(data)
>>>print secret_data.hexdigest()
0d098b1c0162939e05719f059f0f844ed989472e9e6a53283a00fe92127ac27f