如何在python中将字符串翻译为填充二进制文件?

svs*_*svs 4 python

我已经制作了一个程序,将文本转换为二进制代码,但它真的很混乱.这是我的代码:

def converter():
    print("message:")
    inputMsg = input()
    msg = ''
    for letter in inputMsg:
        if letter == 'a':
            msg = msg + '01100001'
        elif letter == 'b':
            msg = msg + '01100010'
        elif letter == 'c':
            msg = msg + '01100011'
        elif letter == 'd':
            msg = msg + '01100100'
        elif letter == 'e':
            msg = msg + '01100101'
        elif letter == 'f':
            msg = msg + '01100110'
        elif letter == 'g':
            msg = msg + '011000111'
        elif letter == 'h':
            msg = msg + '01101000'
        elif letter == 'i':
            msg = msg + '01101001'
        elif letter == 'j':
            msg = msg + '01101010'
        elif letter == 'k':
            msg = msg + '01101011'
        elif letter == 'l':
            msg = msg + '01101100'
        elif letter == 'm':
            msg = msg + '01101101'
        elif letter == 'n':
            msg = msg + '01101110'
        elif letter == 'o':
            msg = msg + '01101111'
        elif letter == 'p':
            msg = msg + '01110000'
        elif letter == 'q':
            msg = msg + '01110001'
        elif letter == 'r':
            msg = msg + '01100010'
        elif letter == 's':
            msg = msg + '01110011'
        elif letter == 't':
            msg = msg + '01110100'
        elif letter == 'u':
            msg = msg + '01110101'
        elif letter == 'v':
            msg = msg + '01110110'
        elif letter == 'w':
            msg = msg + '01110111'
        elif letter == 'x':
            msg = msg + '01111000'
        elif letter == 'y':
            msg = msg + '01111001'
        elif letter == 'z':
            msg = msg + '01111010'

        elif letter == 'A':
            msg = msg + '01000001'
        elif letter == 'B':
            msg = msg + '01000010'
        elif letter == 'C':
            msg = msg + '01000011'
        elif letter == 'D':
            msg = msg + '01000100'
        elif letter == 'E':
            msg = msg + '01000101'
        elif letter == 'F':
            msg = msg + '01000110'
        elif letter == 'G':
            msg = msg + '01000111'
        elif letter == 'H':
            msg = msg + '01001000'
        elif letter == 'I':
            msg = msg + '01001001'
        elif letter == 'J':
            msg = msg + '01001010'
        elif letter == 'K':
            msg = msg + '01001011'
        elif letter == 'L':
            msg = msg + '01001100'
        elif letter == 'M':
            msg = msg + '01001101'
        elif letter == 'N':
            msg = msg + '01001110'
        elif letter == 'O':
            msg = msg + '01001111'
        elif letter == 'P':
            msg = msg + '01010000'
        elif letter == 'Q':
            msg = msg + '01010001'
        elif letter == 'R':
            msg = msg + '01000010'
        elif letter == 'S':
            msg = msg + '01010011'
        elif letter == 'T':
            msg = msg + '01010100'
        elif letter == 'U':
            msg = msg + '01010101'
        elif letter == 'V':
            msg = msg + '01010110'
        elif letter == 'W':
            msg = msg + '01010111'
        elif letter == 'X':
            msg = msg + '01011000'
        elif letter == 'Y':
            msg = msg + '01011001'
        elif letter == 'Z':
            msg = msg + '01011010'
        elif letter == ' ':
            msg = msg + '00100000'

    print('\n',msg,'\n')
    print('do again?  (y/n)')
    yn()

def yn():
    yn = input()
    if yn == 'y':
        converter()
    elif yn == 'n':
        pass
    else:
        yn()


 converter()
Run Code Online (Sandbox Code Playgroud)

我的输出没问题,但是你看到我的每个字母都有if/else.还有其他方法可以清洁并且效率更高吗?

Sti*_*ffo 12

>>> st = "hello"
>>> ' '.join(format(ord(x), '08b') for x in st)
'01101000 01100101 01101100 01101100 01101111
Run Code Online (Sandbox Code Playgroud)

这里发生的是我们x在字符串中循环遍历每个字符st.在我们运行的每个项目上ord(),它将字符x转换为表示Unicode代码点的整数,例如'T' == 84.这个数字我们然后.format进入(填充)二进制.08这意味着要将数字格式化为8位数字,0从左边填充.b然后表示它是二进制或基数2.数字必须填充或没有前导零.

  • 这个答案真的可以用一些解释!请记住,一些初学者可能会在几年后偶然发现这个答案.我发现一旦获得批准,我甚至可以进一步改善我的所有问题,这是一个好习惯,因为在寻找信息时你通常会依赖于接受的答案. (3认同)