Цифровая угадайка
1.92M

Презентация 6

1. Цифровая угадайка

2.

Тема занятия: Создание проекта
«Цифровая угадайка»
Цели занятия:
1) Самостоятельно создать мини
игру «Цифровая угадака»

3.

Описание проекта: программа генерирует случайное число в диапазоне от 1 до
100 и просит пользователя угадать это число.
Если догадка пользователя больше случайного числа, то программа должна
вывести сообщение «Слишком много, попробуйте еще раз». Если догадка меньше
случайного числа, то программа должна вывести сообщение «Слишком мало,
попробуйте еще раз». Если пользователь угадывает число, то программа должна
поздравить его и вывести сообщение «Вы угадали, поздравляем!».

4.

Составляющие проекта:
• Целые числа (тип int);
• Переменные;
• Ввод / вывод данных (функции input() и print());
• Условный оператор (if/elif/else);
• Цикл while;
• Бесконечный цикл;
• Операторы break, continue;
• Работа с модулем random для генерации
случайных чисел.

5.

Чтобы гарантированно угадать задуманное число от 1 до100 потребуется не более 7 попыток.
Оптимальный алгоритм угадывания: положим left = 1 и right = 100. Называем число, равное
middle = (left + right) // 2;
• Если число middle равно задуманному числу, то мы угадали!;
• Если число middle меньше задуманного числа, то положим left = middle + 1 и продолжим
алгоритм;
• Если число middle больше задуманного числа, то положим right = middle - 1 и продолжим
алгоритм.
Поскольку на каждой итерации мы отбрасываем половину чисел, то гарантировано угадаем
задуманное число за величину, равную log2(n) (двоичный логарифм) округленную до целого в
большую сторону. При n=100 получаем 7 попыток.

6.

• Подключите модуль random;
• Сгенерируйте случайное число от 1 до 100;
• Выведите текст приветствия пользователю:
«Добро пожаловать в числовую угадайку».

7.

8.

Пользователь потенциально может ввести неверные данные, например, не число,
или число превышающее 100.
Важно предусмотреть такую возможность, чтобы программа продолжала правильно
работать. Обработка такого рода ситуаций называется защитой от дурака.
Напишите функцию is_valid() в которую передается один строковый аргумент.
Функция возвращает значение True если переданный аргумент является целым
числом от 1 до 100 и False в противном случае.

9.

10.

1. Организуйте цикл, который будет запрашивать у пользователя данные (цикл может
быть бесконечным (while True) или может использовать сигнальную метку с
последующим переключением, после угадывания числа);
2. Запросите у пользователя число от 1 до 100;
3. Проверьте введенные данные с помощью функции is_valid():
• если данные некорректны, выведите текст: «А может быть все-таки введем целое
число от 1 до 100?» и перейдите к следующей итерации основного цикла;
• если данные корректны, преобразуйте их к целому числу для удобства дальнейшей
работы.

11.

12.

Организуйте сравнение введенного числа с загаданным числом:
• Если введенное число меньше загаданного числа, выведите текст:
«Ваше число меньше загаданного, попробуйте еще разок»;
• Если введенное число больше загаданного числа, выведите текст:
«Ваше число больше загаданного, попробуйте еще разок»;
• Если введенное число равно загаданному числу, выведите текст:
«Вы угадали, поздравляем!».
• Выведите прощальное сообщение пользователю: «Спасибо, что играли в
числовую угадайку. Еще увидимся!».

13.

14.

1. Добавьте подсчет попыток, сделанных пользователем. Когда
число отгадано, программа должна показать количество попыток;
2. Добавьте возможность генерации нового числа (повторная игра),
после того, как пользователь угадал число;
3. Добавить возможность указания правой границы для случайного
выбора числа (от 1 до n).

15.

16.

17.

Магический шар 8

18.

Составляющие проекта:
Магический
шар
8
(шар
судьбы) — шуточный способ
предсказывать
будущее.
Программа
должна
просить
пользователя
задать
некий
вопрос,
чтобы
случайным
образом на него ответить.
• Целые числа (тип int);
• Переменные;
• Ввод / вывод данных (функции input() и print());
• Условный оператор (if/elif/else);
• Цикл while;
• Бесконечный цикл;
• Операторы break, continue;
• Работа с модулем random для генерации случайных чисел.

19.

Варианты ответов
Традиционно шар имеет 20
ответов,
которые
можно
разделить на четыре группы.
Положительные
Нерешительно
положительные
Нейтральные
Бесспорно
Мне кажется - да
Пока неясно, попробуй снова Даже не думай
Предрешено
Вероятнее всего
Спроси позже
Мой ответ - нет
Никаких сомнений
Хорошие перспективы
Лучше не рассказывать
По моим данным - нет
Определённо да
Знаки говорят - да
Сейчас нельзя предсказать
Перспективы не очень
хорошие
Можешь быть уверен в
этом
Да
Сконцентрируйся и спроси
опять
Весьма сомнительно
Отрицательные

20.

Заголовок программы
• Подключите модуль random;
• Создайте список answers, содержащий 20 потенциальных
ответов (Бесспорно, Предрешено, и т.д.).

