1. Цикл while
Цикл — конструкция, которая повторяет блок кода. Одно выполнение тела называется итерацией. Цикл while — цикл с предусловием: тело выполняется, пока условие истинно.
i = 1
while i <= 5:
print(i)
i += 1
# Output: 1 2 3 4 5
Ключевые части: инициализация переменной, условие, тело цикла и обновление переменной. Если обновление забыть, цикл станет бесконечным.
Операторы break и continue
break немедленно завершает цикл. Его удобно использовать для выхода по команде пользователя или при нахождении нужного значения.
i = 1
while i <= 10:
print(i)
if i == 5:
break
i += 1
# Output: 1 2 3 4 5
continue пропускает оставшуюся часть текущей итерации и возвращается к проверке условия. Важно, чтобы переменная цикла обновлялась до continue, иначе возможно зацикливание.
i = 0
while i < 5:
i += 1
if i % 2 == 0:
continue
print(i)
# Output: 1 3 5
Бесконечный цикл
Явный бесконечный цикл while True: полезен, когда число итераций заранее неизвестно. Единственный способ выйти — оператор break.
while True:
user_input = input("Enter 'stop' to finish: ")
if user_input == "stop":
print("Loop finished.")
break
print(f"Echo: {user_input}")
Конструкция while/else
Блок else после while выполняется, только если цикл завершился естественным образом — то есть условие стало ложным. При выходе через break блок else пропускается.
i = 1
while i <= 3:
print(i)
i += 1
else:
print("Loop completed without break.")
# Output: 1 2 3
# Loop completed without break.
2. Модуль random
Модуль random входит в стандартную библиотеку и генерирует псевдослучайные числа. Основные функции:
random.random()— float от0.0до1.0(не включая 1.0).random.randint(a, b)— целое отaдоbвключительно.random.randrange(start, stop, step)— случайный элемент диапазона, как вrange.
import random
print(random.random()) # e.g. 0.3744
print(random.randint(1, 10)) # e.g. 7
print(random.randrange(1, 10)) # e.g. 8 (1..9)
print(random.randrange(1, 10, 2)) # e.g. 5 (odd numbers)
random часто используют в играх, симуляциях, тестовых данных и перемешивании последовательностей. Для криптографически стойкой случайности используйте модуль secrets.
3. Базовые операции со строками
Неизменяемость строк
Строки в Python — неизменяемые (immutable) объекты. «Изменить» строку можно только создав новую и присвоив её переменной.
s = "Hello"
s = s + " world!"
print(s) # Hello world!
Кодировки: ASCII, Unicode, UTF-8
Кодировка — способ преобразования символов в числа. ASCII кодирует 128 символов (0–127) одним байтом. Unicode присваивает каждому символу уникальный код. UTF-8 — представление Unicode переменной длиной: ASCII-символы занимают 1 байт, кириллица — 2 байта, многие иероглифы — 3 байта, редкие символы и эмодзи — 4 байта.
text = "Python"
encoded = text.encode("utf-8")
print(encoded) # b'Python'
print(encoded.decode("utf-8")) # Python
ord() и chr()
ord(char) возвращает код Unicode символа, а chr(code) — символ по коду.
print(ord("A")) # 65
print(ord("a")) # 97
print(chr(65)) # A
print(chr(97)) # a
Сравнение строк
Строки сравниваются лексикографически, символ за символом, по кодам Unicode. Заглавные буквы имеют меньшие коды, чем строчные, поэтому "Apple" < "apple".
print("apple" == "apple") # True
print("apple" < "banana") # True
print("apple" > "Apple") # True ('a' > 'A')
len() и индексация
Функция len(s) возвращает длину строки. Индексы начинаются с 0. Отрицательные индексы отсчитываются с конца: -1 — последний символ. Обращение к несуществующему индексу вызывает IndexError.
text = "Python"
print(len(text)) # 6
print(text[0]) # P
print(text[-1]) # n
index = 5
if index < len(text):
print(text[index])
else:
print("Index out of range!")
Срезы
Срез s[start:end:step] возвращает подстроку. start включается, end — нет. Если индекс опущен, берётся начало или конец строки. Отрицательный step идёт в обратном направлении.
text = "Python programming"
print(text[0:6]) # Python
print(text[7:]) # programming
print(text[::-1]) # gnimmargorp nohtyP
print(text[-4:-11:-1]) # gimmarg
Оператор in
Оператор in проверяет, содержится ли подстрока в строке. В комбинации с not — проверяет отсутствие.
text = "Python programming"
print("Python" in text) # True
print("Java" not in text) # True
while, random и строках, чтобы увидеть полный список строковых методов.