Основы Python Синтаксис, Типы данных и Управляющие структуры

Python Синтаксис, Типы данных, Управляющие структуры

 

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

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

Если у вас уже установлен Python в вашей среде разработки, запустите REPL Python и кодируйте вместе с нами. Или если вы хотите пропустить установку и начать кодировать прямо сейчас, я рекомендую перейти на Google Colab и кодировать вместе с нами.

 

Привет, Python!

 

Прежде чем мы напишем классическую программу “Привет, мир!” на Python, вот немного информации о языке. Python – интерпретируемый язык. Что это означает? 

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

Создайте скрипт на Python, введите следующий код и запустите его: 

print("Привет, мир!")

 

Чтобы вывести “Привет, мир!”, мы использовали функцию `print()`, одну из множества встроенных функций в Python.

В этом очень простом примере обратите внимание, что “Привет, мир!” является последовательностью – строкой символов. Строки Python ограничиваются парой одинарных или двойных кавычек. Поэтому для печати любой строки сообщения вы можете использовать `print(“<message_string>”)`.

 

Чтение пользовательского ввода

 

Теперь давайте пойдем дальше и считаем некоторый ввод от пользователя с помощью функции `input()`. Вы всегда должны предупреждать пользователя, чтобы они знали, что они должны ввести. 

Вот простая программа, которая принимает имя пользователя в качестве ввода и приветствует их. 

Комментарии помогают улучшить читаемость вашего кода, предоставляя дополнительный контекст пользователю. Однострочные комментарии в Python начинаются с символа #. 

Обратите внимание, что строка в следующем фрагменте кода предшествуется символом `f`. Такие строки называются форматированными строками или f-строками. Чтобы заменить значение переменной в форматированной строке, укажите имя переменной в фигурных скобках, как показано ниже:

# Получение ввода пользователя
user_name = input("Пожалуйста, введите ваше имя: ")

# Приветствие пользователя
print(f"Привет, {user_name}! Приятно познакомиться!")

 

При запуске программы вам будет предложено сначала ввести ввод, а затем будет напечатано приветственное сообщение:

Пожалуйста, введите ваше имя: Bala
Привет, Bala! Приятно познакомиться!

 

Перейдем к изучению переменных и типов данных в Python.

 

Переменные и типы данных в Python

 

Переменные в любом языке программирования – это контейнеры, которые хранят информацию. В коде, который мы написали до сих пор, мы уже создали переменную `user_name`. Когда пользователь вводит свое имя (строку), оно сохраняется в переменной `user_name`.

 

Основные типы данных в Python

 

Давайте рассмотрим основные типы данных в Python: `int`, `float`, `str` и `bool`, используя простые примеры, которые строятся друг на друге:

Целое число (`int`): Целые числа – это целые числа без десятичной точки. Вы можете создавать целые числа и присваивать их переменным следующим образом:

age = 25
discount = 10

 

Это операторы присваивания, которые присваивают значение переменной. В языках программирования, таких как C, вам придется указывать тип данных при объявлении переменных, но Python – это динамически типизированный язык. Он выводит тип данных из значения. Поэтому вы можете заново присвоить переменной значение совершенно другого типа данных:

number = 1
number = 'один'

 

Вы можете проверить тип данных любой переменной в Python с помощью функции `type`:

number = 1
print(type(number))

 

`number` – целое число:

Вывод >>> 

 

Теперь мы присваиваем строковое значение `number`:

number = 'один'
print(type(number))

 

Вывод >>> 

 

Число с плавающей точкой (`float`): Числа с плавающей точкой представляют действительные числа с десятичной точкой. Вы можете создавать переменные типа `float` следующим образом:

height = 5.8
pi = 3.14159

 

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

# Определение числовых переменных
x = 10
y = 5

# Сложение
add_result = x + y
print("Сложение:", add_result)  # Вывод: 15

# Вычитание
sub_result = x - y
print("Вычитание:", sub_result)  # Вывод: 5

# Умножение
mul_result = x * y
print("Умножение:", mul_result)  # Вывод: 50

# Деление (число с плавающей точкой)
div_result = x / y
print("Деление:", div_result)  # Вывод: 2.0

# Целочисленное деление (деление с округлением вниз)
int_div_result = x // y
print("Целочисленное деление:", int_div_result)  # Вывод: 2

# Остаток от деления (остаток от деления)
mod_result = x % y
print("Остаток от деления:", mod_result)  # Вывод: 0

# Возведение в степень
exp_result = x ** y
print("Возведение в степень:", exp_result)  # Вывод: 100000

 

Строка (`str`): Строки – это последовательности символов, заключенные в одинарные или двойные кавычки.

name = "Алиса"
quote = 'Привет, мир!'

 

Булевый (`bool`): Булевы значения представляют либо `True`, либо `False`, указывая истинное значение условия.

is_student = True
has_license = False

 

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

Вот пример, объединяющий все типы данных, которые мы изучили до сих пор:

# Использование различных типов данных вместе
age = 30
score = 89.5
name = "Боб"
is_student = True

