Программирование 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
Автор поста оценил этот комментарий

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

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

@derBeobachter , ты сюда еще заходишь, читаешь? есть смысл выкладывать код?

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

Привет, хожу, читаю. Однако не обещаю быстрый ответ. На работе завал

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

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

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

вот так будет работать

Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий
но даже это не панацея, если оно и работает. Так как

Планета на экране будет номер 2, а в массиве она - планета 4. И так далее.

Не есть гуд.

Иллюстрация к комментарию
показать ответы
Автор поста оценил этот комментарий

Хорошая штуковина =) Только оказались чуток сложнее, чем я ожидал :( Сижу, продолжаю изучать, пытаюсь подружиться с ними :)

З.Ы. А в остальном функа нормально написана? Или как всегда, выбросить и забыть?

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

ну я бы сказал..ты знаешь способ поизящнее. Я точно  знаю, что ты знаешь

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

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

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

Тут я с @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млн. Бошка кругом от них :/

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


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


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

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

Здоров!

Человек неподготовленный это не поймет

Это точно :) Мне ещё это рановато, знаний всё ещё неть =(


Чёт я совсем запутался :( Такая хреновина есть:


def randstring():

    names_planet=[]

    for j in range(random.randint(4,8)):

        symbol_one=random.choice('аеёиоуыэюя')

        names_planet.append(symbol_one)

        symbol_two=random.choice('бвгджзйклмнпрстфхцчшщъь')

        names_planet.append(symbol_two)


    return names_planet


Вызов:

print('Планета', randstring(), ...)


Пишет:

Планета ['о', 'ц', 'я', 'д', 'ё', 'ш', 'ю', 'ц'] ...


Куды уж мне до "цепей Маркова" =С

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


String = ''.join(names_plane)

return String


дабы список вернула функция. Кстати, как тебе функции? Зашли?

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

Не слушай его :) правильный генератор слов строится на основе цепей маркова: https://ru.wikipedia.org/wiki/%D0%A6%D0%B5%D0%BF%D1%8C_%D0%9...


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


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


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


Если надо может быть смогу откопать код.

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

Не согласен с тобой категорически, ты советуешь слишком высокие материи новичку, который спрашивает, что то типа


Списком сделать? В цикл for лучше запихнуть? Или попробовать функу оформить?

Это слишком жесть. Человек неподготовленный это не поймет. Пусть сначала хоть функции поковыряет, пусть поймет зачем они нужны и тд. У тебя реально классные советы, но они классные для меня, или для других, которые хоть более-менее что то там программируют. Товарищ  @NighMare.4you только постигает науку, и ты сейчас можешь ему вообще всю охоту отбить.

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

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

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

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

Ясненько, пасиб :) Списком сделать? В цикл for лучше запихнуть? Или попробовать функу оформить?

З.Ы. Как успехи с кандидатской? =)

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

Кандидатская..сцуко..не вспоминай..видеть ее уже не могу

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

Здоров! Спасибо за лекции :) Прошлую я провтыкал =С Эх :(

Есть вопросы по заданию: как сделать генератор названий? Чёт не знаю, с какой стороны подойти...

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

Привет! Генератор..да просто очень. Берешь две строки- одна с согласными буквами, другая с гласными. и по очереди из каждой рандомную буквочку цепляешь. Вот и все)

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

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


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


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


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


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

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


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


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


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


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

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

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


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


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


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


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

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

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

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

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



показать ответы