21.

22.

Приветствие пользователя
• Выведите текстовое сообщение: «Привет Мир, я магический
шар, и я знаю ответ на любой твой вопрос.»;
• Уточните как зовут пользователя;
• Выведите слова приветствия, например, «Привет Никита».

23.

24.

Основной цикл программы
1. Организуйте цикл, который будет запрашивать у пользователя данные;
2. Запросите у пользователя вопрос;
3. Выведите случайный ответ с помощью функции choice() передав список answers в качестве аргумента;
4. Уточните у пользователя, хочет ли он задать еще один вопрос, если да, то вернитесь в основной цикл
программы, если нет выведите сообщение «Возвращайся если возникнут вопросы!» и завершите
программу.

25.

26.

Генератор безопасных паролей

27.

Генератор безопасных паролей
Составляющие проекта:
Описание проекта: программа
генерирует заданное количество
паролей и включает в себя
умную
настройку
на
длину
пароля, а также на то, какие
символы
требуется
в
него
включить, а какие исключить.
• Целые числа (тип int);
• Переменные;
• Ввод / вывод данных (функции input() и print());
• Условный оператор (if/elif/else);
• Цикл while;
• Бесконечный цикл;
• Операторы break, continue;
• Работа с модулем random для генерации случайных чисел.

28.

Заголовок программы
1. Подключите модуль random;
2. Создайте строковые константы:
digits: 0123456789;
lowercase_letters: abcdefghijklmnopqrstuvwxyz;
uppercase_letters: ABCDEFGHIJKLMNOPQRSTUVWXYZ;
punctuation: !#$%&*+-=?@^_.
3. Создайте переменную chars = '', которая будет содержать
все символы, которые могут быть в генерируемом пароле.

29.

30.

Считывание
данных
пользовательских
Программа должна запрашивать у пользователя следующую информацию:
1.
2.
3.
4.
5.
6.
7.
Количество паролей для генерации;
Длину одного пароля;
Включать ли цифры 0123456789?
Включать ли прописные буквы ABCDEFGHIJKLMNOPQRSTUVWXYZ?
Включать ли строчные буквы abcdefghijklmnopqrstuvwxyz?
Включать ли символы !#$%&*+-=?@^_?
Исключать ли неоднозначные символы il1Lo0O?

31.

32.

Настройка
паролей
На основании введенной пользователем информации, сформируйте
переменную chars, содержащую все символы, которые могут быть в
генерируемом пароле.
генерируемых

33.

34.

Генерации пароля
Напишите функцию generate_password(), которая принимает два аргумента:
• length: длину пароля;
• chars: алфавит из символов которого состоит пароль;
и возвращает пароль.
Используя цикл for, сгенерируйте необходимое количество паролей.

35.

36.

Шифр Цезаря

37.

Шифр Цезаря (шифр сдвига) —
один из самых простых и
наиболее
широко
известных
методов шифрования.
Шифр Цезаря — это вид шифра
подстановки, в котором каждый
символ
в
открытом
тексте
заменяется
символом,
находящимся
на
некотором
постоянном числе позиций левее
или правее него в алфавите.

38.

Пример
Съешь же ещё этих мягких французских булок, да выпей
чаю.
Фэзыя йз зьи ахлш пвёнлш чугрщцкфнлш дцосн, жг еютзм
ъгб.
Шифрование с использованием
ключа
k=3.
Буква
«Е»
«сдвигается»
на
три
буквы
вперед и становится буквой
«З».
Твердый
знак,
перемещенный на три буквы
вперед, становится буквой «Э»,
буква «Я», перемещенная на
три буквы вперед, становится
буквой «В», и так далее.

39.

Как вы думаете, улучшает ли
многократное
шифрование
стойкость алгоритма Цезаря?
Используемое преобразование в шифре Цезаря обычно
обозначают как ROT N,
где N — сдвиг, ROT — сокращение от слова ROTATE, в данном
случае «циклический сдвиг».
Какой из алгоритмов ROT N
можно отменить, применив тот
же алгоритм? (Одни и те же
действия
могут
быть
использованы для кодирования и
декодирования).
Например, обозначение ROT 2 обозначает сдвиг на 2 позиции, то
есть, «а» превращается в «в», «б» в «г», и так далее, и в конце «ю»
превращается в «а» а «я» — в «б».

40.

Шифр Цезаря
Описание проекта: требуется написать программу, способную шифровать и дешифровать текст в
соответствии с алгоритмом Цезаря. Она должна запрашивать у пользователя следующие данные:
• направление: шифрование или дешифрование;
• язык алфавита: русский или английский;
• шаг сдвига (со сдвигом вправо).
Примечание1: Считайте, что в русском языке 32 буквы (буква ё отсутствует).
Примечание 2. Неалфавитные символы — знаки препинания, пробелы, цифры — не меняются.
Примечание 3. Сохраните регистр символов. Например, текст: "Умом Россию не понять" при сдвиге
на одну позицию вправо будет преобразован в: "Фнпн Спттйя ож рпоауэ"

41.

