Управляющие конструкции Python

PythonBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы познакомитесь с фундаментальными управляющими конструкциями Python: условными операторами и циклами. Опираясь на знания, полученные в предыдущих работах, вы научитесь управлять логикой выполнения ваших программ с помощью операторов if-else, а также циклов for и while. Этот практический опыт углубит ваше понимание основных концепций Python и подготовит вас к написанию более сложных и динамичных программ.

Изучение условных операторов

На этом этапе вы познакомитесь с условными операторами в Python, в частности со структурой if-else.

Откройте интерпретатор Python, введя следующую команду в терминале:

python

Вы увидите приглашение Python (>>>), указывающее на то, что вы находитесь в интерактивной оболочке.

Интерпретатор Python

Начнем с простого оператора if. В интерпретаторе Python введите следующее:

age = 20
if age >= 18:
    print("You are an adult.")

Результат:

You are an adult.

Совет: Будьте внимательны с отступами — в Python они имеют критическое значение. Для создания отступов рекомендуется использовать четыре пробела.

Оператор if проверяет, истинно ли условие age >= 18. Если это так, выполняется блок кода с отступом.

Теперь добавим блок else:

age = 15
if age >= 18:
    print("You are an adult.")
else:
    print("You are a minor.")

Результат:

You are a minor.

Блок else задает альтернативное действие, которое выполняется, если условие ложно.

Для обработки более сложных ситуаций можно использовать блоки elif (сокращение от else if):

age = 65
if age < 13:
    print("You are a child.")
elif age < 20:
    print("You are a teenager.")
elif age < 65:
    print("You are an adult.")
else:
    print("You are a senior citizen.")

Результат:

You are a senior citizen.

Блоки elif позволяют последовательно проверять несколько условий.

Помните, что отступы в Python обязательны. Именно они определяют, какие блоки кода относятся к конкретному условию.

Знакомство с циклами "For"

На этом этапе вы изучите циклы for, которые используются в Python для перебора элементов последовательностей (таких как списки, строки или диапазоны).

Начнем с простого цикла for, использующего диапазон. В интерпретаторе Python введите:

for i in range(5):
    print(i)

Результат:

0
1
2
3
4

Функция range(5) генерирует последовательность чисел от 0 до 4, и цикл поочередно проходит по каждому числу.

Функция range() может принимать несколько аргументов для указания начала, конца и шага. Попробуем другой вариант:

for i in range(1, 10, 2):
    print(i)

Результат:

1
3
5
7
9
  • Функция range(1, 10, 2) создает последовательность чисел, начиная с 1, до 10 (не включая само число 10), с шагом 2.

Теперь попробуем перебрать элементы списка:

fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(f"I like {fruit}")

Результат:

I like apple
I like banana
I like cherry

В данном случае цикл проходит по каждому элементу списка fruits.

Циклы for также отлично работают со строками:

for char in "Python":
    print(char.upper())

Результат:

P
Y
T
H
O
N

Этот цикл перебирает каждый символ в строке "Python".

Давайте объединим цикл for с условными операторами:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for num in numbers:
    if num % 2 == 0:
        print(f"{num} is even")
    else:
        print(f"{num} is odd")

Результат:

1 is odd
2 is even
3 is odd
4 is even
5 is odd
6 is even
7 is odd
8 is even
9 is odd
10 is even

Этот цикл проверяет каждое число в списке и выводит сообщение о том, является ли оно четным или нечетным.

Как работает оператор остатка от деления (%): Символ % называется оператором взятия остатка (модуля). Он возвращает остаток, полученный при делении одного числа на другое. Например:

  • 5 % 2 равно 1 (так как 5 делится на 2 дважды с остатком 1)
  • 4 % 2 равно 0 (так как 4 делится на 2 нацело)
  • 10 % 3 равно 1 (так как 10 делится на 3 трижды с остатком 1)

Когда мы пишем num % 2 == 0, мы фактически спрашиваем: "Остается ли 0 при делении этого числа на 2?". Если да, то число четное. Если остаток равен 1, то число нечетное. Оператор == используется для сравнения значений на равенство.

Изучение циклов "While"

На этом этапе вы познакомитесь с циклами while, которые повторяют блок кода до тех пор, пока заданное условие остается истинным.

Начнем с простого примера. В интерпретаторе Python введите:

count = 0
while count < 5:
    print(count)
    count += 1

Результат:

0
1
2
3
4

Этот цикл будет выполняться до тех пор, пока значение переменной count меньше 5.

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

import random
number = random.randint(1, 10)
guess = 0
while guess != number:
    guess = int(input("Guess a number between 1 and 10: "))
    if guess < number:
        print("Too low!")
    elif guess > number:
        print("Too high!")
    else:
        print(f"Congratulations! You guessed the number {number}!")

Это простая игра "Угадай число", где пользователь вводит варианты до тех пор, пока не найдет правильный ответ. Когда введенное число совпадает с загаданным, срабатывает блок else с поздравлением.

Будьте осторожны с циклами while: если условие никогда не станет ложным, возникнет бесконечный цикл. Пример (не запускайте это):

