Python

Как перемешать буквы в слове Python: random.sample и shuffle

Чтобы перемешать буквы в слове на Python, используйте модуль random. Самый короткий вариант — взять случайную перестановку символов через random.sample() и собрать результат обратно в строку через ''.join()

import random

word = "python"
shuffled = "".join(random.sample(word, len(word)))

print(shuffled)

Результат каждый раз может быть разным: yntohp, hotpyn, typhon. Это нормально, потому что буквы перемешиваются случайно

Почему нельзя просто вызвать shuffle для строки

Строки в Python неизменяемые. Это значит, что нельзя поменять буквы внутри строки на месте

Такой код не сработает

import random

word = "python"
random.shuffle(word)

random.shuffle() перемешивает список на месте, а строка списком не является. Поэтому строку нужно сначала превратить в список символов

import random

word = "python"
letters = list(word)
random.shuffle(letters)
shuffled = "".join(letters)

print(shuffled)

Здесь list(word) превращает строку в список букв, shuffle() меняет порядок элементов, а join() собирает список обратно в строку

Вариант через random.sample

random.sample() удобен тем, что не меняет исходные данные, а возвращает новый список выбранных элементов. Если указать размер выборки равным длине слова, получится случайная перестановка всех букв

import random

word = "привет"
letters = random.sample(word, len(word))
result = "".join(letters)

print(result)

Этот способ короче, потому что не нужно вручную создавать список и перемешивать его на месте

Вариант через random.shuffle

shuffle() полезен, когда вы уже работаете со списком

import random

word = "привет"
letters = list(word)

random.shuffle(letters)

result = "".join(letters)
print(result)

Отличие такое

  • random.shuffle() меняет список на месте и ничего полезного не возвращает
  • random.sample() возвращает новый список

Новички часто делают ошибку

letters = list("python")
result = random.shuffle(letters)
print(result)

Вывод будет None, потому что shuffle() не возвращает перемешанный список. Он меняет сам список letters

Как перемешать несколько слов

Если нужно перемешать буквы в каждом слове отдельно, можно написать функцию

import random

def shuffle_word(word):
    return "".join(random.sample(word, len(word)))

words = ["python", "код", "строка"]

for word in words:
    print(word, "->", shuffle_word(word))

Функция делает код понятнее. Если логика понадобится еще раз, вы не будете копировать одни и те же строки

Как не менять короткие слова

Иногда короткие слова лучше оставлять как есть

import random

def shuffle_word(word):
    if len(word) <= 2:
        return word
    return "".join(random.sample(word, len(word)))

print(shuffle_word("я"))
print(shuffle_word("он"))
print(shuffle_word("python"))

Такой подход нужен, если вы перемешиваете текст и не хотите портить одно- и двухбуквенные слова

Как перемешать буквы, сохранив первую и последнюю

Для игр и упражнений иногда нужно перемешать только середину слова, оставив первую и последнюю буквы на месте

import random

def shuffle_middle(word):
    if len(word) <= 3:
        return word

    first = word[0]
    middle = word[1:-1]
    last = word[-1]

    mixed_middle = "".join(random.sample(middle, len(middle)))
    return first + mixed_middle + last

print(shuffle_middle("программирование"))

Здесь используются индексы и срезы: word[0], word[1:-1], word[-1]

Как перемешать каждое слово в предложении

import random

def shuffle_word(word):
    if len(word) <= 3:
        return word
    return word[0] + "".join(random.sample(word[1:-1], len(word[1:-1]))) + word[-1]

text = "python помогает учиться программированию"
words = text.split()
result = " ".join(shuffle_word(word) for word in words)

print(result)

Такой код сначала разбивает предложение на слова через split(), затем обрабатывает каждое слово и собирает предложение обратно через пробел

Как сделать результат повторяемым

Для учебных тестов иногда нужно, чтобы случайный результат повторялся. Тогда используют random.seed()

import random

random.seed(10)

word = "python"
print("".join(random.sample(word, len(word))))

При одинаковом seed результат будет повторяться. Для обычной игры seed чаще не нужен

Мини-практика

Напишите функцию make_task(word), которая возвращает перемешанное слово. Затем выведите пользователю исходное слово и вариант для угадывания

import random

def make_task(word):
    return "".join(random.sample(word, len(word)))

word = "python"
task = make_task(word)

print("Угадайте слово:", task)

После этого добавьте ввод пользователя и проверку ответа

answer = input("Ваш ответ: ")

if answer == word:
    print("Верно")
else:
    print("Попробуйте еще раз")

Частые ошибки

Вызывать random.shuffle прямо для строки

Строка неизменяемая. Сначала превратите ее в список через list(word)

Ожидать результат от shuffle

random.shuffle() возвращает None, потому что меняет список на месте

Забыть join

После перемешивания у вас список букв. Чтобы получить строку, используйте ''.join(letters)

Случайно перемешивать пробелы вместе с буквами

Если передать в sample() целое предложение, перемешаются и пробелы. Для слов обрабатывайте каждое слово отдельно

Что почитать дальше по Python

Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x