Python алфавит смещение строки

я пытался, но не могу найти свою ошибку в моем коде.
Мой код должен переключать все алфавитные символы (например, a/aa/A/AA) и ничего не делать с остальными, но когда я запускаю код, он не дает ошибки, но делает то, что я хочу.

Может ли кто-нибудь сказать мне, что я сделал неправильно или забыл?

letter = input("type something")
shift = int(input("type how many shifts"))
if letter in ['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', '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']:
    a = ord(letter) + shift
    b = chr(a)
    print(b)
else: 
    print(letter)

EDIT: thanks for the = = replacement for in! Знает ли кто-то, почему использование более одного символа в письме дает один и тот же шрифт?(Желаемый выход: когда я вставляю abc и 1, я хочу, чтобы он печатал bcd)

3 ответа

  1. Я предполагаю, что вы хотите переместить Буквы, поэтому, если входная буква » a «и shift 3, то выход должен быть «d».

    В этом случае замените

    if letter == ['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', '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']:
    

    с

    if letter in ['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', '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']:
    

    Или еще лучше, как Tempux предложил Вы можете использовать

    if letter.isalpha()
    

    Если вы хотите переместить несколько букв, вам нужно сделать петлю через каждый символ. Попробуйте следующий код для нескольких букв

    letter = input("type something")
    shift = int(input("type how many shifts"))
    s = ""
    for l in letter:
        if l.isalpha():
            a = ord(l) + shift
            s += chr(a)
        else: 
            s += l
    
    print(s)
    
  2. Вы сравниваете письмо со списком, но я думаю, что вы хотите проверить, содержит ли письмо в списке, поэтому вы должны просто заменить ==на in

  3. Судя по всему, я бы сказал, что вы больше ищете что-то вроде этого:

    import string
    text = input("type something> ")
    shift = int(input("enter number of shifts> "))
    for letter in text:
        index = ord(letter) - ord('a') + shift
        print(string.ascii_letters[index % len(string.ascii_letters)])