你如何使用ord函数将ord(“a”)作为0?

时间:2016-08-17 00:17:29

标签: python

例如,在python中,当我输入ord("a")时,它返回97,因为它引用了ascii列表。我希望ord("a")从我创建的字符串(例如

)返回零
alphabet = "abcdefghijklmnopqrstuvwxyz0123456789 .,?!"

因此ord("b")1ord("c")2等。 我该怎么做呢?

4 个答案:

答案 0 :(得分:2)

你没有。

你以错误的方式解决这个问题:你犯了错误

  

现有的东西并不能满足我的需求。我想让它满足我的需求!

相反,解决问题的方法是

  

现有的东西并不能满足我的需求。我需要一件能满足我需求的东西!

一旦你意识到这一点,问题现在非常简单。 e.g。

DEFAULT_ALPHABET = "abcdefghijklmnopqrstuvwxyz0123456789 .,?!"
def myord(x, alphabet=DEFAULT_ALPHABET):
    return alphabet.find(x)

答案 1 :(得分:0)

这样的事情可以解决问题:

def my_ord(c):
  alphabet = "abcdefghijklmnopqrstuvwxyz0123456789 .,?!"
  return alphabet.index(c)

答案 2 :(得分:0)

您可以创建一个dict来映射从字符到索引,然后进行查找。这将避免重复搜索其他答案所建议的字符串(O(n)),而是相对于字母表提供O(1)查询时间:

my_ord_dict = {c : i for i, c in enumerate(alphabet)}
my_ord_dict['0'] # 26

此时您可以轻松地将其包装在一个函数中:

def my_ord(c):
    return my_ord_dict['0']

或直接使用绑定方法

my_ord = my_ord_dict.__getitem__

但是你不想改变引用内置函数的名称,这会让所有试图使用它的人感到困惑,这可能会让你看到你的变化。如果您真的想让自己受伤,可以在上面用my_ord替换ord

答案 3 :(得分:0)

如果我理解正确,这就是你想要的:

alphabet = "abcdefghijklmnopqrstuvwxyz0123456789 .,?!"

def crypt(c, key=97):
    return ord(c)-key

def decrypt(c, key=97):
    return chr(c+key)

dst = [crypt(c) for c in alphabet]
src = [decrypt(c) for c in dst]
print dst
print ''.join(src)