это код анфисы который вы последовательно писали на протяжении нескольких тем
# Строки и форматирование
# Вывод на экран
Вы уже умеете выводить на экран текст, складывая строки. А вот как напечатать без этого? Нужно в скобках функции print() перечислить через запятую аргументы, которые она печатает:
Запятая между аргументами по умолчанию заменяется на пробел.
Это значит, что в сообщения можно не добавлять пробелы, когда составляете сложную фразу. Достаточно разделить аргументы функции print() запятой. И, что приятно, количество этих аргументов не ограничено:
# Упражнения
# Метод split()
Разбить фразу на слова, и вообще разделить строку по определённому символу можно методом split() (англ. «разделить»). В результате получится список строк. Метод split() принимает аргумент, указывающий, какой разделитель использовать.
Тогда появятся лишние точки на концах слов. Их удобнее всего убирать методом strip() — он убирает указанные символы в начале и в конце.
# Упражнения
Код вывода результатов на экран уже написан в основном теле программы.
# Форматирование строк
До сих пор для вывода текста на экран вам приходилось собирать его из нескольких частей. Но есть и другой способ. Для сборки текста из разных элементов удобны f-строки (от англ. formatted string, «форматированные строки»). Эти f-строки включают имена переменных внутри фигурных скобок. Значения переменных подставляются в строку автоматически. В коде f-строки выглядят как обычные, только начинаются с символа f перед кавычками:
Преобразование типов из числа в строку f-строки проделывают автоматически:
# Упражнения
# Подробнее о форматировании
В f-строки можно подставлять не только переменные, но и результаты вычислений. Например, арифметические операции:
И обращение к элементам списка:
А также к элементам словаря по ключу:
Второй намного понятнее, хотя строк стало в четыре раза больше. Не так ли? Лучше придерживаться общего правила: f-строки используются только для форматирования вывода, а вычислять все выражения надо вне их. И вообще, не стоит экономить на количестве строчек кода, принося в жертву его читаемость.
# Упражнения
‘Вы прослушали N песен, общей продолжительностью M минут и S секунд.’
# Запросы к друзьям
В предыдущей теме «Словари и множества» вы добавили в код персонального ассистента Виты данные о том, где живут ваши друзья. И она уже умеет отвечать на следующие запросы:
Сейчас вам предстоит расширить возможности Виты. Научить её отвечать на вопросы про отдельных друзей. Начнём с самого простого вопроса «ты где?» — внутри Виты уже хранятся данные о местоположении. Если, например, Коля и Соня находятся в списке друзей, то запросы о них будет выглядеть следующим образом:
Чтобы различать вопросы про отдельных друзей от общих вопросов к Вите, будем начинать общие вопросы с прямого обращения, вот так:
Тогда различать просто. Если вопрос начинается с имени «Вита», то это общий вопрос. А если с другого имени, то это вопрос про конкретного друга. Полагаем, правда, что у нас нет друзей по имени Вита. 😃
# Упражнения
А. Отредактируйте список запросов queries. Все запросы должны начинаться с обращения Вита:
В. Добавьте в список queries новые запросы вида:
Что я сделал не так?
Измените код Анфисы. Оставьте вывод на экран, т.е. вызовы функции print(), только в одном месте — в основном теле программы. Эти вызовы уже написаны в предварительном коде задания.
Все прошлые выводы на экран — в функциях show_count_friends() и process_query() — замените на возвращения результатов из функции оператором return.
Подсказка
Не забудьте вернуть результат выполнения функции show_count_friends() из process_query(), чтобы первому вызову print() было что печатать.
не могу понять, куда вставлять «return»
Простой 1 комментарий
> Что я сделал не так?
Как минимум, не использовал теги для форматирования кода
пропущен count в функции
FRIENDS = [‘Серёга’, ‘Соня’, ‘Дима’, ‘Алина’, ‘Егор’]
def show_count_friends(count_friends):
if count_friends == 1:
return (‘У тебя 1 друг’)
elif 2 = 5:
return (‘У тебя ‘ + str(count_friends) + ‘ друзей’)
def process_query(query):
if query == ‘Сколько у меня друзей?’:
count = len(FRIENDS)
return show_count_friends(count)
elif query == ‘Кто все мои друзья?’:
friends_string = ‘, ‘.join(FRIENDS)
return friends_string
else:
return ‘ ‘
# Внимание! Это те самые вызовы, которые не надо трогать
show_count_friends(5)
print(process_query(‘Сколько у меня друзей?’))
print(process_query(‘Кто все мои друзья?’))
print(process_query(‘Как меня зовут?’))
Eщё надо дописать return query
FRIENDS = [‘Серёга’, ‘Соня’, ‘Дима’, ‘Алина’, ‘Егор’]
def show_count_friends(count_friends):
if count_friends == 1:
return(‘У тебя 1 друг’)
elif 2 = 5:
return(‘У тебя ‘ + str(count_friends) + ‘ друзей’)
def process_query(query):
if query == ‘Сколько у меня друзей?’:
count = len(FRIENDS)
return show_count_friends(count)
elif query == ‘Кто все мои друзья?’:
friends_string = ‘, ‘.join(FRIENDS)
return(‘Твои друзья: ‘ + friends_string)
else:
return(‘ ‘)
return query
# Внимание! Это те самые вызовы, которые не надо трогать
print(process_query(‘Сколько у меня друзей?’))
print(process_query(‘Кто все мои друзья?’))
Яндекс.Практикум. Функции. Где ошибка?
Народ! Хелп! Нифига смысла не пойму!
1. На основе заготовленного кода напишите функцию print_friends_count() для вывода количества друзей. Аргументом сделайте friends_count. Вызовите эту функцию не менее трёх раз с разными аргументами. Значениями friends_count могут быть любые натуральные числа.
2. Напишите цикл для запусков print_friends_count() c аргументами от 1 до 10.
Вот тут я не пойму, что имеется ввиду.
С этим кодом вылезает ошибка:
«Проверьте, работает ли функция print_friends_count() в соответствии с условием.»
Помогите разобраться пожалуйста. Что не так?
Простой 1 комментарий
А, все! дошло! Спасибо!
у меня так получилось
У меня так получилось:
Правда не понятно, если вызвать не функцию print_friends_count, а как print(print_friends_count), то выдается строка вроде:
None
У тебя 1 друг
None
У тебя 2 друга
None
У тебя 3 друга
None
.
А что значит «None» в этом случае непонятно как то.
for friends_count in range(1, 11):
def print_friends_count(friends_count): # объявите функцию здесь
if friends_count == 1:
print(‘У тебя 1 друг’)
elif 2 = 5:
print(‘У тебя ‘ + str(friends_count) + ‘ друзей’)
print_friends_count(friends_count) #Учись, щегол
Не понятно зачем каждый раз в цикле определять функцию. Думаю, в самой задаче ошибка. Имелось в виду что-то такое:
def print_friends_count(friends_count):
if friends_count == 1:
return(‘У тебя 1 друг’)
elif 2 = 5:
return(‘У тебя ‘ + str(friends_count) + ‘ друзей’)
for i in range(1, 11):
print(print_friends_count(i))
Урок 5. Разбиение на функции. Задание 3 Яндекс Практикума.
Задание: Добавьте в функцию process_query() обработку ещё одного запроса ‘Кто все мои друзья?’. В ответ нужно выводить на экран Твои друзья: <список_друзей>, где <список_друзей>— строка, состоящая из списка друзей, разделённых запятой и пробелом.
Добавьте вызов process_query(‘Кто все мои друзья?’) в тело основной программы.
список_друзей>
Что не так в коде? Помогите, пожалуйста, исправить ошибку.
FRIENDS = [‘Серёга’, ‘Соня’, ‘Дима’, ‘Алина’, ‘Егор’]
def process_query(query):
print(«Привет, я Анфиса!»)
if query == ‘Сколько у меня друзей?’: count = len(FRIENDS)
print_friends_count(count)
elif query == ‘Кто все мои друзья?’:
friends_string = ‘, ‘.join(FRIENDS)
print(‘Твои друзья: ‘ + friends_string)
else:
print(‘ ‘)
def print_friends_count(friends_count):
if friends_count == 1:
print(‘У тебя 1 друг’)
elif 2 = 5:
print(‘У тебя ‘ + str(friends_count) + ‘ друзей’)
process_query(‘Сколько у меня друзей?’)
process_query(‘Как меня зовут?’)
process_query(‘Кто все мои друзья?’)
Traceback (most recent call last):
File «main.py», line 9
elif query == ‘Кто все мои друзья?’:
IndentationError: unexpected indent
Поддержка объяснила так:
Вы записали функцию print_friends_count в теле функции process_query.
Удалите лишние отступы, чтобы обе функции выполнялись в теле основной программы.
# Функции
Создание функции называется определение. Оно начинается с ключевого слова def (от англ. definition, «определение»), затем идут имя функции, её аргументы, или параметры в круглых скобках и двоеточие. Начиная со следующей строки, с отступом в 4 пробела от начала, записывают тело функции — код, который она выполняет. Обращение к функции называется вызов функции. Функция вызывается по имени, при вызове ей передают аргументы, с которыми она должна что-то сделать.
Напишем приветствие как функцию:
# Упражнения
# Упражнения tkinter
Напишите оконное приложение выводящее список количества друзей.
Напишите оконное приложение с полем ввода количества друзей. Кнопкой при нажатии на которую выводится сообщение о количестве друзей.
# Аргументы функции
В Python аргументам функций может быть присвоено значение по умолчанию. Оно подставляется, когда при вызове функции вы не оставляете насчёт аргументов никаких инструкций.
Функция say_hello() принимает два аргумента — current_hour и name (англ. name, «имя»), которому задано значение по умолчанию. При вызове только с одним аргументом current_hour значением второго аргумента name станет пустая строка.
При вызове функции можно явно указывать, какому аргументу какое значение соответствует. В таком случае порядок следования аргументов в скобках роли не играет.
# Упражнения
Анфиса может анализировать списки. Например, подсчитывать дни, когда в вашем городе или в городах ваших друзей стояла хорошая погода.
Есть списки средних дневных температур в Москве за май 2017 и 2018 годов. Создайте функцию comfort_count(temperatures) для подсчёта в переданном списке комфортных дней — дней с температурой воздуха от 22 до 26 градусов включительно.
# Разбиение на функции
В больших проектах, написанных на Python, принято выносить весь повторяющийся код в отдельные функции перед телом основной программы. Посмотрим на пример:
Функция say_hello() содержит основную логику, а runner() (от англ. run, «запускать») выполняет роль управляющего механизма. Такое разделение придаёт коду программы аккуратный внешний вид, делает его более выразительным, упрощает чтение.
# Упражнения
# Возврат значений из функции
Пока что все наши функции печатали результаты своей работы на экран. Но обычно задача функции не сводится к выступлениям в печати. Как правило, это код, производящий специальные вычисления. Он не выводит результаты на экран, а возвращает их как значения. Значение вернётся в вызывающий код, и там будет использовано. Например, сохранено в переменной. Если программе нужно, к примеру, несколько раз посчитать одно и то же, эти вычисления поручают особым функциям:
Ключевое слово return (англ. «возвращать») указывает, какое значение функция вернёт основному коду.
# Упражнения
# Вызов функции из функции
Функцию можно вызвать не только из основного кода, но и из другой функции.
Хорошая привычка — выделять вычисления и вывод в отдельные функции, чтобы печать результатов не была разбросана по всему коду.
Если бы мы ошиблись и забыли вернуть строку text из функции show_info(), то вывод получился бы странный: