Написание игры Анаграммы
В игре «Анаграммы» применяются многие из тех понятий программирования, которые мы успели пройти.Эта игра - воссоздание типичной головоломки на перестановку букв, одной из тех, какие в прошлом веке можно было встретить в воскресных газетах (тех самых, которые публика читала, пока не появился Интернет). Компьютер случайным образом выбирает из группы слов одно, переставляет его буквы тоже в случайном порядке и предъявляет игроку. Задача человека - восстановить исходное слово.
Настройка программы
После нескольких начальных комментариев загружается модуль random. Он нужен для работы со случайными числами.
# АнаrраммыCWordJumЬle)
#
# Компьютер выбирает какое-пибо слово и хаотически переставляет его буквы
# Задача иrрока - восстановить исходное слово
import random
После этого создаем кортеж, который будет содержать список слов. Заметьте, что название переменной WORDS набрано прописными буквами: далее в программе она рассматривается как константа (постоянное значение, не меняется в отличии от переменной).
#создадим последовательность слов. из которых компьютер будет выбирать WORDS =("питон". "анаграмма". "простая". "сложная","ответ","подстаканник")
Вслед за тем, чтобы выбрать из WORDS случайное слово, я применяем функцию random.choice():
# случайным образом выберем из последовательности одно слово word=random.choice(WORDS)
Это новая для вас функция, но по сути она очень проста. Интерпретатор берет какую-либо последовательность и извлекает из нее случайный элемент. После того как слово выбрано, оно помещается в переменную word. Это и будет слово, которое игроку придется отгадать. Наконец, значение word копируется в переменную correct. С ней мы позже сравним версию игрока, чтобы увидеть, прав он или нет:
Как сформировать анаграмму
Следующий фрагмент кода - наиболее интересная часть программы как по замыслу,
так и по технической реализации. Здесь мы будем переставлять буквы в исходном,
случайно выбранном слове. Прежде чем начать кодировать, я продумал эту часть программы и записал на псевдокоде. Вот в первом приближении тот алгоритм, который создает анаграмму
из исходного слова:
создать пустую анаграмму
до тех пор пока исходное слово содержит хотя бы одну букву:
изъять из слова случайную букву
присоединить эту букву к анаграмме
По замыслу здесь все хорошо, но следует тщательнее поработать над семантикой.
Поскольку строки неизменяемы, изъять случайную букву из слова, строго
говоря, нельзя. Зато можно создать новую строку, в которой не будет этой буквы.
Точно так же нельзя присоединить букву к строке-анаграмме, но можно создать
новую строку, которая будет представлять собой конкатенацию анаграммы (в ее
текущем виде) и изъятой буквы.
Создание пустой строки для анаграммы
Начало алгоритма реализуется очень просто:
# создадим анаграмму выбранного слова. в которой буквы будут расставлены хаотично jumble='"'
Программа создает пустую строку и делает ее значением переменной jumble. Эта
переменная в конце концов, после всех преобразований будет ссылаться на анаграмму.
Настройка цикла
За создание анаграммы отвечает цикл while. Его условие, как видите, весьма тривиально:
while word:
Цикл организован таким образом, чтобы исполнение тела цикла продолжалосьдо тех пор, пока переменная word не окажется приравненной к пустой строке.Все верно: при каждом следующем исполнении цикла компьютер создает очереднуюверсию исходной строки - за вычетом одной из букв - и делает ее значениемпеременной word. В конце концов word окажется пустой строкой и цикл прервется.
Выбор случайной позиции в слове
Первая строка в теле цикла генерирует случайную позицию в слове, исходя из его длины:
position =random.randrange(len(word))
Буква word[position] и будет той буквой, которую мы «изымем~ из строки wordи присоединим к строке jumble.
Новая версия jumble
Следующая строка кода призвана создать обновленный вариант строки jumble.
К прежней строке присоединяется буква word[position].
jumble +=word[position]
Новая версия word
Далее в коде цикла:
word = word[:position] + word[(position + 1):]
создан обновленный вариант строки word, в которой теперь уже не будет содержаться
буква с индексом position. С помощью срезов компьютер извлекает из word две подстроки.
Первый срез - word[:position] - это все буквы с начала слова до word [position],
не включая ее. Второйcpeз - word[(position + 1):] - этовсебуквы oтword[position],
также не включая, и до конца слова. Конкатенацию этих двух строк мы делаем значением
переменной word, которая теперь равна самой себе за вычетом одной буквы -
word[position].
Программаприветствуетигрока
После того как буквы в слове будут переставлены, надо поприветствовать участника игры, объяснить ему правила и показать анаграмму, исходный вид которойон будет восстанавливать:
# начало игры print ("""Добро пожаловать в игру 'Анаграммы'!Надо переставить буквы так. чтобы получилось осмысленное слово.(Для выхода нажмите Enter. не вводя своей версии.)""") print ("Boт анаграмма: ",jumble)