¿Cómo puedo acortar este código de cifrado de sustitución?

Pytm:

La cadena de entrada constará de sólo caracteres alfabéticos. La función debe devolver una cadena en la que todos los caracteres se han movido "por" dos puntos en el alfabeto.

Por ejemplo:

  • "A" se convertirá en "c"
  • "Z" se convertirá en "b"

Escribí este código, pero creo que es demasiado largo. ¿Cómo puedo hacer que sea más corto y mejor?

def encrypt_message(strings: str) -> str:
    our_al = ["a", "b", "c", "d", "e", "f", "g", "h", "i", 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
              'v', 'w', 'x', 'y', 'z']
    new_s = ""
    for character in strings:
        index = our_al.index(character)
        if index <= 23:
            index += 2
            new_s += our_al[index]
        elif index == 24:
            new_s += our_al[0]
        elif index == 25:
            new_s += our_al[1]

    return new_s


print(encrypt_message("abc"))
print(encrypt_message("xyz"))
print(encrypt_message(""))
schwobaseggl:

Algunas utilidades serán beneficiosas. Si se utiliza esta función repetidamente que no siempre se desea iterar los caracteres para encontrar el índice, por lo tanto, las operaciones de búsqueda dict.

from string import ascii_lowercase as al

index = {c: i for i, c in enumerate(al)}

def encrypt_message(s: str) -> str:
    return ''.join(al[(index[c] + 2) % 26] for c in s)

>>> encrypt_message('xyz')
'zab'

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=365097&siteId=1
Recomendado
Clasificación