例如,在python中,当我输入ord("a")
时,它返回97
,因为它引用了ascii列表。我希望ord("a")
从我创建的字符串(例如
alphabet = "abcdefghijklmnopqrstuvwxyz0123456789 .,?!"
因此ord("b")
为1
而ord("c")
为2
等。
我该怎么做呢?
答案 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)