4194
Комментарий:
|
7626
|
Удаления помечены так. | Добавления помечены так. |
Строка 6: | Строка 6: |
{{{#!python n = 0 # инициализация while n<10: # проверка условия print(n) # тело n += 1 # изменение данных, участвующих в условии }}} * [[http://pythontutor.com/visualize.html#code=n%20%3D%200%0Awhile%20n%3C10%3A%0A%20%20%20%20print%28n%29%0A%20%20%20%20n%20%2B%3D%201%0A&cumulative=false&curInstr=0&heapPrimitives=true&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false|Пошаговый просмотр]] |
|
Строка 7: | Строка 14: |
{{{#!python3 n = int(input()) # инициализация while n: # проверка условия print(n*2+1) # тело n = int(input()) # изменение данных, участвующих в условии print("Done") }}} |
|
Строка 8: | Строка 22: |
* Каноническая схема цикла | {{{#!python n = 0 while n<10: print(n) # n += 1 }}} * ⇒ Каноническая схема цикла |
Строка 13: | Строка 33: |
* Вложенные циклы {{{#!python N = 4 i = 1 while i<=N: j = 1 while j<=N: print(i, "*", j, "==", i*j) j += 1 i += 1 }}} * [[http://pythontutor.com/visualize.html#code=N%20%3D%204%0Ai%20%3D%201%0Awhile%20i%3C%3DN%3A%0A%20%20%20%20j%20%3D%201%0A%20%20%20%20while%20j%3C%3DN%3A%0A%20%20%20%20%20%20%20%20print%28i,%20%22*%22,%20j,%20%22%3D%3D%22,%20i*j%29%0A%20%20%20%20%20%20%20%20j%20%2B%3D%201%0A%20%20%20%20i%20%2B%3D%201%0A&cumulative=false&curInstr=0&heapPrimitives=true&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false|Пошаговый просмотр]] * Место инициализации во вложенном цикле. Вот этот код работает неправильно, потому что инициализация внутреннего цикла не находится непосредственно перед запуском этого цикла (⇒ выполняется всего один раз в самом начале) {{{#!python N = 4 i = j = 1 while i<=N: while j<=N: print(i, "*", j, "==", i*j) j += 1 i += 1 }}} '''TODO''' |
|
Строка 14: | Строка 58: |
* Вложенные циклы | |
Строка 19: | Строка 62: |
* Форматная срока: `"произвольный текст{выражение:правила форматирования}произвольный текст…" * пример |
* Форматная срока: `f"произвольный текст{выражение:правила форматирования}произвольный текст…"` * примеры: * Фигурные скобки — это шаблон, выражение в них вычисляется и в строку подставляется результат {{{#!python a, b = 4, 5 print(f"---===< {a}*{b}=={a*b} >===---") }}} * После ':' в шаблоне указывается, как форматировать. Число означает ширину в символах. Если оно слишком большое, оставшееся место заполнится пробелами. Если оно слишком маленькое, подставится нужное количество символов, и форматирование «поедет». {{{#!python print(f"{a:7}**{b:5}=={a**b:2}") }}} * Можно указать, к какому краю отведённого места прижимать подстановку шаблона. '<' — к левому, '>' — к правому (по умолчанию), '^' — к середине {{{#!python print(f"{a:^7}*{b:<7}=={a*b:6}") }}} * Числа могут быть дополнены незначащими нулями. У вещественных чисел указывается общая ширина {{{#!python a,b=2225,6 f"{a:03}/{b:03}=={a/b:15.10}" }}} |
Циклическое выполнение команд в зависимости от свойств данных
О соотнесении рекурсии и цикла: как правило необходимости в дополнительных пространствах имён нет, достаточно просто повторять одну и ту же последовательность действий, пока не изменятся свойства обрабатываемых данных.
Цикл
Цикл while
- Цикл со счётчиком
- Цикл с непредсказуемым окончанием (например, ввод до 0)
n = int(input()) # инициализация while n: # проверка условия print(n*2+1) # тело n = int(input()) # изменение данных, участвующих в условии print("Done")
- Бесконечный цикл
- ⇒ Каноническая схема цикла
- инициализация
- проверка условия
- тело
- изменение
- Вложенные циклы
- Место инициализации во вложенном цикле.
- Вот этот код работает неправильно, потому что инициализация внутреннего цикла не находится непосредственно перед запуском этого цикла (⇒ выполняется всего один раз в самом начале)
TODO
- Условные операторы в цикле
Операторы break и continue, когда нужны
Алгоритм «поиск первого», секция else: в цикле
Немного про форматные строки
- Понятие о подстановке в шаблон
Форматная срока: f"произвольный текст{выражение:правила форматирования}произвольный текст…"
- примеры:
- Фигурные скобки — это шаблон, выражение в них вычисляется и в строку подставляется результат
- После ':' в шаблоне указывается, как форматировать. Число означает ширину в символах. Если оно слишком большое, оставшееся место заполнится пробелами. Если оно слишком маленькое, подставится нужное количество символов, и форматирование «поедет».
1 print(f"{a:7}**{b:5}=={a**b:2}")
Можно указать, к какому краю отведённого места прижимать подстановку шаблона. '<' — к левому, '>' — к правому (по умолчанию), '^' — к середине
1 print(f"{a:^7}*{b:<7}=={a*b:6}")
- Числа могут быть дополнены незначащими нулями. У вещественных чисел указывается общая ширина
- примеры:
Д/З
Прочитать и прощёлкать седьмую главу учебника
- Вводить целые числа до тех пор, пока среди них не встретится 0, и посчитать, сколько среди них было кратных трём (0 не считается). Вывести это значение.
Ввод:
1 2 3 4 3 7 9 3 7 0
Вывод:
4
Ввести натуральное число N и проверить, является ли оно точным кубом некоторого натурального числа. Сравнивать вещественные числа (то есть проверять содержит ли n**(1/3) ненулевую дробную часть) запрещено.
- Алгоритм: для всех чисел i от 1 проверять, не равно ли i**3 == N, заканчивать цикл, когда i**3 больше N
- Ввести натуральное N и вывести все простые числа, не превосходящие N (простыми называются числа, которые делятся только на себя и на 1)
- Алгоритм:
для всех i от 2 до N (1 — не считается простым) для всех k от 3 до i-1 (на самом деле до корня из i, ну да ладно) если i делится на k, оно не простое, можно больше не проверять если i ни на какое k не делится, оно простое, вывести
- Алгоритм:
- Ввести натуральное N и вывести хорошо выглядящую таблицу умножения от 1 до 12
- (упрощение для упражнения) В одну колонку, но с условием, что все сомножители и произведения стоят строго друг над другом
- В 4 колонки
- (усложнение) В N колонок, где N вводится