21 марта 2025

Основы Python: руководство по программированию для начинающих

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

Ваша первая программа на Python: “Hello, World!”

Начнем с традиционной программы "Hello, World!". В Python это исключительно просто:

print("Hello, Beginner!")

Эта единственная строка выполняет следующее:

  1. print(): Это встроенная функция. Функции — это многократно используемые блоки кода, которые выполняют определенные задачи. print() отображает вывод для пользователя.
  2. ("Hello, Beginner!"): Внутри круглых скобок находится строковый литерал. Строка — это последовательность символов, заключенная в одинарные ('...') или двойные ("...") кавычки.

Когда вы запускаете эту программу, интерпретатор Python выполняет функцию print(), отображая “Hello, Beginner!” на вашем экране.

Переменные в Python

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

# Присваивание значений переменным
message = "Welcome to Python!"
number = 10
pi = 3.14159

# Вывод значений переменных
print(message)
print(number)
print(pi)

Пояснение:

  1. message = "Welcome to Python!": Создается переменная с именем message, в которой хранится строка "Welcome to Python!".
  2. number = 10: Переменная с именем number хранит целое число 10.
  3. pi = 3.14159: Переменная с именем pi хранит число с плавающей точкой 3.14159.

Затем print() отображает эти значения. Python — динамически типизированный язык: вам не нужно явно указывать тип переменной (строка, целое число, число с плавающей точкой). Python определяет его из присвоенного значения.

Взаимодействие с пользователем в Python

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

# Получение пользовательского ввода
name = input("Please enter your name: ")

# Вывод персонализированного приветствия
print("Hello, " + name + "!")  # Конкатенация строк

Пояснение:

  1. name = input("Please enter your name: "): input() приостанавливает программу, ожидает, пока пользователь что-нибудь напечатает и нажмет Enter, и сохраняет введенные данные в виде строки в переменной name.
  2. print("Hello, " + name + "!"): Выводит приветствие. Оператор + со строками выполняет конкатенацию строк, объединяя их. Рекомендуется добавлять пробелы вокруг + при конкатенации для лучшей читаемости.

Условная логика: if, else и elif

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

age = int(input("Enter your age: "))

if age >= 18:
    print("You are eligible to vote.")
elif age < 0:
    print("That is an incorrect age.")
else:
    print("You are not eligible to vote yet.")

Описание:

  1. age = int(input("Enter your age: ")): Принимает ввод пользователя для возраста. int() преобразует ввод (по умолчанию строку) в целое число.
  2. if age >= 18:: Проверяет, больше ли age или равно 18. Если это правда, выполняется оператор print с отступом.
  3. elif age < 0:: Если предыдущее условие if ложно, проверяется это условие. Если оно истинно, то будет выполнен соответствующий блок. elif означает “else if” и позволяет последовательно проверять несколько условий.
  4. else:: Если ни одно из условий if или elif не истинно, выполняется код с отступом под else. Отступы имеют жизненно важное значение в Python; они определяют блоки кода, связанные с if, elif и else. Правильные отступы (обычно 4 пробела) имеют решающее значение для корректной работы кода Python.

Циклы: повторение кода с помощью for

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

# Вывод чисел от 0 до 4
for i in range(5):
    print(i)

# Вывод элементов списка
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

Пояснение:

  1. for i in range(5):: range(5) генерирует числа от 0 до (но не включая) 5. Цикл выполняет итерацию по этой последовательности; в каждой итерации текущее число присваивается переменной i.
  2. for fruit in fruits:: Этот цикл выполняет итерацию по списку fruits. В каждой итерации текущий элемент списка присваивается переменной fruit.

Циклы: повторение кода с помощью while

Цикл while продолжается до тех пор, пока условие истинно.

count = 0
while count < 5:
    print(count)
    count += 1  # Увеличение count

Пояснение:

  1. count = 0: Инициализирует count значением 0.
  2. while count < 5:: Цикл продолжается до тех пор, пока count меньше 5.
  3. count += 1: Внутри цикла count увеличивается на 1 в каждой итерации. Это предотвращает бесконечный цикл (когда условие всегда остается истинным).

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

Функции необходимы для повторного использования кода, организации и удобочитаемости. Вместо того, чтобы повторять один и тот же код несколько раз, вы можете определить функцию один раз и вызывать ее всякий раз, когда вам нужна эта конкретная функциональность. Определите свои собственные функции, используя def.

# Определение функции
def greet(name):
    print("Hello, " + name + "!")

# Вызов функции
greet("Alice")
greet("Bob")