1) Задать четыре вопроса пользователю:
• Шифровать или дешифровать;
• Выбор языка;
• Шаг шифра;
• Текст, который будет шифроваться.
2) Если пользователь ввел что-то не корректное, сказать,
что он ввел не правильное значение и попросить его
повторено ввести значение

42.

43.

Создать функцию caesar(), которая принимает 4 агрумента:
• Шифровать или дешифровать;
• Выбор языка;
• Шаг шифра;
• Текст, который будет шифроваться.
Записать 4 словаря с буквами Русского и Английского алфавита
(1 заглавный, 1 строчный)

44.

45.

• Создать внутри функции цикл for(). Количество итераций равно
длине строки text.
• В зависимости от выбранного языка создать локальные
переменные внутри цикла с количеством букв в алфавите(алфавит
в строчном виде и в заглавном виде).

46.

47.

• Если text[i] является буквой, то находим место(индекс)
символа text[i] в словаре upp_alphabet либо low_alphabet.

48.

49.

Сравниваем, что ввел пользователь дешифровать или шифровать.
Если дешифровать, то:
• Находим индекс для измененного символа;
• Новый индекс = Старый индекс - Шаг % Длина алфавита.
Если шифровать, то:
• Находим индекс для измененного символа;
• Новый индекс = Старый индекс + Шаг % Длина алфавита.

50.

51.

Выведем изменений символ по индексу.
Если text[i] не является буквой, то вывести этот символ без
изменений.

52.

53.

Вызываем функцию, передавая в аргументы четыре значения,
которые мы спрашивали вначале кода у пользователя.

54.

55.

56.

Зашифруйте текст «To be, or not to be, that is the question!»
алгоритмом Цезаря с сдвигом вправо на 17 символов

57.

Текст «Шсъцхр щмчжмщ йшм, нмтзж йшм лхшщзщг.» был
получен в результате шифрования алгоритмом Цезаря с
сдвигом вправо на 7 символов. Расшифруйте данный текст.

58.

Текст
«Sgd fqzrr hr zkvzxr fqddmdq nm sgd nsgdq rhcd ne sgd edmbd.»
был получен в результате шифрования алгоритмом Цезаря со
сдвигом вправо на 25 символов. Расшифруйте данный текст.

59.

Угадайка слов

60.

Описание проекта: программа загадывает слово, а пользователь должен его
угадать. Изначально все буквы слова неизвестны. Также рисуется виселица с петлей.
Пользователь предлагает букву, которая может входить в это слово. Если такая буква
есть в слове, то программа ставит букву столько раз, сколько она встречается в
слове.
Если такой буквы нет, к виселице добавляется круг в петле, изображающий голову.
Пользователь продолжает отгадывать буквы до тех пор, пока не отгадает всё слово.
За каждую неудачную попытку добавляется еще одна часть туловища висельника
(обычно их 6: голова, туловище, 2 руки и 2 ноги.

61.

Составляющие проекта:
• Целые числа (тип int);
• Переменные;
• Ввод / вывод данных (функции input() и print());
• Условный оператор (if/elif/else);
• Цикл while;
• Бесконечный цикл;
• Операторы break, continue;
• Создание пользовательских функций;
• Списочные выражения;
• Работа с модулем random для генерации случайных чисел.

62.

Заголовок программы
• Подключите модуль random;
• Создайте глобальный список word_list, содержащий слова, которые
будут использоваться в игре.

63.

64.

Функция,
случайное слово
возвращающая
Напишите функцию get_word() которая возвращает случайное слово из
списка word_list в верхнем регистре.

65.

66.

Функция,
возвращающая
текущее состояние
Функция display_hangman() принимает один аргумент
tries – количество попыток угадывания слова – и возвращает текущее
состояние игры в графическом виде:
• значение tries = 6 соответствует начальному положению, пустая
виселица;
• значение tries = 0 соответствует конечному положению, то есть
проигрышу и полностью нарисованному телу повешенного.

67.

68.

69.

Функция play()
Напишите функцию play(), в которой будет осуществляться основная
логика игры.
Функция play() принимает в качестве аргумента слово word,
сгенерированное функцией get_word().

70.

71.

Функция
play()
начале должна
в
• отобразить текст «Давайте играть в угадайку слов!»;
• отобразить текущее состояние игры, распечатав результат вызова функции
display_hangman() с начальным количеством допустимых промахов tries = 6;
• отобразить начальное слово word_completion в виде строки с символом _ на каждую
букву задуманного слова;
1. Необходимо обрабатывать ввод букв или слова целиком. Предусмотрите защиту от
дурака, на случай если пользователь ввел символ, не являющийся буквой;
2. Если пользователь вводит уже названную букву или слово, то необходимо ему об этом
сообщить, и не засчитывать попытку;
3. Если пользователь угадал букву, то требуется заменить все символы _
соответствующие этой букве;
4. Если пользователь угадал слово целиком, то следует его поздравить и вывести текст
«Поздравляем, вы угадали слово! Вы победили!»;
5. Если пользователь исчерпал все свои попытки и не угадал слово, следует вывести
загаданное слово
самом
English     Русский Правила