Главная страница
Навигация по странице:

  • Примечание 3.

  • 2 версия программы

  • По сути мы улучшили время работы программы вдвое! 😊3 версия программы

  • По сути мы улучшили время работы программы в 4000 раз! 😎4 версия программы

  • Циклы for и while. Цикл for


    Скачать 0.54 Mb.
    НазваниеЦикл for
    Дата23.11.2022
    Размер0.54 Mb.
    Формат файлаdocx
    Имя файлаЦиклы for и while.docx
    ТипУрок
    #808442
    страница6 из 7
    1   2   3   4   5   6   7

    Примечания


    Примечание 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('Цикл завершен.')

    Задачи

    Тема урока: ревью кода


    1. Ревью кода;

    2. Поиск ошибок;

    3. Производительность кода.

    Аннотация. Урок посвящен проведению ревью кода, поиску ошибок и анализу производительности.

    Ревью кода


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

    В процессе ревью кода могут быть исправлены:

    • фактические ошибки;

    • производительность кода;

    • читабельность кода и ошибки форматирования кода.

    Целью ревью кода является улучшение качества программного кода и совершенствование навыков программиста.

    Как правило ревью кода выполняет программист с большим опытом.


    Фактические ошибки


    К фактическим ошибкам в коде относятся ошибки из-за которых код может работать неверно. По сути, это ошибки относящиеся к алгоритму, который используется в программе для решения задачи.

    Среди частых фактических ошибок встречаются:

    • отсутствие начальной инициализации переменной;

    • неправильная начальная инициализация переменной;

    • отсутствие отступа (в 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('Число составное')
    1   2   3   4   5   6   7


    написать администратору сайта