Программирование Python по моим конспектам Лекция 10

Пост можно топить, минусить и всячески убивать, ибо в горячем он нахер не нужен, а вот подписчикам пригодится.


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


Отвечая на 90% одинаковых вопросов-


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



Я это делаю, потому что мне это нравится.



Список прошлых лекций


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...



http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...



Всем привет. Как обещал, сегодня мы поговорим о функциях.

Но сначала мы договорим о исключении ошибок.

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

Вот такой пример

Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост
Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост

Обратите внимание на то, что здесь были предвидены две разные ошибки. И на то что присутствует else, который, в прочем работает как обычный else. Т.е если мы не заходим в except, то попадаем в else.


И последнее- finally. Cюда мы попадаем в любом случае. Поэтому прошу обратить внимание на результат выполнения программы. Мы сначала попали в except, а потом в finally из за чего и вывелся пустой список.

Далее мы вводим корректное число, обходим оба try, попадаем в else и в finally, куда мы попадаем в любом случае.

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


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


А теперь смотрим как это работает. Вот есть у нас завод. Но что ему нужно, чтобы работать? Ну кроме работников и надсмотрщика с плетью.


Заводу нужен материал. Пусть это будут у нас доски. Так вот. Получаем такую картинку.


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


К примеру- Это функции type и id. В прошлой лекции, скорее всего было не понятно как это работает, но сейчас мы немного приблизимся к разгадке. Возьмем к примеру функцию type. Мы хотели узнать какой тип данных будет у числа 123. Для этого мы брали нашу функцию type, открывали скобочки после нее, выходило так type(), а внутри скобочек уже и писали наши аргументы (дрова для завода). Выходило так type(123). Другими словами, заводу с именем type, мы отправили материал в виде числа 123, и мы знаем что в ответ завод дает нам название типа данных. Либо это будет цело число, либо строка, либо число с запятой и тд.




Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост

А сейчас, ну чтоб ваще понятно стало. Мы еще на одну функцию посмотрим. Называется она min()

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


К примеру min(10,5,3,6,9)

Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост
Нам было не интересно, что происходит внутри функции. Но вот пришло время, когда нам стало интересно. Мы хотим строить свои "заводы"!

Начнем с того, что функции в питоне- это обьект.

итак, вот как выглядит наша функция в природной среде


def function_name(parametr):

инструкции


Состоит функция из головы (первая строка) и тела.

Голова начинается со слова def (от слова define) и названия функции. Имена функций должны состоять из маленьких букв, а слова разделяться символами подчеркивания — это необходимо, чтобы увеличить читабельность. Далее открываются скобочки и туда мы либо пишем параметры либо нет. О этом позже.


Тело функции зачастую начинается с так званного docstring, где мы пишем то, что наша функция делает.

""" функция умножает два числа и возвращает  результат"""

Далее- мы пишем сами инструкции, которые нам стоит исполнить. А вот потом очень важная штука, которая либо есть либо нет в функции. Называется она return

Но о всем по порядку.


Давайте напишем простую функцию.

Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост
Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост

Первая строка-декларируем функцию print_something

вторая- мы пишем то, что функция делает

и  ниже мы саму функцию вызываем.



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

У нас была эта функция и аргументом в ней было 123. Т.е мы эти 123 куда то отправляем. Но куда?

Сейчас мы создадим свою функцию и поймем, куда же уходят аргументы. См. рис ниже.

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

В теле функции мы прописываем команду- вывести переменную name на экран. После чего действия функции заканчивается.


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

Поэтому мы передаем ей строку, на которую указывает переменная n.

Поэтому мы n делаем аргументом функции  вот так print_name (n)

Иначе говоря мы говорим. Отправь нашу n функции print_name ().

Функцию мы можем выполнять сколько угодно раз.

Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост
Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост

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

Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост

Збс стрелочки?


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

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

Сейчас нас интересует мистическое return (возвращать).

В данном случае return возвращает строку 'мебель'. А вообще может возвращать что угодно. Даже кортежи, которые в себя включают другие обьекты.


Итак мы отправили два аргумента, получили ответ, и его вывели на экран.


Бывают случаи, когда нам необходимо сделать аргументы по "умолчанию". Вот пример.

Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост
Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост

Я передаю только один аргумент, а второй уже прописан по умолчанию name='user'

Если этот аргумент ничего не примет, он по умолчанию примет значение 'user', а если же мы передадим ему что-либо, то он укажет на то, что мы ему передали.

И последнее на сегодня, но не последнее с функциями.


Выше я говорил о том, что не стоит путать местами аргументы функции.

Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост
Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост

Теперь я меняю аргументы местами, и получаем каку.

Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост
Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост

Для того чтобы этого не было, нужно либо следить за порядком аргументов,  либо делать как ниже

Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост

В данном случае эти аргументы называются Именованными. Мы сразу прописали какому параметру какой аргумент принадлежит. И нам уже открыто похер в каком порядке они стоят.

я лично не пользуюсь этим способом, но если вам нравится- пользуйте на здоровье.


С помощью вышесказанного вы уже можете приступить к заданию с прошлой лекции.

Повторю его



Теперь мы немного внесем жизнь в наш космос.

Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост

Первым пунктом меню было у нас- информация о планете.



Задача такова. При вводе номера планеты (из карты)



1. выводится случайносгенерированное из русского алфавита название планеты. Важно соблюдать чередование гласных и согласных.


2.Выводится количество населения планеты и расса, ее заселяющая (аналогично случайносгенерированное название)



3 Выводим Основные ресурсы, которые добывает планета и их количество. Это тоже происходит рандомно. Ресурсы- газ, электричество, еда.



4 Выводим отношение планеты к нам. Хорошее негативное или нейтральное


5 Выводим количество армии



6 выводим краткую историю планеты.



Все эти данные должны быть готовы быть изменены в любой момент.



Советую использовать двухмерный массив(последовательность). Сами выбирайте какой.

Программирование Python по моим конспектам Лекция 10 Питон, Программирование, Лекция, Длиннопост

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


Кстати, названия планет-населений могут вас порадовать. Я вчера норм так поржал со всяких хуянцев уебанцев.


На этом я все.