【问题标题】:How to convert any word into an integer in Python [closed]如何在Python中将任何单词转换为整数[关闭]
【发布时间】:2018-06-29 12:19:15
【问题描述】:

有没有一种可能的方法可以将任何单词转换为python中的整数形式,显然是字符串形式。

起初这似乎完全愚蠢和不可能,但如果你看一看,这是一个我一直在努力解决的好问题。

是的,我尝试了许多其他方法,例如使用列表将不同的整数存储到它们对应的字母中;进展不太顺利。

【问题讨论】:

  • 你的意思是hash 吗?否则,您可以将单词解释为基数 26 中的整数。
  • 你能举个例子吗?用它的 ASCII 值替换每个字母有效吗?
  • 什么意思?单词“word”的整数是多少
  • def convertWordToInteger(word): return 4 - 将任何单词(或任何其他对象,就此而言)转换为整数。如果您有进一步的要求(例如转换的可逆性),您需要指定它们

标签: python list encryption data-conversion


【解决方案1】:

您可以在素数 (2,3,5,7,...) 与字母表中的所有字符 (a,b,c,d,e,...) 之间创建映射。然后将单词中字符的位置映射到下一个更大的素数。

然后你将你的字符值乘以你的位置值并总结:

例子:

alphabet = {"a":2, "b":3, "1":5, "2":7 }
position = [11,13,17,19,23,29,31]
text = "aabb12a"

def encode(t):
    """Throws error when not map-able"""
    return sum(alphabet[x] * position[pos] for pos,x in enumerate(t))


for i in alphabet:
    print(i,"=>",encode(i))

print(encode(text))

输出:

('a', '=>', 22)
('1', '=>', 55)
('2', '=>', 77)
('b', '=>', 33)
536 

要反转数字,您必须进行素数分解,按较大的数字升序对结果和数进行排序,然后反转字母表的映射。

在这种情况下,您会得到:

536 = 2*11 + 2*13 + 3*17 + 3*19 + 5*23+ 7*29 + 2*31

你可以查找位置和字符来重构你的单词。

给出,128 个字符 (ascii) 和最多 50 个字符的单词,你会得到 个数字......

【讨论】:

    【解决方案2】:

    你可以使用内置的hash函数:

    >>> hash('hello')
    -8733837932593682240
    

    【讨论】:

    • 潜在问题:多个单词可能会哈希到相同的值。如果您只有数字,您将无法确定原始单词。字符串的哈希值可能会在程序的两次连续执行之间发生变化。
    • 但不是这样吗,任何 2 个不同的词都可以对应相同的哈希值?我对此了解不多,因为我是 python 新手。
    • 是的,2 个不同的词可以有相同的哈希值。如果您将“单词”定义为“包含任何字符组合的任何字符串”,则这是完全确定的。如果您将“单词”定义为“出现在英语词典中的东西”,那几乎可以肯定
    猜你喜欢
    • 1970-01-01
    • 2011-05-02
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    相关资源
    最近更新 更多