Различия между версиями 1 и 14 (по 13 версиям)
Версия 1 от 2021-09-30 13:05:03
Размер: 71
Редактор: FrBrGeorge
Комментарий:
Версия 14 от 2021-10-02 22:36:32
Размер: 3688
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 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

Цикл

Для записи алгоритма требуются (грубое предположение):

  1. переменные
  2. условные операторы
  3. циклы

Простой while:

   1 while условие:
   2     оператор1
   3     оператор2
   4 
  • Пример: цикл со счётчиком
  • Каноническая схема цикла:
    1. Инициализация
    2. Проверка условия
    3. Тело
    4. Изменение условия
  • Пhимер: таблица умножения на 6
  • Цикл по вводу
  • Поиск первого: флаговая переменная, break и else

  • Пропуск фрагмента кода: continue

Вложенные циклы

Принцип: внутри цикла может быть что угодно. Если там вложенный цикл. он начнётся, отработает и закончится.

  • Пример: Цикл по вводу + цикл внутри
  • Пример: Таблица умножения от 2 до 6
    • Эффект от нарушения канонической схемы

Д/З

  1. Прощёлкать:
    • Главу в учебнике «Think Python»

    • Занятие в Pythontutor

    • Работу функции print(). Чем отличается

      1.    1    print(a, "#", b)
           2    print(a, "ЫЫЫ", b)
        
      2. от

           1    print(a, "#", b, sep="!")
           2    print(a, "ЫЫЫ", c, sep="---")
        
      3. и от

           1    print(a, "#", b, end="...")
           2    print(a, "ЫЫЫ", b)
        
  2. EJudge: ManualLogarithm 'Логарифм'

    Ввести положительное вещественное число Y: $$ 1/100 <= Y <= 1000 $$. Известно, что $$ 10^x=Y $$. Вычислить $$ x $$ с точностью $$ +-10^-7 $$, не используя модуль math и/или иные функции, вычисляющие логарифм. Ответом является любое число, которое отличается от правильного значения не больше, чем на $$ 10^-7 $$. Пользоваться операцией возведения в степень можно.

    Input:

    234.567
    Output:

    2.37026698989898
  3. EJudge: SquareIntersect 'Площадь пересечения'

    В столбик вводятся 2×N целых не равных нулю чисел — координаты левых верхних вершин квадратов размером 1000×1000 (N>0). Последовательность заканчивается двумя нулями. Вывести площадь пересечения всех этих квадратов — области, которая входит в каждый из них. Оси координат направлены вправо и вниз — это стандартная практика для компьютерных изображений.

    Input:

    -10
    10
    100
    100
    -300
    -200
    0
    0
    Output:

    420000
  4. EJudge: MinSin 'Наименьший синус'

    Ввести в столбик 2*N целых чисел, не равных нулю. Назовём меньшее число в очередной введённой паре A, а большее — B. Для чисел A, A+1, …, B-1, B выбирается такое, значение синуса на котором минимально. Вывести N таких чисел. A может быть больше, меньше или равно B (в последнем случае в наборе всего одно это число). Ввод заканчивается двумя нулями.

    Input:

    1
    10
    25
    9
    -200
    300
    1000
    -25
    0
    0
    Output:

    5
    11
    11
    344
  5. EJudge: MultTable 'Таблица умножения'

    Ввести два натуральных числа, M и N. Вывести таблицу умножения от 1×1 до M*N в приведённом ниже формате (по колонкам, но без учёта количества разрядов в числе).

    Input:

    4
    5
    Output:

    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

Python/GeoPython2021/04_Loops (последним исправлял пользователь FrBrGeorge 2021-10-31 21:49:00)