Логические выражения, условные операторы и цикл

TODO лекция заняла ≈1час, можно дополнить

TODO добавить в лекцию пример на частичные вычисления (A and B при A=False)

Алгебра логики

Сравнения

Условные действия

Оператор сопоставления (введение)

См. pep-0634, pep-0635 и pep-0636

Это довольно сложный оператор на сопоставление структуры объекта, здесь упомянем только функцию управления потоком вычислений и прямого связывания.

   1 match input():
   2     case "1":
   3         print("It's 1")
   4     case "10":
   5         print("It's 10")
   6     case "":
   7         print("It's nothing")
   8     case var if var > 100:
   9         print(var, "is a lot!")
  10     case _:
  11         print("unknown")

Обратите внимание на то, что если в примере ввод равен "1", мы сам введённый объект теряем — он ничем не связан. Как быстрее всего задать имя введённого объекта?

Цикл с предусловием

Цикл while и операция связывания

В Python отсутствует цикл с пост-условием, потому что это было бы нарушение «блочного» принципа (cм. pep-0315). В результате стандартный шаблон «цикл по вводу» занимает все четыре секции канонической схемы цикла. В таких случаях естественно применить «моржовый оператор»:

переменная = ввод
while проверка(переменная):
    тело
    переменная = ввод

while проверка (переменная := ввод):
    тело

Пример: цикл по вводу до пустой строки (ещё раз привет, Си!)

   1 while str := input():
   2     print(str)

Коротко про ввод и вывод в Д/З

Д/З

Пользоваться составными типами данных Python (кроме преобразования ввода и множественного связывания) в этих задачах нельзя.

  1. Прочитать и прощёлкать учебник (до функций)

  2. EJudge: TriangleLine 'Неравенство треугольника'

    Ввести три числа через запятую и вывести True или False в зависимости от того, могут ли эти числа быть сторонами треугольника (проверять строгое неравенство).

    • Условие: программа должна занимать одну строку.

    Input:

    2,8,3
    Output:

    False
  3. EJudge: MaxSubsum 'Полоса удач'

    Ввести в столбик последовательность целых (положительных и отрицательных) чисел, не равных нулю; в конце этой последовательности стоит 0. Вывести наибольшую сумму последовательно идущих элементов этой последовательности (не менее одного).

    • Условие: Использовать составные типы данных Python в этой задаче не разрешается.

    Input:

    2
    3
    -7
    -1
    3
    4
    5
    -2
    -4
    7
    8
    -6
    -1
    0
    Output:

    21
  4. EJudge: XorShift 'Пcевдослучайные числа'

    Ввести четыре натуральных числа — state, n, a и b (a < b), и вывести псевдослучайное целое число в диапазоне от a до b включительно, вычисленное по формуле xorshift64 на n-м шаге алгоритма. Приведение к диапазону — это сумма остатка от деления на размер диапазона и начала диапазона.

    • Условие: использовать алгоритм с << 7 / >> 9 (самый простой, он описан в конце раздела)

    Input:

    1,7,10,20
    Output:

    16
  5. EJudge: SwapFive 'Вращающееся число'

    (Жак Арсак. Программирование игр и головоломок.) Для заданной цифры k найти такое минимальное целое неотрицательное число, оканчивающееся на k, что, умножая его на k, мы получим новое число, полученное из предыдущего вычеркиванием цифры k на конце и приписыванием ее в начале. Строки/кортежи и иные последовательности не использовать.

    • Условие: использовать составные типы данных Python в этой задаче не разрешается

    Input:

    4
    Output:

    102564

LecturesCMC/PythonIntro2025/02_Conditionals (последним исправлял пользователь hbd 2025-09-16 11:25:15)