I have made a program that translates a text into binary code but its really messy. This is my code:
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()
My output is OK but you see i have an if/else for every letter. Is there an other way to do it clean and a bit more efficient?
>>> st = "hello"
>>> ' '.join(format(ord(x), '08b') for x in st)
'01101000 01100101 01101100 01101100 01101111
What happens here is that we loop over every character, x
, in string st
. On each of those items we run ord()
, which converts the character x
into a integer representing the Unicode code point, e.g. 'T' == 84
. This number we then .format
into (padded) binary. 08
here means that the number is to be formatted to be 8 digits long, padded by 0
from the left. b
then indicates that it is to be in binary, or base 2. The number has to be padded or there would be no leading zeroes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With