Странное поведение программы)

Vutmuk

Новичок
Пользователь
Май 21, 2020
7
0
1
Короче очередная задача на степике)
Шифр Цезаря заключается в замене каждого символа входной строки на символ, находящийся на несколько позиций левее или правее его в алфавите.
Для всех символов сдвиг один и тот же. Сдвиг циклический, т.е. если к последнему символу алфавита применить единичный сдвиг, то он заменится на первый символ, и наоборот.
Напишите программу, которая шифрует текст шифром Цезаря.
Используемый алфавит -− пробел и малые символы латинского алфавита: ' abcdefghijklmnopqrstuvwxyz'
Формат ввода:
На первой строке указывается используемый сдвиг шифрования: целое число. Положительное число соответствует сдвигу вправо. На второй строке указывается непустая фраза для шифрования. Ведущие и завершающие пробелы не учитывать.
Формат вывода:
Единственная строка, в которой записана фраза: Result: "..." , где вместо многоточия внутри кавычек записана зашифрованная последовательность.

И вот товарищ выкладывает решение (я добавил только метод strip()):
Код:
def caesar(n:int, str1:str):
    s =" abcdefghijklmnopqrstuvwxyz"
    s = [i for i in s]
    str1 = str1.strip()
    sett = {i for i in str1}
    for i in sett:
        str1=str1.replace(i, s[(s.index(i)+n)%len(s)])
    print(f'Result: "{str1}"')
caesar(int(input()),input())

Если запускать его несколько раз подряд с вводными -2 и az то результат будет разным! то zx то xx Как это можно объяснить?
 
Последнее редактирование:

Vutmuk

Новичок
Пользователь
Май 21, 2020
7
0
1
Мне уже объяснили) в цикле for i in sett: идет постоянная перезапись строки, и уже замененные элементы могут повторно меняться. А в sett элементы каждый раз располагаются в случайном порядке. От этого такая петрушка видимо)
 

Форум IT Специалистов