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. Для соседних задач пригодятся эти разборы:
- Как заменить букву или символ в строке Python: replace и срезы
- Как проверить первый символ строки в Python: индекс 0, startswith и пустая строка
- Какой тип данных возвращает input() в Python: строка, числа и преобразование
- Face recognition Python: как установить и что делать при ошибках dlib