while True:
    print("This will print forever!")

Если вы случайно запустили бесконечный цикл, его можно прервать нажатием комбинации клавиш Ctrl+C.

Для досрочного выхода из цикла можно использовать оператор break:

count = 0
while True:
    print(count)
    count += 1
    if count >= 5:
        break

Результат:

0
1
2
3
4

Обычно такой цикл работал бы вечно из-за условия True, но оператор break принудительно завершает его, когда count достигает 5.

Вложенные циклы и управление циклом

На этом этапе вы изучите вложенные циклы и дополнительные операторы управления.

Вложенные циклы — это циклы, расположенные внутри других циклов. Вот пример вложенных циклов for:

for i in range(3):
    for j in range(2):
        print(f"i: {i}, j: {j}")

Результат:

i: 0, j: 0
i: 0, j: 1
i: 1, j: 0
i: 1, j: 1
i: 2, j: 0
i: 2, j: 1

Внутренний цикл полностью проходит все свои итерации для каждого шага внешнего цикла.

Помимо break, в Python есть оператор continue. Он пропускает оставшуюся часть текущей итерации и сразу переходит к следующей:

for num in range(10):
    if num % 2 == 0:
        continue
    print(num)

Результат:

1
3
5
7
9

Этот цикл выводит только нечетные числа, пропуская четные.

Пояснение работы оператора остатка в данном контексте: Здесь условие num % 2 == 0 проверяет, является ли число четным. Если условие истинно, оператор continue заставляет программу проигнорировать строку print(num) и вернуться к началу цикла для следующего числа. Таким образом, до печати доходят только нечетные числа.

В Python циклы также могут иметь блок else. Он выполняется только в том случае, если цикл завершился естественным путем (без прерывания оператором break):

for num in range(2, 10):
    for i in range(2, num):
        if num % i == 0:
            print(f"{num} is not prime")
            break
    else:
        print(f"{num} is prime")

Результат:

2 is prime
3 is prime
4 is not prime
5 is prime
6 is not prime
7 is prime
8 is not prime
9 is not prime

Этот вложенный цикл ищет простые числа. Блок else выполняется, когда число оказывается простым (то есть внутренний цикл не нашел делителей и не был прерван через break).

Практическое применение

На заключительном этапе вы создадите небольшую программу, которая объединит все изученные управляющие конструкции.

Выйдите из интерпретатора Python, введя exit() или нажав Ctrl+D.

Откройте WebIDE в среде LabEx VM.

Интерфейс WebIDE LabEx VM

Создайте новый файл с именем number_analyzer.py в директории ~/project, используя следующую команду:

touch ~/project/number_analyzer.py

Откройте созданный файл в редакторе WebIDE.

Скопируйте и вставьте в файл следующий код:

def analyze_numbers():
    numbers = []
    while True:
        user_input = input("Enter a number (or 'done' to finish): ")
        if user_input.lower() == 'done':
            break
        try:
            number = float(user_input)
            numbers.append(number)
        except ValueError:
            print("Invalid input. Please enter a number or 'done'.")

    if not numbers:
        print("No numbers entered.")
        return

    total = sum(numbers)
    average = total / len(numbers)
    maximum = max(numbers)
    minimum = min(numbers)

    print(f"\nAnalysis of {len(numbers)} numbers:")
    print(f"Total: {total}")
    print(f"Average: {average:.2f}")
    print(f"Maximum: {maximum}")
    print(f"Minimum: {minimum}")

    print("\nNumber distribution:")
    for num in numbers:
        if num < average:
            print(f"{num} is below average")
        elif num > average:
            print(f"{num} is above average")
        else:
            print(f"{num} is equal to average")

if __name__ == "__main__":
    analyze_numbers()

Эта программа демонстрирует использование циклов while и for, условных операторов и обработки исключений.

Сохраните файл (автосохранение обычно включено) и запустите его с помощью команды в терминале:

python ~/project/number_analyzer.py

Введите несколько чисел, а затем напишите done, чтобы увидеть результат анализа. Вывод должен выглядеть примерно так:

Enter a number (or 'done' to finish): 10
Enter a number (or 'done' to finish): 20
Enter a number (or 'done' to finish): 30
Enter a number (or 'done' to finish): 40
Enter a number (or 'done' to finish): done

Analysis of 4 numbers:
Total: 100.0
Average: 25.00
Maximum: 40.0
Minimum: 10.0

Number distribution:
10.0 is below average
20.0 is below average
30.0 is above average
40.0 is above average

Если вы ошиблись при вводе данных, просто запустите программу снова. Это отличная возможность попрактиковаться в запуске Python-скриптов с различными входными данными.

Резюме

В ходе этой лабораторной работы вы изучили основные управляющие конструкции Python: условные операторы (if-else), циклы for и while. Вы научились управлять логикой выполнения программ, принимать решения на основе условий и обрабатывать последовательности данных. Также вы закрепили навыки работы с вложенными циклами и операторами управления break и continue.

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

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