Программирование 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 Питон, Программирование, Лекция, Длиннопост

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


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


На этом я все.

Вы смотрите срез комментариев. Показать все
2
DELETED
Автор поста оценил этот комментарий

Спасибо тем кто делает такое. Но я все жду лекции/уроков в которых будут обучать на примере реального приложения. Т.е. которое реально пригодится и будет использоваться в жизни.

раскрыть ветку (13)
3
Автор поста оценил этот комментарий
Всегда пожалуйста. Ну например такого?
Иллюстрация к комментарию
раскрыть ветку (2)
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
Автор поста оценил этот комментарий
Я не программист. А питон я изучал в рамках программы факультета информатики
Автор поста оценил этот комментарий

Реальное приложение имеет много стороннего бэкграунда, процесс его создания очень сильно отличается от процесса обучения. И если у тебя достаточно опыта и знаний чтобы даже начать реальное приложение, то обучение тебе уже и не нужно.


Те уроки, которые якобы на реальном приложении, или, как модно писать - никакой теории максимум практики - на самом деле не учат абсолютно ничему кроме бездумного копирования чужих решений.


По сути если бы были правильные уроки на основе создания реального приложения, то они бы начинались с очень длинных и занудных лекций по проектированию ИС, и большая часть энтузиазма отвалилась бы ещё до непосредственно реализации спроектированной системы. Такие уроки требовали бы личного общения с преподавателем, хотя бы по 2-4 часа в неделю, а так же наличия командной работы.


Есть два места где можно получить такие уроки, первое это ВУЗ, но надо учитывать что не все ВУЗы в России дают качественное образование, особенно в области прикладной информатики.


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

раскрыть ветку (9)
Автор поста оценил этот комментарий

не все ВУЗы в России дают качественное образование

ну вот тебе для сравнения мои лекции из ВУЗа Германии. И это все, что у нас было. Эти лекции и практические по ним. Все. Разве в России не так? Да и вообще что такое реальное приложение? Почему приложение, которое складывает два числа не реальное, если вот именно это мне и нужно? У меня несколько лет было приложение, которое решает квадратное уровненные. И я его активно использовал, хотя оно было простоедо ужаса. Но для меня оно было вполне реальным, так как задачу свою исполняло и использовалось мной регулярно. Поэтому, мне кажется, тут ошибка в терминологии.

дочитай хотя бы одну книжку об интересующем тебя языке,
это да- тут бесспорно. Причем, по моему мнению, Лутц должен быть не первой книгой, а второй. Первой должно быть что то проще..Типа там питон для чайников и ему подобное.



раскрыть ветку (8)
Автор поста оценил этот комментарий

Ну я под реальным понимаю приложение готовое для поставки пользователям. print(input()+input()) готово для поставки пользователям? - нет. Нет тестов, нет документации, много чего нет, а самое главное - нет спроса, а значит - нет денег.


А если под реальным имелись ввиду ручные скриптики для получения сообщений в ВК, то тоже не понимаю в чём разница, и тогда пришлось бы использовать кучу левых библиотек, и объяснять каждую из них, что немного бредово в условиях изучения языка.


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


По поводу ВУЗов, в большинстве материал безнадёжно устарел, и рассказывают его преподаватели, не имеющие представления как этот материал используют в реальной жизни.


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

раскрыть ветку (7)
Автор поста оценил этот комментарий
Ну я под реальным понимаю приложение готовое для поставки пользователям


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


А игры..да..на играх можно здорово натренироваться. Да и развивает нестандартное мышление.


Кстати по поводу работы программистом в странах СНГ. Как ты относишься к самоучкам, а не выпускникам специализированных ВУЗов? Я просто отследил какой то тренд такой, что народ прет в профессию только потому, что это гипотетически деньги приносит. Но, черт побери, мне кажется, что это должно идти..от души что-ли. Поэтому у нас уже одни программисты везде.


В Германии большая редкость, если ты прогер без образования. Я таких даже не знаю. Это незаконно даже, наверное.

раскрыть ветку (6)
Автор поста оценил этот комментарий

Есть много веб-студий, где знания которые дают в ВУЗах мягко говоря не особо нужны на первых порах, а там походу получаешь рабочий опыт, изучаешь окружение получаешь недостающие знания из книг, общения и чужого кода. Ничего плохого в этом нет.


Разве что есть проседание в математике (всё же её самостоятельно изучать занятие сомнительное), но оно не критично во многих областях программирования.


А по поводу от души, есть много людей у которых душа лежит ко всякой херне за которую не платят, а жрать то надо. И хорошо если они идут работать кем-то полезным для общества, а не становятся например преступниками.

раскрыть ветку (5)
Автор поста оценил этот комментарий

По поводу ВУЗов - картина именно такая :(

...мне кажется, что это должно идти..от души что-ли...

Тут я с @derBeobachter пожалуй, соглашусь. Для меня это что-то вроде "цифрового искусства" (и всё около этого). Да и дерьмовый продукт выпускать - это уж из ряда вон...

получаешь недостающие знания из ... чужого кода

Вот с этим не всё так просто. Таким макаром знания можно постичь, только если кто разжуёт, что к чему. Напролом тут не попрёшь, хоть убей :( Вот как тут разобраться, если соответствующих знаний нет?


mov edx, [esi+0Ch]

mov eax, [edx+58Ch]

push 42480000h

add eax, 44h

push eax

lea ecx, [esp+44h+var_C]

push ecx

call sub_40FEC0

add esp, 0Ch

lea ecx, [esp+3Ch+var_C]

call sub_406DA0

fcomp ds:flt_86F84C

fnstsw ax

test ah, 5

jp loc_666CC7

mov al, [esi+2Ch]

test al, al

mov [esp+3Ch+var_2D], 1

jns short loc_666C48


Тут же чёрт ногу сломит :) И таких строк ~200млн. Бошка кругом от них :/

раскрыть ветку (4)
1
Автор поста оценил этот комментарий

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


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

раскрыть ветку (1)
Автор поста оценил этот комментарий
В начале будет сложно, но потом будешь читать как книгу

Тут полностью согласен, вот только - я ещё в самом начале, и asm для меня ещё слишком круто :(

1
Автор поста оценил этот комментарий
А ты вопросы задавай больше. На киберфоруме например. Как я тебе и говорил


оооо..я тут нашел еще старую тему свою, которую я еще создал в студенчестве. Правда, никто мне на нее не ответил..но ностальгия то какая


киберфорум.ru/informatics/thread1117253.html

раскрыть ветку (1)
Автор поста оценил этот комментарий
вопросы задавай

Сомневаюсь, что это мне станут разжёвывать :( @zkksch, Это кусочек кода чужой хуинди игры =)

З.Ы. И как в итоге поступил то? =)

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку