【问题标题】:can a list be converted to an integer列表可以转换为整数吗
【发布时间】:2013-02-16 15:04:12
【问题描述】:

我正在尝试编写一个程序来将消息转换为密码。我正在尝试创建一个基本代码来进行处理。这就是问题所在。

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() 中使用的整数 有没有办法将该字符串转换为整数或有另一种方法来解决这个问题?

【问题讨论】:

  • 旁注:由于data实际上只是一个单行字符串,使用for char in data:而不是for line in data:会产生误导。

标签: python python-3.x typeerror


【解决方案1】:

您的原始代码给您错误的原因是因为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)

【讨论】:

    【解决方案2】:

    总结一下:

    % 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
    

    【讨论】:

      【解决方案3】:

      你可以使用translate:

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

      (假设 Python 3)

      【讨论】:

        【解决方案4】:

        之前的 cmets 应该对你的错误信息给你一个很好的解释, 所以我会给你另一种方法来将data翻译成code。 我们可以利用 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
        

        【讨论】:

        • 我刚刚注意到您使用的是 Python-3.x。我编写的代码在 Python-2.7 中工作,我想基本上它应该在 3.x 中相同,但请注意可能有一些细微的差别。
        猜你喜欢
        • 2020-07-15
        • 2018-03-10
        • 1970-01-01
        • 2020-01-23
        • 1970-01-01
        • 2016-02-04
        • 1970-01-01
        • 2022-11-10
        • 1970-01-01
        相关资源
        最近更新 更多