71
Комментарий:
|
3688
|
Удаления помечены так. | Добавления помечены так. |
Строка 1: | Строка 1: |
== Логические выражения и цикл == '''TODO''' |
= Логические выражения и цикл = Разбор задачи «[[../Homework_TriangleCheck|Неравенство треугольника]]» * С вложенным `if` * С гипотезой о результате Кстати, о максимуме из трёх: {{{#!python M = M if (M := a if a > b else b) > c else c }}} == Логические выражения == * Вложенные условия → операция `and` * Любое условие из двух → `or` * Отрицание условия → `not` |||||| '''or''' || |||||| '''and''' || || '''A''' || '''B''' || '''A''' or '''B''' || || '''A''' || '''B''' || '''A''' and '''B''' || || False || False || False || || False || False || False || || False || True || True || || False || True || False || || True || False || True || || True || False || False || || True || True || True || || True || True || True || * Ленивые вычисления * Перепишем неравенство треугольника * «проверка на __не__-треугольник» (просто not от исходного выражения!) * правило раскрытия скобок и `ǸOT` (или наоборот ☺) далее — булева алгебра (кажется, была в школе)… [[LecturesCMC/PythonIntro2021/02_Conditionals#A.2BBBAEOwQzBDUEMQRABDA_.2BBDsEPgQzBDgEOgQ4-|вся правда о логических выражениях в Python]] == Цикл == Для записи алгоритма требуются (грубое предположение): 1. переменные 1. условные операторы 1. циклы Простой `while`: {{{#!python while условие: оператор1 оператор2 … }}} * Пример: цикл со счётчиком * Каноническая схема цикла: 0.#0 Инициализация 1. Проверка условия 1. Тело 1. Изменение условия * Пhимер: таблица умножения на 6 * Цикл по вводу * Поиск первого: флаговая переменная, `break` и `else` * Пропуск фрагмента кода: `continue` == Вложенные циклы == Принцип: внутри цикла может быть что угодно. Если там вложенный цикл. он начнётся, отработает и закончится. * Пример: Цикл по вводу + цикл внутри * Пример: Таблица умножения от 2 до 6 * Эффект от нарушения канонической схемы == Д/З == 1.#0 Прощёлкать: * [[https://greenteapress.com/thinkpython2/html/thinkpython2008.html|Главу в учебнике «Think Python»]] * [[https://pythontutor.ru/lessons/while/|Занятие в Pythontutor]] * Работу функции `print()`. Чем отличается 1. {{{#!python print(a, "#", b) print(a, "ЫЫЫ", b) }}} 1. от {{{#!python print(a, "#", b, sep="!") print(a, "ЫЫЫ", c, sep="---") }}} 1. и от {{{#!python print(a, "#", b, end="...") print(a, "ЫЫЫ", b) }}} 1. <<EJCMC(165, ManualLogarithm, Логарифм)>> 1. <<EJCMC(165, SquareIntersect, Площадь пересечения)>> 1. <<EJCMC(165, MinSin, Наименьший синус)>> 1. <<EJCMC(165, MultTable, Таблица умножения)>> |
Логические выражения и цикл
Разбор задачи «Неравенство треугольника»
С вложенным if
- С гипотезой о результате
Кстати, о максимуме из трёх:
1 M = M if (M := a if a > b else b) > c else c
Логические выражения
Вложенные условия → операция and
Любое условие из двух → or
Отрицание условия → not
or |
|
and |
||||
A |
B |
A or B |
|
A |
B |
A and B |
False |
False |
False |
|
False |
False |
False |
False |
True |
True |
|
False |
True |
False |
True |
False |
True |
|
True |
False |
False |
True |
True |
True |
|
True |
True |
True |
- Ленивые вычисления
- Перепишем неравенство треугольника
«проверка на не-треугольник» (просто not от исходного выражения!)
правило раскрытия скобок и ǸOT (или наоборот ☺)
далее — булева алгебра (кажется, была в школе)…
вся правда о логических выражениях в Python
Цикл
Для записи алгоритма требуются (грубое предположение):
- переменные
- условные операторы
- циклы
Простой while:
- Пример: цикл со счётчиком
- Каноническая схема цикла:
- Инициализация
- Проверка условия
- Тело
- Изменение условия
- Пhимер: таблица умножения на 6
- Цикл по вводу
Поиск первого: флаговая переменная, break и else
Пропуск фрагмента кода: continue
Вложенные циклы
Принцип: внутри цикла может быть что угодно. Если там вложенный цикл. он начнётся, отработает и закончится.
- Пример: Цикл по вводу + цикл внутри
- Пример: Таблица умножения от 2 до 6
- Эффект от нарушения канонической схемы
Д/З
- Прощёлкать:
Работу функции print(). Чем отличается
от
и от
EJudge: ManualLogarithm 'Логарифм'
Ввести положительное вещественное число Y: $$ 1/100 <= Y <= 1000 $$. Известно, что $$ 10^x=Y $$. Вычислить $$ x $$ с точностью $$ +-10^-7 $$, не используя модуль math и/или иные функции, вычисляющие логарифм. Ответом является любое число, которое отличается от правильного значения не больше, чем на $$ 10^-7 $$. Пользоваться операцией возведения в степень можно.
234.567
2.37026698989898
EJudge: SquareIntersect 'Площадь пересечения'
В столбик вводятся 2×N целых не равных нулю чисел — координаты левых верхних вершин квадратов размером 1000×1000 (N>0). Последовательность заканчивается двумя нулями. Вывести площадь пересечения всех этих квадратов — области, которая входит в каждый из них. Оси координат направлены вправо и вниз — это стандартная практика для компьютерных изображений.
-10 10 100 100 -300 -200 0 0
420000
EJudge: MinSin 'Наименьший синус'
Ввести в столбик 2*N целых чисел, не равных нулю. Назовём меньшее число в очередной введённой паре A, а большее — B. Для чисел A, A+1, …, B-1, B выбирается такое, значение синуса на котором минимально. Вывести N таких чисел. A может быть больше, меньше или равно B (в последнем случае в наборе всего одно это число). Ввод заканчивается двумя нулями.
1 10 25 9 -200 300 1000 -25 0 0
5 11 11 344
EJudge: MultTable 'Таблица умножения'
Ввести два натуральных числа, M и N. Вывести таблицу умножения от 1×1 до M*N в приведённом ниже формате (по колонкам, но без учёта количества разрядов в числе).
4 5
1 * 1 = 1; 2 * 1 = 2; 3 * 1 = 3; 4 * 1 = 4; 5 * 1 = 5 1 * 2 = 2; 2 * 2 = 4; 3 * 2 = 6; 4 * 2 = 8; 5 * 2 = 10 1 * 3 = 3; 2 * 3 = 6; 3 * 3 = 9; 4 * 3 = 12; 5 * 3 = 15 1 * 4 = 4; 2 * 4 = 8; 3 * 4 = 12; 4 * 4 = 16; 5 * 4 = 20