Ключевые моменты:

  1. def greet(name):: Определяет функцию с именем greet, которая принимает один параметр с именем name.
  2. print("Hello, " + name + "!"): Тело функции — код, выполняемый при вызове функции.
  3. greet("Alice"): Вызывает функцию greet, передавая “Alice” в качестве аргумента.

Объединение концепций: простой калькулятор площади

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

def calculate_area(length, width):
    """Вычисляет площадь прямоугольника."""  # Docstring
    area = length * width
    return area

# Получение размеров
length = float(input("Enter length: "))
width = float(input("Enter width: "))

# Вычисление площади
rectangle_area = calculate_area(length, width)

# Вывод результата
print("Area:", rectangle_area)

Пояснение:

  1. def calculate_area(length, width):: Определяет функцию для вычисления площади прямоугольника, принимая length и width в качестве параметров. """...""" — это строка документации, описывающая функцию. Строки документации используются для документирования и могут быть доступны с помощью функции help().
  2. return area: Функция возвращает вычисленную площадь. Оператор return завершает выполнение функции и отправляет значение обратно туда, где функция была вызвана.
  3. Программа получает пользовательский ввод для длины и ширины, преобразуя их в числа с плавающей точкой с помощью float(). Использование float() позволяет использовать десятичные значения, делая калькулятор более универсальным.
  4. Он вызывает calculate_area, передавая размеры, и сохраняя возвращаемое значение в rectangle_area.
  5. Наконец, он выводит площадь.

Дополнительные инструменты управления потоком выполнения

Python предоставляет и другие инструменты для управления потоком выполнения программы.

break, continue и else в циклах

  • break: Выходит из самого внутреннего охватывающего цикла for или while.
  • continue: Переходит к следующей итерации цикла.
  • else для циклов: В for выполняется после завершения цикла (если не произошел break). В while выполняется после того, как условие становится ложным (если не произошел break).
#Пример для break
numbers = [1, 2, 3, 4, 5]
for number in numbers:
    if number == 3:
        break  # Выход из цикла, когда number равно 3
    print(number)  # Вывод: 1 2

#Пример для continue
numbers = [1, 2, 3, 4, 5]
for number in numbers:
    if number == 3:
        continue  # Переход к следующей итерации, когда number равно 3
    print(number)  # Вывод: 1 2 4 5

#Пример для else
for i in range(5):
    print(i)
else:
    print("Loop finished") #Будет выполнено

for i in range(5):
    if i==3:
        break
    print(i)
else:
    print("Loop finished") #Не будет выполнено

Оператор match

match сравнивает значение с шаблонами. Он похож на операторы switch в других языках, но с более мощным сопоставлением с образцом. Доступен начиная с Python 3.10.

def http_error(status):
    match status:
        case 400:
            return "Bad request"
        case 401 | 403 | 404:  # Несколько case
            return "Not allowed"
        case 418:
            return "I'm a teapot"
        case _:  # По умолчанию
            return "Something's wrong"

print(http_error(404))
print(http_error(500))

_ — это подстановочный знак, соответствующий любому значению, если не соответствует ни один другой случай.

Структуры данных

В Python есть встроенные структуры данных для организации данных.

  • Списки: Упорядоченные, изменяемые последовательности.
my_list = [1, 2, 3, "apple"]
my_list.append("cherry")  # Добавление элемента в конец
print(my_list[0])       # Доступ к элементу по индексу (начиная с 0)
my_list.remove(2)        # Удаление элемента по значению
print(my_list)
  • Кортежи: Упорядоченные, неизменяемые последовательности.
my_tuple = (1, 2, 3, "apple")
# my_tuple[0] = 5  # Ошибка (неизменяемый) - Кортежи нельзя изменять после создания
print(my_tuple[1])
  • Множества: Неупорядоченные коллекции уникальных элементов.
my_set = {1, 2, 3, 3, 4, 5}  # Дубликаты автоматически удаляются
print(my_set)  # Вывод: {1, 2, 3, 4, 5}
  • Словари: Пары ключ-значение. Ключи должны быть неизменяемыми (например, строки, числа или кортежи).
my_dict = {"name": "Alice", "age": 30}
print(my_dict["name"])  # Доступ к значению по ключу
my_dict["age"] = 31      # Изменение значения
print(my_dict)
  • Генераторы списков: Краткий синтаксис для создания списков.
squares = [x**2 for x in range(10)]      # Список квадратов
even = [x for x in range(20) if x % 2 == 0]  # Четные числа
print(squares)
print(even)

Модули

Модули организуют код в многократно используемые файлы. Используйте import для доступа к функциональности из других модулей.

import math