# Проверка, превышает ли оценка порог прохождения
passing_threshold = 60.0
is_passing = score >= passing_threshold

print(f"{name=}")
print(f"{age=}")
print(f"{is_student=}")
print(f"{score=}")
print(f"{is_passing=}")

 

А вот и вывод:

Вывод >>>

name='Боб'
age=30
is_student=True
score=89.5
is_passing=True

 

Превышение основных типов данных

 

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

 

Списки

 

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

Здесь `student_names` содержит имена студентов:

# Список
student_names = ["Алиса", "Боб", "Чарли", "Дэвид"]

 

Кортежи

 

Кортежи – это упорядоченные коллекции, похожие на списки, но они неизменяемы, что означает, что вы не можете изменять их содержимое после создания.

Предположим, вы хотите, чтобы `student_scores` был неизменяемой коллекцией, содержащей оценки студентов.

# Кортеж
student_scores = (85, 92, 78, 88)

 

Словари

 

Словари – это коллекции пар ключ-значение. Ключи словаря должны быть уникальными и соответствуют соответствующим значениям. Они изменяемы и позволяют связывать информацию с конкретными ключами.

Здесь `student_info` содержит информацию о каждом студенте – имена и оценки в виде пар ключ-значение:

student_info = {'Alice': 85, 'Bob': 92, 'Charlie': 78, 'David': 88}

 

Но подождите, есть более элегантный способ создания словарей в Python.

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

Но генераторы довольно интуитивно понятны. Если вы хотите, чтобы словарь `student_info` имел имена студентов в качестве ключей и соответствующие им оценки за экзамен в качестве значений, вы можете создать словарь следующим образом:

# Использование генератора словарей для создания словаря student_info
student_info = {name: score for name, score in zip(student_names, student_scores)}

print(student_info)

 

Обратите внимание, как мы использовали функцию `zip()` для одновременного итерирования по списку `student_names` и кортежу `student_scores`.

Output >>>

{'Alice': 85, 'Bob': 92, 'Charlie': 78, 'David': 88}

 

В этом примере генератор словарей непосредственно соотносит каждое имя студента из списка `student_names` с соответствующей оценкой за экзамен из кортежа `student_scores`, чтобы создать словарь `student_info` с именами в качестве ключей и оценками в качестве значений.

Теперь, когда вы знакомы с примитивными типами данных и некоторыми последовательностями/итерируемыми объектами, перейдем к следующей части обсуждения: управляющие структуры.

 

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

 

При запуске скрипта Python выполнение кода происходит последовательно в том же порядке, в котором они находятся в скрипте.

Иногда вам может понадобиться реализовать логику для управления потоком выполнения на основе определенных условий или перебрать итерируемый объект для обработки его элементов.

Мы узнаем, как операторы if-else обеспечивают ветвление и условное выполнение. Мы также узнаем, как перебирать последовательности с помощью циклов и операторов управления циклом break и continue.

 

Оператор if

 

Когда вам нужно выполнить блок кода только в том случае, если определенное условие истинно, вы можете использовать оператор `if`. Если условие оценивается как ложное, блок кода не выполняется.

   

Рассмотрим этот пример:

score = 75

if score >= 60:
    print("Поздравляю! Вы сдали экзамен.")

 

В этом примере код внутри блока `if` будет выполняться только если `score` больше или равен 60. Поскольку `score` равен 75, будет напечатано сообщение “Поздравляю! Вы сдали экзамен.”

Output >>> Поздравляю! Вы сдали экзамен.

 

Условные операторы if-else

 

Оператор `if-else` позволяет выполнять один блок кода, если условие истинно, и другой блок кода, если условие ложно.

   

Давайте построим пример с оценками:

score = 45

if score >= 60:
    print("Поздравляю! Вы сдали экзамен.")
else:
    print("Извините, вы не сдали экзамен.")

 

Здесь, если `score` меньше 60, будет выполнен код внутри блока `else`:

Вывод >>> Извините, вы не сдали экзамен.

 

Цепочка if-elif-else

 

Оператор `if-elif-else` используется, когда у вас есть несколько условий для проверки. Он позволяет проверять несколько условий и выполнять соответствующий блок кода для первого истинного условия, с которым столкнулся.

Если условия в операторе `if` и всех операторах `elif` оцениваются как ложные, выполняется блок кода оператора `else`.

   

score = 82

if score >= 90:
    print("Отлично! Вы получили A.")
elif score >= 80:
    print("Хорошая работа! Вы получили B.")
elif score >= 70:
    print("Неплохо! Вы получили C.")
else:
    print("Вам нужно улучшиться. Вы получили F.")

 

В этом примере программа проверяет `score` по нескольким условиям. Будет выполнен код внутри блока первого истинного условия. Поскольку `score` равен 82, мы получаем:

Вывод >>> Хорошая работа! Вы получили B.

 

Вложенные операторы if

 

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

name = "Alice"
score = 78

if name == "Alice":
    if score >= 80:
        print("Отличная работа, Алиса! Вы получили A.")
    else:
        print("Хороший труд, Алиса! Продолжайте в том же духе.")
