0

Better way?

Hello to everyone! What do you think about this code? Is there a better way to do this? dict = {"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} palabra = input("Palabra: ").lower() palabraCifrada ="" for letra in palabra: if letra in dict: palabraCifrada += str(dict[letra]) else: palabraCifrada += letra print(palabraCifrada)

5th Feb 2021, 4:06 PM
Lucio Fontana
Lucio Fontana - avatar
2 ответов
+ 2
You can use comprehension to build the dictionary so you don't need to write it manually (helps reduce typo too). And use string::replace method to replace each character that exists in the dictionary by the dictionary item value, respectively. And as much as possible, avoid using class name as variable (`d` rather than `dict` for example).
5th Feb 2021, 4:41 PM
Ipang
+ 1
# Lucio Fontana what about: min = ord('a')-1 print(''.join(str(ord(chr)-min) if 'a' <= chr <= 'z' else chr for chr in palabra)) # avoid dict use/declaration # use only palabra lowered user input """ however, this produce exactly same output as yours... but this is an one way encoding: you cannot decode output, unless you pass letters with 2 digits padded values and prefix original digits... """
5th Feb 2021, 4:41 PM
visph
visph - avatar