Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中如何将列表中的字母更改为对应的字母数字_Python - Fatal编程技术网

在python中如何将列表中的字母更改为对应的字母数字

在python中如何将列表中的字母更改为对应的字母数字,python,Python,我一直在尝试将python中列表中的字母更改为类中项目对应的字母数字。我已经尝试了所有我知道的方法,但我仍然不能正确地去做。如果有人能回答这个问题,这将大大帮助我,谢谢 def main(): miriam = True def letters(): a = 1 b = 2 c = 3 d = 4 e = 5 f = 6 g = 7 h = 8 i = 9 j = 10 k = 11 l = 12

我一直在尝试将python中列表中的字母更改为类中项目对应的字母数字。我已经尝试了所有我知道的方法,但我仍然不能正确地去做。如果有人能回答这个问题,这将大大帮助我,谢谢

def main():
miriam = True
def letters():
    a = 1
    b = 2
    c = 3
    d = 4
    e = 5
    f = 6
    g = 7
    h = 8
    i = 9
    j = 10
    k = 11
    l = 12
    m = 13
    n = 14
    o = 15
    p = 16
    q = 17
    r = 18
    s = 19
    t = 20
    u = 21
    v = 22
    w = 23
    x = 24
    y = 25
    z = 26
    A = 1
    B = 2
    C = 3
    D = 4
    E = 5
    F = 6
    G = 7
    H = 8
    I = 9
    J = 10
    K = 11
    L = 12
    M = 13
    N = 14
    O = 15
    P = 16
    Q = 17
    R = 18
    S = 19
    T = 20
    U = 21
    V = 22
    W = 23
    X = 24
    Y = 25
    Z = 26
while miriam == True:
    codeDeCode = input("would you like to code or decode? ")
    if codeDeCode == "code":
        code = input("enter the text you would like to code")
        listedCode = list(code)
        listedCodeAmount = len(listedCode)
        print(listedCodeAmount)
        for x in range(0, listedCodeAmount):
            listedCode[x] = letters()

        print(listedCode)
我从中得到的结果是

>>> main()
would you like to code or decode? code
enter the text you would like to codemiriam
6
[None, None, None, None, None, None]
would you like to code or decode? 
我希望得到这样的结果

[13, 9, 18, 9, 1, 13]
我真的很感谢有人在这方面的帮助,谢谢。

这很有效:

import string
构建从字母到数字的字典映射:

codes_letter_to_number = {letter: i for i, letter in 
                          enumerate(string.ascii_lowercase, 1)}
另一方面:

codes_number_to_letter = {v: k for k, v in codes_letter_to_number.items()}
代码:

给出:

[13, 9, 18, 9, 1, 13]
'miriam'
'miriam'
解码:

''.join(codes_number_to_letter[i] for i in [13, 9, 18, 9, 1, 13])
给出:

[13, 9, 18, 9, 1, 13]
'miriam'
'miriam'
现在,将所有功能都放在漂亮的函数中:

import string

LETTER_TO_NUMBER = {letter: i for i, letter in enumerate(string.ascii_lowercase, 1)}
NUMBER_TO_LETTER = {v: k for k, v in LETTER_TO_NUMBER.items()}

def code(word):
    return [LETTER_TO_NUMBER[letter.lower()] for letter in word]

def decode(number_list):
    return ''.join(NUMBER_TO_LETTER[i] for i in number_list)
现在:

返回:

[13, 9, 18, 9, 1, 13]

给出:

[13, 9, 18, 9, 1, 13]
'miriam'
'miriam'

你可以使用字典:

My_Dictionary = {'a': 1, 'b': 2} # you can fill in the rest
My_Message = "abba"
My_Numbers = []

for letter in My_Message:
    My_Numbers.append(My_Dictionary[letter])
print My_Numbers
如果你想知道64。。。这是因为
ord('A')
是65。如果您想更清楚,可以这样做:

>>> [ord(c)-ord('A')+1 for c in 'MiRiaM'.upper()]
[13, 9, 18, 9, 1, 13]
这不是函数的工作方式。您的函数没有返回值,因此它返回
None
。您试图将该函数视为列表或其他容器。您只需在函数范围内设置一组变量,然后在完成后将它们放到地板上

import string


miriam = True

def get_letter_dict():
    return {val: idx for idx, val in enumerate(string.ascii_lowercase, 1)}

while miriam == True:
    letter_dict = letters()
    code_decode = input("would you like to code or decode? ")
    if code_decode.lower() == "code":
        code = input("enter the text you would like to code:\n")  # makes it easier to read
        listed_code= [letters[c] for c in code.lower()]
        print(listed_code)
所以我们做的第一件事就是导入
字符串
模块,这将帮助我们制作字典。然后我们将变量设置为
True
,以便稍后退出程序

接下来,我们创建了一个函数来获取字典。当然,你可以用手来做,但这要容易得多。我用了一种新的方法。注意我是如何在函数中使用
return
(了解更多信息)的。这样我就可以将函数的结果保存到变量中。注意,我使用
string.ascii\u lowercase
来构建字典。这是一个包含所有小写字母(a-z)的字符串。使用键或比较字符串时,大小写很重要。记住
'm'!='M'
。您可以阅读enumerate的功能

下面的一些代码看起来应该很熟悉,所以我不会详细介绍。但是我确实改变了你建立列表的方式。我使用了一个你可以阅读的理解列表


我还将变量的名称更改为建议的Python命名约定。在其他语言中,变量的名称类似于此,而在Python中,变量的名称类似于此。阅读起来容易多了。

这是@stephanpochmann答案的精确副本,包括他对“Miriam”一词的不同大写形式。
In [29]: mydict=dict(zip(string.letters,[ord(c)%32 for c in string.letters]))

In [30]: code="miriam"

In [31]: li=list(code)

In [32]: [mydict[i] for i in li]
Out[32]: [13, 9, 18, 9, 1, 13]