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

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


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

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

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

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



Привет товарищи. Сегодня я не делал ссылки на старые лекции. Ибо их уже дохрена и они занимают много места. Уж простите


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

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

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


После этого переменная а автоматически увеличивается на единицу и процесс продолжается пока не мы не достигнем конца последовательности

Это я, видимо, о С++ думал, а писал о питоне. Так что сильно меня не бейте.

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

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



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

А теперь давайте представим себе такую задачу.


x=(a or b) and c



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

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

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

Как мы это можем осуществить? Нам нужен цикл, который будет каждый раз менять значения наших а b c  на 1 и 0. Но у нас 3 переменных, которые каждый раз должны принимать новое значение. А это вам не это. Тут надо бы подумать. Нам нужен такой цикл который бы каждый свой вызов менял значения переменных как в первых трех столбцах. Для решения этой задачи мы можем использовать итерацию в итерации. А в нашем случае интерацию в итерации в итерации))


смотрим

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

А теперь смотрим, что происходит. Основной (внешний  цикл) у нас отвечает за переменную а

при первом витке цикла

1 а у нас указывает на 0

2 переходим к вложенному циклу, который отвечает за b

3 b указывает на 0

4 переходим к вложенному циклу, который отвечает за с

5 с указывает на 0

6 пишем 0 0 0 0

7 !в том же цикле!, который отвечает за с.

8 с указывает на 1

9 пишем  0 0 1 0

10 возвращаемся к основному циклу, который отвечает за b

11 b указывает на 1 (а все еще 0)

12 переходим к вложенному циклу, который отвечает за с

13 с указывает на 0

14 пишем 010 0

и так далее


итого мы имеем- мы не возвращаемся к внешнему циклу пока условия его внутренних циклов не будут исполнены.

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


Для начала давайте разберемся, что это за телка такая Фибаначя.

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

Короче..это мужик.

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


"Человек посадил пару кроликов в загон, окруженный со всех сторон стеной. Сколько пар кроликов за год может произвести на свет эта пара, если известно, что каждый месяц, начиная со второго, каждая пара кроликов производит на свет одну пару?".

Эта задача так озадачила нашу Фибоначу, шо он вывел такую формулу

Программирование Python по моим конспектам Лекция 9.4 Программирование, Питон, Лекция, Длиннопост
В переводе на русский - числа Фибоначчи это


линейная рекуррентная последовательность натуральных чисел, где первое и второе равно единице, а каждое последующее — сумме двух предыдущих: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377


Мы же можем посчитать последовательность с помощью простого скрипта

Смотрим ниже

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

И такой результат имеем

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

Давайте теперь разберемся что же происходит.

Начнем мы с двух первых чисел a1 и a2, два наших кролика)

Далее мы выводим их на экран

и в 18-повторениях нашего цикла мы делаем следующее

создаем переменную а, которая в формуле тов.Фибоначчи обозначена как Fn, и которая является следующим членом последовательности

она начинает указывать на сумму двух предыдущих членов последовательности Fn-1 и Fn-2.

Выводим ее на экран.

Смещаемся вправо. Иначе говоря наша старая а1 стала указывать на значение, на которое раньше указывала а2, а последняя же теперь указывает на наш новый член а.


То, что мы сейчас сделали  называется в некоторых кругах как


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



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


Рассмотрим такой пример. Нужно нам вычислить является ли число простым. Это значит, что оно больше 1 и делится только на 1 и на себя без остатка

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

если 3 строка наши условия удовлетворяет, иначе говоря мы находим делитель числа, то цикл нам больше  не нужен так как своего мы добились. Мы выходим из цикла (а в данном случае и из скрипта) с помощью команды break. Она выбрасывает нас из цикла (я даже стрелочку нарисовал) и дальше интерпретатор следует правилам, которые должны быть исполнены после этого цикла. В нашем случае это выход их программы так как других команд нет.


и последний на сегодня зверь, которого зовут continue


Он более гуманный брат брейка. Он также прерывает цикл, НО не выбрасывает нас их него, а бросает  нас в начало этого цикла.

При условии если

для for цикла интераторная последовательность не исчерпана

для while условие цикла еще выполняется


А вот и программка, что согласные буквы ищет в слове

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

мы ищем каждый символ нашего слова в заданном списке гласных.

Если нашли - работа цикла прерывается и мы идем к началу цикла.Если не нашли-счетчик увеличивается.


В отличии от break из цикла нас не выбрасывает.


То есть - после continue  или break в теле цикла могут находиться другие команды и вообще++11500 строк. Но если у нас нет желания по каким то причинам исполнять их, то мы на наше усмотрение используем continue или break.


Ну и в конце маленькое, но для новичков геморройное задание.

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

Короче задачка такая.

Поле (космос типа) 10 *10 клеток, которое необходимо "заселить" десятью случайными "планетами", которые  каждый раз случайно разбросаны по карте.

При запуске программы каждый раз генерируется новое поле с новым расположением планет.

Пространство не занятое планетой отмечено точкой. Пространство занятое планетой отображается порядковым номером этой.

Ниже поля находится меню. Как на картинке. Функционал меню будем развивать позже, поэтому оставляем пока так.

Два примера запуска программы ниже

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

Подсказки- есть несколько вариантов решения. Либо созданием последовательности из 100 клеток и вывода на экран. Тогда каждая клетка будет иметь свой номер от 0 до 99

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

(0,1)(0,2) и тд., ну и еще другими способами, которые вам больше нравятся.

Естественно вы будете использовать функцию рандома.

Заранее предупреждаю- рандом будет вам создавать иногда две звезды на одну коодинату. Следите за этим.

Все необходимые знания вы найдете в ранних лекциях. Либо в гугле) Если чо- спрашивайте.

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

а я пошел.