К следующему слайду
Нажмите кнопку Вправо
Программисты пишут разный код, но состоит он из похожих строчек
Подготовлено онлайн-курсом
В этих слайдах мы показываем кусочки кода, которые могут встретиться вам в любом проекте: от учебных проектов до сайтов и чатботов.
Надеемся, что это послужит для вас библиотекой готовых паттернов для решения ваших проблем, пока вы ещё учитесь.
Навигация:
продолжение примера -- стрелка вниз
другой пример -- стрелка вправо
Накопление в цикле
test_results = {
'Петя': 2,
'Маша': 5,
'Вася': 4,
}
marks = test_results.values()
marks_sum = 0
# Накапливаем сумму, добавляя по одной оценке за раз
for mark in marks:
marks_sum = marks_sum + mark
average_result = marks_sum / len(test_results)
print('Средний бал:', average_result)
Какой средний бал набрали ученики класса ?
Продолжение по стрелке вниз
Другой пример -->
Сначала вычислится сумма справа от знака присваивания `=`.
Затем перезапишется старая переменная marks_sum
Оценки учеников в виде списка:
[2, 5, 4]
Накопление в цикле
test_results = {
'Петя': 2,
'Маша': 5,
'Вася': 4,
}
marks = test_results.values()
marks_sum = sum(marks)
average_result = marks_sum / len(test_results)
print('Средний бал:', average_result)
То же самое, но короче
Продолжение по стрелке вниз
Другой пример -->
Стандартная функция sum считает сумму элементов
Поиск в словаре
who_took_books = {
"Игорь Васильев": "Гарри Поттер",
"Иван Фролов": "Война и мир",
"Маргарита Киркина": "Мастер и Маргарита",
}
book_to_find = "Война и мир"
for name, book in who_took_books.items():
if book == book_to_find:
print(name)
Кто-то взял книгу "Война и мир". У кого она?
Продолжение по стрелке вниз
Другой пример -->
Поиск в словаре
who_took_books = {
"Игорь Васильев": "Гарри Поттер",
"Иван Фролов": "Война и мир",
"Маргарита Киркина": "Мастер и Маргарита",
}
book_to_find = "Война и мир"
for name, book in who_took_books.items():
if book == book_to_find:
break
print(name)
А как "вылезти" из цикла?
Продолжение по стрелке вниз
Цикл перебирает значения name. Когда сработает break - в переменной name останется то значение, которое было перед срабатыванием break
Поиск в словаре
who_took_books = {
"Игорь Васильев": "Гарри Поттер",
"Иван Фролов": "Война и мир",
"Маргарита Киркина": "Мастер и Маргарита",
}
book_to_find = "Война и мир"
for name, book in who_took_books.items():
if book == book_to_find:
found_name = name
break
else:
found_name = None
if found_name:
print(found_name)
else:
print("Книгу никто не брал")
А если книга не найдётся?
Сработает только если не срабатывал break
Другой пример -->
Продолжение по стрелке вниз
Поиск в словаре
who_took_books = {
"Игорь Васильев": "Гарри Поттер",
"Иван Фролов": "Война и мир",
"Маргарита Киркина": "Мастер и Маргарита",
}
def find_book(books, book_to_find):
for name, book in books.items():
if book == book_to_find:
return name
found_name = find_book(who_took_books, "Война и мир")
if found_name:
print(found_name)
else:
print("Книгу никто не брал")
То же самое, но с функцией
Возвращает строку или None
Другой пример -->
Для следующего примера жми -->
Наполнение списка в цикле
def get_fruit_price(fruit):
...
return price
fruits = [
"Яблоко",
"Груша",
"Банан"
]
for fruit in fruits:
price = get_fruit_price(fruit)
print(fruit, price)
Есть функция, которая генерирует строки, хочу применить её много раз
Продолжение по стрелке вниз
Другой пример -->
Наполнение списка в цикле
def get_fruit_price(fruit):
...
return price
fruits = [
"Яблоко",
"Груша",
"Банан"
]
for fruit in fruits:
price = get_fruit_price(fruit)
print(f"Фрукт {fruit} стоит {price}")
Теперь хочу красивый вывод
Продолжение по стрелке вниз
Это не опечатка, это f-строка
Наполнение списка в цикле
def get_fruit_price(fruit):
...
return price
fruits = [
"Яблоко",
"Груша",
"Банан"
]
fruit_prices = {}
for fruit in fruits:
fruit_prices[fruit] = get_fruit_price(fruit)
Теперь хочу "запомнить" значения в словарь
Продолжение по стрелке вниз
Наполнение списка в цикле
def get_fruit_price(fruit):
...
return price
fruits = [
"Яблоко",
"Груша",
"Банан"
]
fruit_prices = []
for fruit in fruits:
price = get_fruit_price(fruit)
fruit_prices.append(price)
Хочу не словарь, а список
Другой пример -->
Пользовательский интерфейс
correct_url = False
while not correct_url:
url = input()
if url.is_correct():
correct_url = url
else:
print("Не та ссылка!!!")
print("Если вы это читаете, вы ввели верную ссылку")
Хочу требовать от пользователя ссылки, пока не введёт правильную
Продолжение по стрелке вниз
Другой пример -->
Но вообще, так делать плохо. Лучше закрыть программу с сообщением "Не та ссылка", чем вечно требовать от юзера ссылки. А что, если у него нет "правильной ссылки"? Как ему теперь закрыть программу? Это не забота о юзере, это неудобно.
Пользовательский интерфейс
def get_url():
url = input("Введите ссылку: ")
if not url.is_correct():
print("Не та ссылка!!!")
get_url()
correct_url = get_url()
print("Если вы это читаете, вы ввели верную ссылку")
Ни в коем случае не делайте так
Другой пример -->
Python будет вызывать функцию get_url раз за разом, и если пользователь будет достаточно настойчив (очень настойчив), то код упадёт с ошибкой StackOverflow, т.к. у него переполнится стек вызовов.
Проще говоря, у него записано, что get_url вызвал get_url, а его вызвал get_url, а его вызвал get_url... и вот "Насколько глубоко можно вызывать" у Python ограничено.
Создано для онлайн-курса https://dvmn.org