замена букв в слове

меняем случайную букву в слове или в наборе слов
 на номер буквы  +1


import random

# Алфавиты
CYRILLIC_LOWER = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'

def shift_cyrillic_letter(letter: str) -> str:
    """Возвращает следующую букву в кириллическом алфавите."""
    if letter in CYRILLIC_LOWER:
        idx = CYRILLIC_LOWER.find(letter)
        return CYRILLIC_LOWER[(idx + 1) % len(CYRILLIC_LOWER)]
    elif letter in CYRILLIC_UPPER:
        idx = CYRILLIC_UPPER.find(letter)
        return CYRILLIC_UPPER[(idx + 1) % len(CYRILLIC_UPPER)]
    else:
        return letter

def replace_one_random_letter(word: str) -> str:
    """Заменяет одну случайную букву в слове."""
    if not word:
        return word
    indices = [i for i, ch in enumerate(word) if ch.isalpha()]
    if not indices:
        return word
    idx = random.choice(indices)
    return word[:idx] + shift_cyrillic_letter(word[idx]) + word[idx+1:]

def replace_multiple(word: str, n: int = 30) -> list:
    """Возвращает список слов после n случайных замен."""
    result = [word]
    current = word
    for _ in range(n):
        current = replace_one_random_letter(current)
        result.append(current)
    return result

# Пример использования
if __name__ == "__main__":
    original_word = "проверка"
    transformed = replace_multiple(original_word, 30)

    print(f"Оригинал: {original_word}")
    print("Список слов после каждой замены:")
    for i, w in enumerate(transformed):
        print(f"{i:02d}: {w}")




Оригинал: проверка новая
Список слов после каждой замены:
00: проверка новая
01: прогерка новая
02: прогерка новаа
03: ррогерка новаа
04: ррогёрка новаа
05: ррогёска новаа
06: ррогёска ногаа
07: ррогёска ногаб
08: ррогёскб ногаб
09: ррогёткб ногаб
10: ррогёткб ногбб
11: ррогёткб нпгбб
12: ррогётлб нпгбб
13: ррогёулб нпгбб
14: ррогёулб нргбб
15: ррогёулб нргвб
16: ррогёулб нргвв
17: ррогёулб нрггв
18: ррогёумб нрггв
19: ррогжумб нрггв
20: ррогжумб нсггв
21: ррогжумб нтггв
22: ррогзумб нтггв
23: ррпгзумб нтггв
24: ррпгзумб нуггв
25: српгзумб нуггв
26: српгзумб нуггг
27: срргзумб нуггг
28: срргзунб нуггг
29: срргзунб нугдг
30: срргзунб нуддг


Рецензии