⇤ ← Версия 1 от 2022-09-25 00:32:01
5933
Комментарий:
|
← Версия 2 от 2022-09-25 01:29:49 ⇥
11073
|
Удаления помечены так. | Добавления помечены так. |
Строка 35: | Строка 35: |
{{{#!highlight Python | {{{#!highlight py3 |
Строка 55: | Строка 55: |
== Сравнения и тип данных bool == Многие объекты можно сравнивать. Например, числа: {{{#!highlight pycon >>> 4 < 5 True >>> a, b = 123, 456 // 3 >>> a >= b False >>> a + 25 == b - 4 True >>> a != b True }}} В действительности `True` и `False` — это такие объекты (как и ''всё'' в python, зачем плодить лишние сущности?), типа `bool` * Операции сравнения — ''такие же'', как `+` или `*`, только более низкоприоритетные: сначала вычисляются арифметические выражения, затем сравнения (опять обходимся без лишних сущностей!) * Выражения со сравнениями ничем не отличаются от других выражений: результат их вычисления — объект python (обычно типа `bool`, разве что в этом разница) * Результаты сравнения можно связывать именами: {{{#!highlight pycon >>> res = a < b >>> res True >>> print(res) True >>> type(res) <class 'bool'> >>> type(False) <class 'bool'> }}} == Условный оператор (простая форма) == * Просто условный оператор: {{{#!python if условие: оператор-1 оператор-2 … }}} * Понятие блока с отступом * Клауза `else` {{{#!python if условие: операторы для True … else: операторы для False … }}} Пример про `a>b` vs `a⩽b` '''TODO''' Ещё примеры. === Вложенные условные операторы === Внутри блока с отступом могут встречаться условные операторы: {{{#!python #!/usr/bin/env python3 a = int(input()) b = int(input()) if b != 0: if a / b > 10: print(a, "раз в десять больше", b) else: print(a, "не сильно больше или даже меньше", b) else: if a > b: print(a, "бесконечно больше", b) print("потому что любое положительное число бесконечно больше нуля") else: if a < b: print(a, "бесконечно меньше", b) print("потому что любое отрицательное число бесконечно меньше нуля") else: print(a, "и", b, "— нули") }}} * Альтернативные условия: проблема «ступенек» на приведённом примере `>` / `<` или `==` * Вариант с `elif:`: {{{#!highlight py3 … else: if a > b: print(a, "бесконечно больше", b) print("потому что любое положительное число бесконечно больше нуля") elif a < b: print(a, "бесконечно меньше", b) print("потому что любое отрицательное число бесконечно меньше нуля") else: print(a, "и", b, "— нули") }}} * Общий вид оператора `if:` с альтернативными условиями: {{{#!python if условие-0: операторы для условия-0 elif условие-1: операторы для условия-1 … elif условие-N: операторы для условия-N … else: операторы для ситуации, когда ни одно условие не выполнено }}} * Порядок вычисления альтернативных условий == Д/З == * Самую малость пощёлкать [[https://pythontutor.ru/lessons/ifelse/|Второе занятие учебника]] * Если вы умеете в алгебру логики — дощёлкать до конца! * Если не умеете — не беда, на следующем занятии научимся * Решить первые 7 задач из второго занятия — до «Ход ладьи» ''включительно'' * Если вы не умеет в алгебру логики — придётся использовать вложенные `if`-ы и кое-где повторять один и тот же `print()` * Прислать семь файлов с рпешениями ''в виде семи приложений к одному письму'' по адресу <<MailTo(uneexlectures AT cs DOT msu DOT ru)>> * Имена файлов: от `prog_2_1.py` до `prog_2_7.py` * В поле Subject '''должно быть''' «слово» !PhilosoPython2022 (другие слова тоже можно ☺) |
Прямое построение алгоритма, сравнение и ветвления
Превращение «формулы» в алгоритм
На этом этапе речь идёт о задачах, в которых не нужно повторять действия.
- Определиться с постановкой задачи. Что дано, что требуется найти, каковы дополнительные требования?
- Решить задачу вручную (это можно сделать за адекватное число шагов)
Разложить решение на отдельные действия с какими-либо объектами
Записать действия на наиболее знакомом вам языке
- Скорее всего — по-русски!
Не записывать можно только при условии, что вы способны наизусть повторить эти действия слово-в-слово
Подумать над моделированием данных реального мира с помощью типов данных Python
- Что нужно ввести, что нужно вывести?
- Какие промежуточные данные потребуется вычислить?
Превратить придуманные вами действия в последовательность порождения и преобразования данных
- Какое действие за каким следует
Попытаться однозначно перевести каждое действие на Python
Обратите внимание на то, что лишних слов в формулировке не бывает!
- Про каждое слово в вашей формулировке задайте себе вопрос «а что оно значит» — наверняка вам придётся отражать это в программе
На примере задачи с электронными часами
Дано число n. С начала суток прошло n минут. Определите, сколько часов и минут будут показывать электронные часы в этот момент. Программа должна вывести два числа: количество часов (от 0 до 23) и количество минут (от 0 до 59). Учтите, что число n может быть больше, чем количество минут в сутках.
- Дано произвольное натуральное число — количество минут, прошедших с полуночи некоторого дня. Возможно, это было не сегодня, а один или несколько дней назад. Нужно узнать, который час и сколько минут показывают часы. Формат часов — 24-часовой.
Отбрасываем из n все полные дни. Остаются минуты, прошедшие за сегодня. Считаем в них количество полных часов, а остаток — минуты.
- Действия:
Количество минут за сегодня — остаток от деления n на количество минут в сутках
- Количество часов за сегодня — целая часть от деления количества минут за сегодня на 60, а минуты — остаток от деления того же числа на 60
Все числа целые, надо использовать целочисленное деление. Нам понадобится промежуточное значение — количество минут за сегодня, назовём его t
- Решение на русском (более формализованные действия):
Вводим n
t — остаток от деления n на 60 * 24 (минут в сутках)
h часов — целая часть от деления t на 60
m минут — остаток от деления t на 60
Выводим через пробел n и m
- Решение на Python:
Замечания:
- ⇒ 1
Не бывает «единственно правильного решения»: критерий правильности не в самой программе, а в том, что на всех входных данных она должна давать правильный ответ
- Например, вот это тоже решение:
- И это тоже ☺ (не пытайтесь разобраться, это может быть вредно для здоровья☺):
1 (lambda t: print(t // 60, t % 60))(int(input())%1440)
- ⇒ 2
Среди всех правильных решений предпочтительно то, которое легче понять!
Сравнения и тип данных bool
Многие объекты можно сравнивать. Например, числа:
В действительности True и False — это такие объекты (как и всё в python, зачем плодить лишние сущности?), типа bool
Операции сравнения — такие же, как + или *, только более низкоприоритетные: сначала вычисляются арифметические выражения, затем сравнения (опять обходимся без лишних сущностей!)
Выражения со сравнениями ничем не отличаются от других выражений: результат их вычисления — объект python (обычно типа bool, разве что в этом разница)
- Результаты сравнения можно связывать именами:
Условный оператор (простая форма)
- Просто условный оператор:
- Понятие блока с отступом
Клауза else
Пример про a>b vs a⩽b
TODO Ещё примеры.
Вложенные условные операторы
Внутри блока с отступом могут встречаться условные операторы:
1 #!/usr/bin/env python3
2 a = int(input())
3 b = int(input())
4 if b != 0:
5 if a / b > 10:
6 print(a, "раз в десять больше", b)
7 else:
8 print(a, "не сильно больше или даже меньше", b)
9 else:
10 if a > b:
11 print(a, "бесконечно больше", b)
12 print("потому что любое положительное число бесконечно больше нуля")
13 else:
14 if a < b:
15 print(a, "бесконечно меньше", b)
16 print("потому что любое отрицательное число бесконечно меньше нуля")
17 else:
18 print(a, "и", b, "— нули")
Альтернативные условия: проблема «ступенек» на приведённом примере > / < или ==
Вариант с elif::
Общий вид оператора if: с альтернативными условиями:
- Порядок вычисления альтернативных условий
Д/З
Самую малость пощёлкать Второе занятие учебника
- Если вы умеете в алгебру логики — дощёлкать до конца!
- Если не умеете — не беда, на следующем занятии научимся
Решить первые 7 задач из второго занятия — до «Ход ладьи» включительно
Если вы не умеет в алгебру логики — придётся использовать вложенные if-ы и кое-где повторять один и тот же print()
Прислать семь файлов с рпешениями в виде семи приложений к одному письму по адресу <uneexlectures AT cs DOT msu DOT ru>
Имена файлов: от prog_2_1.py до prog_2_7.py
В поле Subject должно быть «слово» PhilosoPython2022 (другие слова тоже можно ☺)