Курс программирования Python. Цикл While. Поле чудес.

Всем привет, сегодня мы рассмотрим цикл whilе и напишем настоящую игру. Игра «Поле чудес», известная большинству из вас, обладает несложными правилами, основное из которых – игрок открывает по одной букве, пока слово не угадано. В этом уроке мы с вами напишем «Поле чудес», которое реализует это правило.

Поле чудес. Цикл While


Примечание: Примеры из этой и последующей статей тестировались под Win7. Из обнаруженных проблем — в IDLE пример работать не будет, из-за кодировок(пример заточен под запуск Python из консоли Windows и кодировку cp866 соответственно)

В нашей игре пока не будет Леонида Якубовича и «сектор приз на барабане», да и барабана пока не будет(временно), зато будут:

  • цикл While
  • работа с текстовым файлом
  • функция map и анонимные функции
  • работа с кортежами и списками

Начнем с того, что для игры нам понадобится база вопросов и ответов. Формат у этой базы будет такой:
вопрос:ответ,
т.е. вопрос и ответ просто разделены двоеточием. Пример такой базы можно скачать тут.
Для начала считаем всю базу вопросов и ответов из файла:

Далее с помощью функции возвращающей случайное число, определим какой вопрос задать игроку:

*Нижеследующие приключения с кодировками актуальны для ОС Windows, в *nix все должно быть проще.
Инициализируем необходимые переменные:

Запускаем цикл по условию:

Вот как это выглядит на Python:

В программе на Python мы также проверяем, угадано ли слово целиком, и если угадано то флаг slovo_otgadano принимат значение “Истина”, что и вызывает завершение цикла, по причине того, что его условие приняло значение “Ложь”.

Остановимся на некоторых моментах поподробнее:
В нашей программе несколько раз встречается запись вида

Думаю у вас возник вопрос что же это за такая функция map, и что за lambda трется рядом с ней. Так вот функция map(), которая записывается следующим образом:

позволяет применить функцию somefunc() к списку(кортежу, множеству) somelist, и возвращает список результатов применения somefunc() к элементам somelist. Подробнее об этой функции можно прочитать в нашем справочнике по языку Python
Теперь, когда стало совсем непонятно, попробуем разобраться с lambda:
Как вы уже заметили, в нашей программе lambda x: стоит на месте somefunc() в записи функции map(). Так и есть lambda – это анонимные функции, т.е. функции без имени. Основным достоинством лямбда-функций является компактность написанного кода.
Рассмотрим простой пример:
Дан список чисел list, надо получить квадраты всех его элементов: