Циклы for и while. Цикл for
Скачать 0.54 Mb.
|
ПримечанияПримечание 1. Оператор continue не влияет на выполнение блока else в циклах. Примечание 2. Блок else в циклах часто применяется для обработки отсутствия элементов. Примечание 3. Блок кода else в циклах встречается не так часто на практике. Однако если вы обнаружите ситуацию, в которой применение else оправдано, то не стесняйтесь его использовать. Это может добавить ясности вашему коду! Вопросы Будет ли выполнен блок кода else, в приведенном ниже фрагменте кода? n = 0 while n < 10: n += 2 print(n) else: print('Цикл завершен.') Будет ли выполнен блок кода else, в приведенном ниже фрагменте кода? n = 0 while n < 10: n += 2 if n == 7: break print(n) else: print('Цикл завершен.') Задачи Тема урока: ревью кодаРевью кода; Поиск ошибок; Производительность кода. Аннотация. Урок посвящен проведению ревью кода, поиску ошибок и анализу производительности. Ревью кодаРевью кода – проверка исходного кода программы с целью обнаружения и исправления ошибок и неточностей, которые остались незамеченными при начальной разработке. В процессе ревью кода могут быть исправлены: фактические ошибки; производительность кода; читабельность кода и ошибки форматирования кода. Целью ревью кода является улучшение качества программного кода и совершенствование навыков программиста. Как правило ревью кода выполняет программист с большим опытом. Фактические ошибкиК фактическим ошибкам в коде относятся ошибки из-за которых код может работать неверно. По сути, это ошибки относящиеся к алгоритму, который используется в программе для решения задачи. Среди частых фактических ошибок встречаются: отсутствие начальной инициализации переменной; неправильная начальная инициализация переменной; отсутствие отступа (в Python блоки кода выделяются отступами); неправильные числовые граничные значения, например при использовании функции range(); неправильные граничные сравнения (путаница с >, >= или <, <=); путаница логических операций or и and и т.д. Производительность кодаПод производительностью кода в простейшем случае можно подразумевать то, сколько времени программа тратит на решение задачи. При написании программы, программист должен думать над тем, сколько времени в худшем случае потребуется его программе для решения задачи. Рассмотрим задачу, которая проверяет число на простоту. 1 версия программы: Перебираем все числа от 2 до num - 1 и делаем проверку делимости числа num на i: num = int(input()) flag = True for i in range(2, num): if num % i == 0: flag = False if num > 1 and flag == True: print('Число простое') else: print('Число составное') Если программе на вход подается простое число num = 1934234249, то она будет работать примерно 270270 секунд = 4.54.5 минуты.🙄 2 версия программы: Несложно понять, что перебирать все числа от 2 до num - 1 не имеет смысла. Достаточно проверить числа от 2 до num // 2 + 1: num = int(input()) flag = True for i in range(2, num // 2 + 1): if num % i == 0: flag = False if num > 1 and flag == True: print('Число простое') else: print('Число составное') Если программе на вход подается простое число num = 1934234249, то она будет работать примерно 130130 секунд = 2.22.2 минуты. По сути мы улучшили время работы программы вдвое! 😊 3 версия программы: Правую границу num // 2 + 1 проверки можно улучшить, если заметить, что у любого составного числа есть делитель (отличный от 1), не превосходящий квадратного корня из числа. Таким образом, имеет смысл перебирать делители от 22 до \sqrt{n} + 1n+1. num = int(input()) flag = True for i in range(2, int(num ** 0.5) + 1): if num % i == 0: flag = False if num > 1 and flag == True: print('Число простое') else: print('Число составное') Если программе на вход подается простое число num = 1934234249, то она будет работать примерно 0.0660.066 секунд. По сути мы улучшили время работы программы в 4000 раз! 😎 4 версия программы: Предыдущие оптимизации касались случая, когда проверяемое число является простым. В случае если число является составным и мы нашли его первый делитель (отличный от 1), мы прерываем цикл с помощью оператора break: num = int(input()) flag = True for i in range(2, int(num ** 0.5) + 1): if num % i == 0: flag = False break if num > 1 and flag == True: print('Число простое') else: print('Число составное') |