else:
    print("Вы делаете хорошо, но это сообщение для Алисы.")

 

В этом примере есть вложенный оператор `if`. Сначала программа проверяет, является ли `name` “Alice”. Если это верно, она проверяет `score`. Поскольку `score` равен 78, выполняется внутренний блок `else`, выводящий “Хороший труд, Алиса! Продолжайте в том же духе.”

Вывод >>> Хороший труд, Алиса! Продолжайте в том же духе.

 

Python предлагает несколько конструкций циклов для итерации по коллекциям или выполнения повторяющихся задач.

 

Цикл for

 

В Python цикл `for` предоставляет краткую синтаксическую конструкцию, позволяющую нам итерироваться по существующим итерируемым объектам. Мы можем итерироваться по списку `student_names` следующим образом:

student_names = ["Alice", "Bob", "Charlie", "David"]

for name in student_names:
    print("Студент:", name)

 

Вышеуказанный код выводит:

Вывод >>>

Студент: Alice
Студент: Bob
Студент: Charlie
Студент: David

 

Цикл while

 

Если вы хотите выполнять определенный фрагмент кода до тех пор, пока условие истинно, вы можете использовать цикл `while`.

Давайте используем тот же список `student_names`:

# Использование цикла while с существующим итерируемым объектом

student_names = ["Alice", "Bob", "Charlie", "David"]
index = 0

while index < len(student_names):
    print("Студент:", student_names[index])
    index += 1

 

В этом примере у нас есть список `student_names`, содержащий имена студентов. Мы используем цикл `while`, чтобы перебрать список, отслеживая переменную `index`.

Цикл продолжается, пока `index` меньше длины списка. Внутри цикла мы печатаем имя каждого студента и увеличиваем `index`, чтобы перейти к следующему студенту. Обратите внимание на использование функции `len()`, чтобы получить длину списка.

Это дает тот же результат, что и использование цикла `for` для итерации по списку:

Вывод >>>

Студент: Алиса
Студент: Боб
Студент: Чарли
Студент: Дэвид

Давайте используем цикл `while`, который удаляет элементы из списка, пока список не станет пустым:

student_names = ["Алиса", "Боб", "Чарли", "Дэвид"]

while student_names:
    current_student = student_names.pop()
    print("Текущий студент:", current_student)

print("Все студенты были обработаны.")

Метод списка `pop` удаляет и возвращает последний элемент в списке.

В этом примере цикл `while` продолжается, пока в списке `student_names` есть элементы. Внутри цикла используется метод `pop()`, чтобы удалить и вернуть последний элемент из списка, и печатается имя текущего студента.

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

Вывод >>>

Текущий студент: Дэвид
Текущий студент: Чарли
Текущий студент: Боб
Текущий студент: Алиса
Все студенты были обработаны.

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

Управляющие операторы цикла

`break` прерывает цикл преждевременно, а `continue` пропускает оставшуюся часть текущей итерации и переходит к следующей.

Вот пример:

student_names = ["Алиса", "Боб", "Чарли", "Дэвид"]

for name in student_names:
    if name == "Чарли":
        break
    print(name)

Управляющий оператор прерывает цикл, когда `name` равно “Чарли”, и выводит:

Вывод >>>
Алиса
Боб

Имитация поведения цикла `do-while`

В Python нет встроенного цикла `do-while`, как в некоторых других языках программирования. Однако вы можете достичь того же поведения, используя цикл `while` с оператором `break`. Вот как вы можете имитировать цикл `do-while` в Python:

while True:
    user_input = input("Введите 'exit', чтобы остановиться: ")
    if user_input == 'exit':
        break

В этом примере цикл будет продолжаться бесконечно, пока пользователь не введет ‘exit’. Цикл выполняется хотя бы один раз, потому что условие изначально установлено на `True`, а затем проверяется ввод пользователя внутри цикла. Если пользователь вводит ‘exit’, выполняется оператор `break`, который прерывает цикл.

Вот пример вывода:

Вывод >>>
Введите 'exit', чтобы остановиться: привет
Введите 'exit', чтобы остановиться: здравствуй
Введите 'exit', чтобы остановиться: пока
Введите 'exit', чтобы остановиться: старайся лучше!
Введите 'exit', чтобы остановиться: exit

Обратите внимание, что этот подход аналогичен циклу `do-while` в других языках, где тело цикла гарантированно выполняется хотя бы один раз, прежде чем проверяется условие.

Заключение и следующие шаги

Надеюсь, вы смогли легко выполнить этот учебник без каких-либо сложностей. Теперь, когда вы поняли основы Python, пришло время начать создавать простые проекты, применяя все концепции, которые вы усвоили. Bala Priya C – разработчик и технический писатель из Индии. Ей нравится работать на пересечении математики, программирования, науки о данных и создания контента. Ее области интересов и экспертизы включают DevOps, науку о данных и обработку естественного языка. Она любит читать, писать, программировать и пить кофе! В настоящее время она работает над изучением и обменом своими знаниями с сообществом разработчиков, создавая учебники, руководства, мнения и многое другое.