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

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

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

  • Пример 5.

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


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

    Читабельность кода


    Следует помнить, что наш код должен легко читаться другими программистами. Чтобы этого достичь, следует придерживаться стандарта PEP 8. Обращайте внимание на следующие моменты:

    1. отступы и пробелы: используйте 4 пробела на один уровень отступа и никогда не смешивайте символы табуляции и пробелы;

    2. названия переменных: используйте говорящие названия для переменных (total, counter, product) и следуйте стилю lower_case_with_underscores (слова из маленьких букв с подчеркиваниями);

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

    4. комментарии: комментарии должны являться законченными предложениями. И помните, комментарии, которые противоречат коду, хуже, чем отсутствие комментариев. Всегда исправляйте комментарии, если меняете код!

       О стандарте PEP 8 на русском языке можно почитать тут.

    Примечания


    Примечание 1. Хорошие статьи о ревью кода можно почитать на хабре: статья 1, статья 2, статья 3.

    Примечание 2. Программные ошибки, часто называют багами 🦟

    Примечание 3. Все программисты создают баги, особенно в начале своего карьерного пути. Это норма 😀

     Примеры

    Пример 1. Требовалось написать программу, которая выводит символ А 10 раз. Вы ревьювите следующий код:

    print('A')

    print('A')

    print('A')

    print('A')

    print('A')

    print('A')

    print('A')

    print('A')

    print('A')

    print('A')

    Что вы о нем скажете? Правильно ли он работает? Как его улучшить?

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

    for _ in range(10):

    print('A')

    Пример 2. Требовалось написать программу которая должна вывести все числа от 1 до 100 кратные 7. Вы ревьювите следующий код:

    i = 1

    while i < 101:

    if i % 7 == 0:

    print(i)

    i += 1

    Что вы о нем скажете? Правильно ли он работает? Как его улучшить?

    Ревью. Приведенный код содержит достаточно распространенную ошибку: неверно поставленный отступ. Поскольку управление циклом while происходит при помощи переменной i, то ее необходимо инкрементировать (увеличивать) каждую итерацию. В приведенном коде она инкрементируется только если выполняется условие i % 7 == 0, которое ложно для начального значения i = 1. Таким образом, получаем бесконечный цикл. Для исправления ошибки необходимо удалить отступ у строки i += 1:

    i = 1

    while i < 101:

    if i % 7 == 0:

    print(i)

    i += 1

    В данном случае лучше использовать цикл for с шагом, равным 7. Это позволит сделать код более наглядным и сократит время выполнения программы, так как нет необходимости просматривать и проверять все числа на делимость на 7:

    for i in range(7, 101, 7):

    print(i)

    Пример 3. Требовалось написать программу которая выводит все числа от 100 до 1 в порядке убывания. Вы ревьювите следующий код:

    for i in range(1, 100):

    print(101 - i)

    Что вы о нем скажете? Правильно ли он работает? Как его улучшить?

    Ревью. Приведенный код содержит достаточно распространенную ошибку: неправильная правая граница цикла for. Следует помнить, что правая граница в цикле for всегда не включительна. Таким образом, для исправления ошибки необходимо заменить число 100 на 101:

    for i in range(1, 101):

    print(101 - i)

    В данном случае лучше использовать цикл for с шагом, равным -1:

    for i in range(100, 0, -1):

    print(i)

    Пример 4. Требовалось написать программу которая находит сумму всех нечетных чисел от 1 до 1000. Вы ревьювите следующий код:

    a = 1

    for i in range(1, 1000):

    if i % 2 == 1:

    a = a + 1

    print(a)

    Что вы о нем скажете? Правильно ли он работает? Как его улучшить?

    Ревью. Приведенный код содержит достаточно распространенные ошибки:

    1. неправильная начальная инициализация переменной a

    2. неправильная правая граница цикла for;

    3. неправильно записанная операция накапливания значения суммы.

    a = 0

    for i in range(1, 1001):

    if i % 2 == 1:

    a = a + i

    print(a)

    Для улучшения читабельности кода изменим название переменной a на total и используем расширенный оператор присваивания:

    total = 0

    for i in range(1, 1001, 2):

    total += i

    print(total)

    Пример 5. Требовалось написать программу которая вычисляет факториал числа. Вы ревьювите следующий код:

    n = input()

    a = 0

    for i in range(n):

    a = a * i

    print(a)

    Что вы о нем скажете? Правильно ли он работает? Как его улучшить?

    Ревью. Приведенный код содержит достаточно распространенные ошибки:

    1. отсутствие преобразования строки текста в целое число;

    2. неправильная начальная инициализация переменной a

    3. неправильная работа с границами итерирования: переменная i принимает значения от 0 до n - 1.

    n = int(input())

    a = 1

    for i in range(1, n + 1):

    a = a * i

    print(a)

    Для улучшения читабельности кода, изменим название переменной a на factorial и используем расширенный оператор присваивания:

    n = int(input())

    factorial = 1

    for i in range(1, n + 1):

    factorial *= i

    print(factorial)

    В модуле math есть функция factorial(), которая вычисляет факториал числа. Поэтому вместо реализации своей версии, куда правильнее и удобнее воспользоваться уже готовой.
    1   2   3   4   5   6   7


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