print(math.sqrt(16))  # Доступ к функции sqrt из модуля math
print(math.pi)        # Доступ к константе pi

from math import sqrt  # Импорт конкретной функции

print(sqrt(25))

from math import *  # Импорт всего (обычно избегайте)

print(pi)

Это демонстрирует использование модуля math (который предоставляет математические функции). Импорт определенных функций или констант может улучшить читаемость кода и избежать конфликтов имен. Импорт всего с помощью * обычно не рекомендуется в больших проектах.

Определение функций: продвинутые методы

Значения аргументов по умолчанию

Функции могут иметь значения по умолчанию для аргументов.

def greet(name, greeting="Hello"):
    print(greeting + ", " + name + "!")

greet("Bob")           # Использует приветствие по умолчанию
greet("Alice", "Hi")  # Переопределяет значение по умолчанию

Именованные аргументы

Вызывайте функции, используя синтаксис keyword=value.

def describe_pet(animal_type, pet_name):
    print("I have a " + animal_type + " named " + pet_name + ".")

describe_pet(pet_name="Harry", animal_type="hamster")  # Порядок не имеет значения

Произвольные списки аргументов

Функции могут принимать произвольное количество позиционных аргументов, используя *args.

def make_pizza(*toppings):
    print("Making a pizza with:")
    for topping in toppings:
        print("- " + topping)

make_pizza("pepperoni")
make_pizza("mushrooms", "cheese", "peppers")

*toppings собирает все позиционные аргументы в кортеж с именем toppings.

Произвольные именованные аргументы

Функции могут принимать произвольное количество именованных аргументов, используя **kwargs.

def build_profile(first, last, **kwargs):
    # Объединяет фиксированные и произвольные именованные аргументы для создания профиля пользователя.
    profile = {'first_name': first, 'last_name': last}
    profile.update(kwargs)  # Обновляет профиль парами ключ-значение из kwargs.
    return profile

user = build_profile("Albert", "Einstein", location="Princeton", field="physics")
print(user)  # Output: {'first_name': 'Albert', 'last_name': 'Einstein', 'location': 'Princeton', 'field': 'physics'}

**kwargs означает “keyword arguments” (именованные аргументы) и является общепринятым соглашением об именах для сбора дополнительных именованных аргументов в словарь. Это позволяет функциям обрабатывать гибкие входные данные.

Лямбда-выражения

Небольшие анонимные функции, созданные с помощью lambda.

add = lambda x, y: x + y
print(add(5, 3))  # Вывод: 8

pairs = [(1, 'one'), (2, 'two'), (3, 'three')]
pairs.sort(key=lambda pair: pair[1]) #сортировка по второму элементу кортежа
print(pairs)

Лямбда-функции часто используются в качестве аргументов для функций высшего порядка (функций, которые принимают другие функции в качестве аргументов), как sort в этом примере.

Классы

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

class Dog:
    def __init__(self, name, age): #конструктор
        self.name = name
        self.age = age

    def bark(self):
        print("Woof!")

my_dog = Dog("Buddy", 3) #экземпляр класса
print(my_dog.name)
my_dog.bark()

Пояснение:

  • class Dog:: Определяет класс с именем Dog.
  • def __init__(self, name, age):: Это конструктор (или инициализатор). Он вызывается автоматически при создании нового объекта Dog.
    • self: Ссылается на экземпляр класса (конкретный объект Dog, с которым вы работаете). Это первый параметр во всех методах внутри класса.
  • def bark(self):: Это метод — функция, принадлежащая классу Dog. Он может получить доступ к данным собаки (например, self.name, хотя в этом простом примере он этого не делает).
  • my_dog = Dog("Buddy", 3): Создает экземпляр класса Dog с именем my_dog.

Итераторы

Итератор — это объект, который позволяет перебирать все элементы коллекции, независимо от ее конкретной реализации.

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self

  def __next__(self):
    x = self.a
    self.a += 1
    return x

myclass = MyNumbers()
myiter = iter(myclass)

print(next(myiter))
print(next(myiter))
print(next(myiter))

Генераторы

Генераторы — это разновидность итерируемых объектов, таких как списки или кортежи. В отличие от списков, они не хранят свое содержимое в памяти, генерируя значения на лету, используя ключевое слово yield. Это делает их эффективными по памяти для больших последовательностей. Это также отличает их от генераторов списков, которые создают весь список в памяти.

def my_generator():
  yield 1
  yield 2
  yield 3

for value in my_generator():
  print(value)

#генераторное выражение
squares = (x*x for x in range(10))
print(list(squares))

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

Связанные новости

Связанные статьи