Введение в функции
Содержание
- Функции, которые уже написаны
- Определение функций
- Параметры функции
- Возврат значения из функции
- Пример программы с функциями
- Домашнее задание
Функции, которые уже написаны
Даже не зная, что такое функция, мы с вами уже многократно имя пользовались.
print(), int(), float(), range(), len() и т.п. - это все функции, которые написаны за нас.
Что эти функции делают, можно легко узнать по названию или погуглив 10 секунд.
В Python куча встроенных функций. Например, можно взглянуть на этот список - https://pythonworld.ru/osnovy/vstroennye-funkcii.html
Определение функций
Часто бывает удобно один раз написать логически завершённый блок кода и при необходимости запускать его, а не копировать многократно.
Оформляется блок функции так:
def say_hello():
print('Hello!')
Здесь: def — ключевое слово (сокр. define); say_hello — название функции; содержимое блока (в данном случае один вызов print()) — со стандартным отступом.
После того, как мы определили функцию, мы можем её вызывать:
>>> say_hello()
'Hello!'
Параметры функции
Функции могут принимать параметры на вход. В этом случае они указываются в скобках после названия функции:
def say_hello(username, age):
if len(username) > 0:
print('Hello, ' + username)
else:
print('No username given...')
if age > 0:
print('age =', age)
Имена переменных, объявленные внутри функции, не будут видны в остальной программе. x в функции и x в остальной программе — это разные переменные.
Вызовем эту функцию дважды:
>>> say_hello("Vasya", 42)
Hello, Vasya
age = 42
>>> say_hello("", 8)
No usename given...
age = 8
Возврат значения из функции
Функции также могут возвращать результат выполненных операций с помощью оператора return:
def choose_max(a, b):
if a > b:
return a
else:
return b
Найдём максимальное из двух чисел:
>>> max_five_three = choose_max(5, 3)
>>> print(choose_max(13, 14))
14
return прекращает выполнения функции
def say_hello():
print('Hello!')
Теперь все программы должны быть написаны так, чтобы код разбивался по функциям. Функции должны быть не длиннее примерно 10 строк. В практике написания кода на питоне принято, чтобы сначала определялись все функции, а потом последовательно вызывались внутри одной - главной - функции, которую обычно называют main()
Совсем правильной композицией кода было бы сначала определить все функции, потом определить главную функцию, а потом вызвать её внутри такой конструкции:
if __name__ == '__main__':
main()
Пример программы с функциями
Ниже представлена пример того, как обычно структурированы программы на питоне:
"""Простая программа-калькулятор"""
OPERATORS = ['+', '-', '*', '/']
OPS_STR = ', '.join(OPERATORS)
def get_number(nonzero):
"""Запросить у пользователя число и вернуть его
nonzero : аргумент типа bool, если False то не проверять является ли число
нулём, в обратном случае спрашивать до тех пор, пока не будет введено
отличное от нуля число
"""
x = float(input('Введите число: '))
if not nonzero:
return x
while x == 0:
x = float(input('На ноль делить нельзя, введите другое число: '))
return x
def get_operator():
"""Запросить у пользователя оператор
Спрашивает у пользователя оператор до тех пор, пока не будет введён один из
поддерживаемых программой
"""
while True:
x = input('Введите оператор: ')
if x in OPERATORS:
return x
print(x, ' - не оператор, выберите из списка:', OPS_STR)
def main():
a = get_number(False)
op = get_operator()
b = get_number(True)
print(a, op, b, '=', end=' ')
if op == '+':
print(a + b)
elif op == '-':
print(a - b)
elif op == '*':
print(a * b)
else:
# op == '/'
print(a / b)
if __name__ == '__main__':
main()
Домашнее задание
Вам нужно написать программу-гадалку. В этом задании вам нужно использовать в качестве основы файлы из специального репозитория. Файл book.txt содержит текст книги, а в fortuneteller.py написан скелет кода, который вам нужно дописать. Весь код, кроме уже написанного блока if __name__ == '__main__':, должен быть в функциях.
Программа предлагает пользователю ввести вопрос и переспрашивает до тех пока не будет введён текст, завершающийся знаком вопроса. Затем методом, зависящим от вашего варианта, выбирается ответ. Ответ нужно вывести вместе с красивой фразой, в духе «В своём хрустальном шаре я вижу ответ на твой вопрос: “огурец”»
-
Пусть суммарное число букв «а» и «к» в вопросе равно
c, число слов в нём —w, аx = c*w. Найдите в текстеx-ое с конца слово и используйте его в качестве ответа. Еслиxслишком большой, выдайте второе слово текста. Нумерация с нуля. -
Пусть число слов равно
w. Начиная со строки под номеромw(нумерация с нуля) найдите первое слово длинной хотя бы два символа, которое начинается с заглавной буквы. Выдайте это слово в качестве ответа. Еслиwслишком велико, то в качестве ответа используйте слово «начало». -
Пусть длина последнего слова вопроса равна
c, а число строк в тексте, начинающихся с кавычки"равноn. Найдите в текстеc % n + 1строку, начинающуюся с символа"(нумерация с нуля) и используйте её в качестве ответа. -
Пусть вопрос состоит из
wслов, самое длинное слово в нём — изcбукв. В качестве ответа выдайте первое слово из строки под номеромw * c(нумерация с нуля). Если номер слишком большой, то в качестве ответа выдайте слово «джакузи». -
Разбейте вопрос на слова и проверьте, встречаются ли они в тексте. Если в тексте встречается хотя бы два из слов вопроса, то ответьте «да», если ровно одно слово, то ответьте «может быть», а если ни одного, то ответьте «нет». Строчные и заглавные буквы считать одинаковыми. Проверять уникальность слов вопроса не нужно.
-
В качестве ответа на вопрос выведите последнее слово текста, начинающееся на ту же букву, что и вопрос. Строчные и заглавные буквы считать одинаковыми. Если вы не смогли найти такое слово, в качестве ответа используйте строку «42».
-
Пусть число символов в вопросе равно
c, а число строк в книге равноn. В качестве ответа выдайте самое длинное слово из строки под номеромc % n(нумерация с нуля).