Михаил Ивашкин

+118
с 2022

Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель

2 подписчика
1 подписка

Всем доброго времени суток, друзья. Данная статья соответствует 9 главе книги Марка Лутца «Изучаем Python». Глава завершает вторую часть книги «Типы и операции» и раскрывает основные понятия о том что такое кортеж, что такое файл, как их использовать и как применять. Знание принципов работы с файлами может помочь ответить на вопрос: «А собственно д…

1

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

Друзья, кто меня читает, прошу обратить на эту тему особое внимание. Так что Attention!

1

Всем доброго вечера, кто читает мои небольшие публикации. Сегодня я наконец-то перехожу освещать седьмую по счёту главу книги Марка Лутца «Изучаем Python». Данная статья посвящена глубокому анализу строк и методов работы с ними.

Строки (подробнее) по Марку Лутцу
1

Друзья, всем привет. Продолжаю медитировать над книгой «Изучаем Python». Сегодня речь зайдёт про сущность динамической типизации. Эта статья будет иметь более теоритическое, ежели практическое значение, однако этот вопрос может легко попасться на собеседовании. Поэтому читаем, вникаем и думаем

Итак какова сущность динамической типизации?

                                                                           Узнаёте циферки?)

Доброго, прекрасного, сказочного времени суток, семья моя :) Пришло время углубляться… И искать крупицы в стоге сена, которые углубят моё представление о языке Python.

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

Должен сразу предупредить, что у меня был уже достаточно наработанные навыки по программированию на этом языке. Сейчас они ограничиваются знанием нескольких сторонних библиотек (на подобие Pandas, Numpy, Flask) и практикой решения задач на Code…

2

Как можно понять из заголовка, сегодня речь пойдёт не про профессиональные навыки и умения, которым можно обучиться, а про человека. Нет, даже не так, Человека. Сложную на первый взгляд натуру, имеющее своё миропонимание, мироощущение и жизненную позицию.

И прежде чем начать говорить о нас с вами, предлагаю обратить внимание на эти две картин…

1

Привет, vc! Это моя первая публикация на этом ресурсе и вот недавно созрел один существенный повод поразмышлять над проблемой предпринимательства в России.

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

1
+ str(DictData) + '\\n')","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4. Читаем файл\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"file = open('newfile.txt').read()","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E5. Получаем результат\u003C/p\u003E"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EMisha\u003C/p\u003E\u003Cp\u003E21,22,34 \u003C/p\u003E\u003Cp\u003E['Python', 'Analysys', 'Talking']${'Weight': 60, 'Length': 170}\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА теперь можно описывать функцию\u003Ci\u003E eval()\u003C/i\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Ci\u003Eeval \u003C/i\u003E- это функция, которая используется как порция исполняемого кода. Предлагаю поработать над последней строкой файла\u003C/p\u003E"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Получаем последнюю строку"],"type":"OL"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"file = open('newfile.txt')\nrow = file.readline()\nrow = file.readline()\nrow = file.readline()\nprint(row) # ['Python', 'Analysys', 'Talking']${'Weight': 60, 'Length': 170}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2. Преобразуем последнюю строку в список\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"splittedRow = row.split(' ) # [\"['Python', 'Analysys', 'Talking']\", \"{'Weight': 60, 'Length': 170}\\n\"]","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3. Преобразуем объекты в типы данных в Python. Тут следует обратить внимание на наличие квадратных или фигурных скобок. Иначе данные не правильно поймёт интерпретатор\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"part1 = eval(splittedRow[0])\ntype(part1) # \u003Cclass 'list'\u003E \npart2 = eval(splittedRow[1])\ntype(part2) # \u003Cclass 'dict'\u003E","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКак видим у нас получился класс\u003Ci\u003E list()\u003C/i\u003E и \u003Ci\u003Edict()\u003C/i\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИспользование \u003Ci\u003Eeval()\u003C/i\u003E конечно хорошо знать в программировании, однако использовать данный метод нужно весьма ограниченно.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"А на что нужно обратить внимание?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ первую очередь на безопасность. Если внутри этой функции вставится вредоносный код, то в случае его выполнения он может заразить компьютер, удалить много нужных файлов и так далее. И поэтому для разрешения этой задачи был разработан другой модуль.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"И какой же ?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E- pickle\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКак говорил Лутц\u003C/p\u003E"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EPickle является более развитым инструментом, который позволяет сохранить почти любой объект Python в файл напрямую, не требуя со стороны программиста каких-либо преобразований в и из строки. \u003C/p\u003E","subline1":"М.Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДавайте попробуем повторить сохранить уже рассмотренные данные через использование этого модуля.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EС прошлого примера у нас сохранилась такая строка.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"splittedRow = row.split(' ) # [\"['Python', 'Analysys', 'Talking']\", \"{'Weight': 60, 'Length': 170}\\n\"]","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПопробуем применить этот метод к ней.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import pickle\nF = open('dataone.pkl', 'wb')\npickle.dump(splittedRow[0], F)\nF.close()","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА теперь получим эту строку.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"F = open('dataone.pkl', 'rb')\nE = pickle.load(F)\nprint(E) # ['Python', 'Analysys', 'Talking']","lang":""}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВесьма предпочтительней использовать такой метод при сохранении данных типов в файл.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Кстати, в самом начале нашей темы вы упоминали ещё про модуль json. Можете рассказать о нём пару слов?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДа могу. Вообще JSON не настолько мощно поддерживает сохранение данных как модуль pickle. Вместе с тем он позволяет сохранить тип данных «словаря» в свой специфический формат. Здесь я уже не буду пошагово расписывать как в предыдущем примере, просто приведу код работы с этим модулем.\u003C/p\u003E"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Получаем данные"],"type":"OL"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"name = {'first': 'Misha', 'last': 'Ivashkin'}\nmyData = {'name': name, 'job' : ['barista', 'developer'], 'age': 26} \n# {'name': {'first': 'Misha', 'last': 'Ivashkin'}, 'job': ['barista', 'developer'], 'age': 26}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2. Сохраняем данные в JSON\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import json\njson.dumps(myData)","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3. Загрузка из JSON:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"fromJSON = json.loads(toJSON) # {'name': {'first': 'Misha', 'last': 'Ivashkin'}, 'job': ['barista', 'developer'], 'age': 26}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4. Создание JSON файла:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"json.dump(myData, fp=open('mydata.json', 'w'), indent=3)","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E5. А теперь выводим результат выполнения программы\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(open('mydata.json').read())","lang":""}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"cbd5d8f2-d676-5cf0-a0ec-f858e3a65a6f","width":807,"height":240,"size":30729,"type":"png","color":"414242","hash":"","external_service":[]}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"А ещё существуют какие-либо файловые операции?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003Eеликое множество. Всё зависит от возможностей модуля, который вы используете для работы с файлами. Помимо рассмотренных Лутц выделяет как минимум 5 дополнительных средств\u003C/p\u003E"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Перенаправление в файлы стандартного потока данных ( модуль \u003Ci\u003Esys.stdout\u003C/i\u003E)","Дескрипторные файлы модуля\u003Ci\u003E os\u003C/i\u003E","Сокеты, контейнеры и очереди FIFO","Файлы с доступом по ключу с помощью модуля shelve","Потоки данных командной оболочки \u003Ci\u003Eos.popen\u003C/i\u003E , \u003Ci\u003Esubprocess.popen\u003C/i\u003E"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКто заинтересовался, рекомендую их подробно изучить самостоятельно. На этом мы заканчиваем обзор 2 части. Спасибо большое, что дочитали эту статью до конца.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДо новых встреч уже в третьей части :)\u003C/p\u003E"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":1,"reposts":0,"views":154,"hits":347,"reads":null,"online":0},"dateFavorite":0,"hitsCount":347,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/id1377277/565565-pro-kortezhi-i-pro-faily","author":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1766057581,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1766057581,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"reactions":{"counters":[{"id":1,"count":1}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":564927,"customUri":null,"subsiteId":1377277,"title":"Списки и словари по Марку Лутцу","date":1671352646,"dateModified":1671352646,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДанная статья имеет очень важное значение. Она особенно важна тем, что списки и словари являются важнейшими типами данных, которые используются в веб-программировании, анализе данных, парсинге сайтов и других решений на Python.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДрузья, кто меня читает, прошу обратить на эту тему особое внимание. Так что Attention!\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"c7d69271-e342-52f0-8f0f-041de8f9cfed","width":590,"height":343,"size":97900,"type":"png","color":"dbdbdb","hash":"","external_service":[]}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что важно знать про списки?"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСписки - это коллекция значений \u003C/p\u003E","subline1":"М. Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСписки - это наиболее гибкий тип, который используется для помещения числовых и текстовых данных в единую структурную форму. Кроме того, они способны содержать и внутренние списки.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myBirthList = ['Vasya', 'Masha', 'Bob', 'Sam'] # cписок с именами\nages = [17, 20, 23, 24] # возраст ( обратите внимание, тут кавычек нет)\nagesBirthList = ['Vasya', 'Masha', 'Bob', 'Sam', [17, 20, 23, 24]] # возраст+ имена","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПоследнее представление данных считается не совсем верным с точки зрения логики. В нём демонстрируется только возможности списков.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Какими характеристиками обладает список?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Упорядоченная коллекция произвольных объектов. ( Список - место накопления других объектов)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Поддерживают доступ по смещению (вспоминаем индексацию).\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Имеют разнородную переменную длину и допускает произвольное глубокое вложение (они способны увеличиваться, уменьшаться на месте, содержать разные типы данных.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4) Это изменяемая последовательность ( подтверждается, что списки - это изменяемые последовательности)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E5) Список - характеристика массива ссылок на объекты ( в случае присваивания объект сохраняет ссылку на тот же самый объект, а не его копию).\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Какие ещё существуют списковые операции?"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"fruit = list('apple') # ['a', 'p', 'p', 'l', 'e']\nnumbers = list(range(3,10)) # [3, 4, 5, 6, 7, 8, 9] \nOneNumberFromListNumbers = numbers[3] # 6\nSliceNumbers = numbers[1:5] # [4, 5, 6, 7]\nprint(len(numbers)) # количество элементов в списке\nnewListNumbers = numbers+SliceNumbers # [3, 4, 5, 6, 7, 8, 9, 4, 5, 6, 7] конкатинация\notherList = OneNumberFromListNumbers*SliceNumbers # ещё один пример конкатинации\nfor i in numbers: print(i) # списки поддерживают итерацию\nnumbers.append(1000) # единичная вставка\nprint(numbers) # [3, 4, 5, 6, 7, 8, 9, 1000]\nnumbers.extend([10000, 20000, 30000]) # [3, 4, 5, 6, 7, 8, 9, 1000, 10000, 20000, 30000] множественная вставка\nnumbers.insert(0, 20)\nprint(numbers) # [20, 3, 4, 5, 6, 7, 8, 9, 1000, 10000, 20000, 30000]\nprint(numbers.count(1000)) # подсчёт количество элементов в списке","lang":""}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EРекомендую копировать и вставлять код построчно, чтобы смотреть что получается. В тех примерах, где описано присваивание, результат выполнения операции можно осуществить с помощью \u003Ci\u003Eprint()\u003C/i\u003E\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"fruit = list('apple') \nprint(fruit) # ['a', 'p', 'p', 'l', 'e']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EБолее подробно о том, какие операции выполняют списки можно найти в официальной документации Python. Для работы со списками можно пройти по следующей. Если не понятна официальная документация, то альтернативным источником может являться другая \u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fpython-reference.readthedocs.io%2Fen%2Flatest%2Fdocs%2Flist%2F&postId=564927\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Eссылка\u003C/a\u003E .Также не забываем про справку \u003Ci\u003Edir() \u003C/i\u003Eили \u003Ci\u003Ehelp()\u003C/i\u003E\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Какие могут быть сложные случаи?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) List Comprehention\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСложным случаем использования списком является list comprehention. Дословного перевода на русский язык я не нашёл, поэтому оставляю тут английский вариант.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"rangeList = [i for i in range(2,5)] # [2, 3, 4]","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСуть данного примера состоит в том, что мы используем вложенный цикл for внутри списка. Такая форма записи эквивалентна следующему коду:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"rangeList = [] \nfor i in range(2,5):\n rangeList.append(i)\nprint(rangeList) # [2, 3, 4]","lang":""}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТо есть первый случай является сжатой формой второго случая. Однако на начальных этапах я рекомендую пользоваться вторым, он более понятный или читабельный.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Использование \u003Ci\u003Emap()\u003C/i\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПро служебное слово \u003Ci\u003Emap()\u003C/i\u003E можно прочитать из официальной документации. Формально оно необходимо для изменения данных в списке без объявления специального цикла for. Ниже приведу пример.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНапример, вот дан нам список со значениями:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myList = [-2, 3, 4, 5, 7, -20]","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИ нам дали такое задание: заменить отрицательные значения на положительные. Недолго думая, я решил применить модуль к каждому символу через функцию \u003Ci\u003Emap()\u003C/i\u003E\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"answer = list(map(abs, myList))\nprint(answer) # [2, 3, 4, 5, 7, 20]","lang":""}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОбязательно следует принять во внимание, что перед вызовом map необходимо объявлять ожидаемый тип данных, в противном случае интерпретатор не сможет вывести нужные значения.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myList = [-2, 3, 4, 5, 7, -20]\nanswer = map(abs, myList)\nprint(answer) # \u003Cmap object at 0x0000007C4EC3BAF0\u003E","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Индексация, нарезание и массивы"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ Python не существует такого понятия как массивы, поэтому список может определяться как список, а может как массив. Для того, чтобы написать массив, необходимо вложить во вложенный список другой список. В качестве значений списка массива определяются числа. В общем виде массив определяется вот так.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"array = [\n [10, 11 ,12],\n [13, 14, 15],\n [16,17,18 ]\n]\nprint(array[0]) # Первая строка\nprint(array[0][2]) #Третье число первой строки\nprint(array[-1]) #Третья строка","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Изменение значений в списке на месте"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ начале главы было сказано, что значения в списках в Python можно изменять. Давайте продемонстрирую это на примере. Допустим у нас есть следующий список\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"FruitList = ['banana', 'apple', 'potatoes']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПри анализе списка мы заметили, что список долен содержать фрукты, однако в данных допущена ошибка 'potatoes' (картофель). Давайте заменим картофель на ананас.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"FruitList[2]= 'pineapple'\nprint(FruitList) # ['banana', 'apple', 'pineapple']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТаким образом мы заменили картофель на ананас. Также можно изменять и добавлять данные через срезы.\u003C/p\u003E"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПопробуйте применить замену значений в списках к числам. Рекомендую думать над тем, что вы ожидаете получить и что получаете. И потом сравнивайте получаемое значение с ожидаемым. Если ответы сходятся, значит индексация стала более-менее понятна.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Немного про сортировку"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EУ списка есть один очень замечательный метод, который очень часто спрашивают на собеседованиях. Называется \u003Ci\u003Esort()\u003C/i\u003E\u003C/p\u003E"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВопрос из собеседования:\u003C/p\u003E\u003Cp\u003EЧем отличается list.sort() от sorted?\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОтвет: метод \u003Ci\u003Esort()\u003C/i\u003E позволяет отсортировать значения списка на месте, а для \u003Ci\u003ESorted(list)\u003C/i\u003E требуется выделять отдельную переменную.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДавайте потренируемся.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Пример - сортировка без аргументов\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"listnames = ['Misha', 'Alexandr', 'Alexandra', 'Masha', 'Alexei']\nlistnames.sort()\nprint(listnames) # ['Alexandr', 'Alexandra', 'Alexei', 'Masha', 'Misha']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Пример - сортировка с аргументами\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"listWords = ['AbC', 'ABC', 'ABc', 'aBc', 'abc']\nlistWords.sort(key=str.lower) # Сортировка по нижнему регистру\nprint(listWords) # ['AbC', 'ABc', 'aBc', 'abc', 'ABC']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Пример сортировка с помощью sorted()\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"listnames = ['Misha', 'Alexandr', 'Alexandra', 'Masha', 'Alexei']\nsortedNames = sorted(listnames)\nprint(sortedNames) # ['Alexandr', 'Alexandra', 'Alexei', 'Masha', 'Misha']","lang":""}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"listnames = ['Misha', 'Alexandr', 'Alexandra', 'Masha', 'Alexei']\nSortedNames = listnames.sort()\nprint(SortedNames) #None","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Немного про удаление"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ списках можно как добавлять значения, так и удалять. За удаление отвечает методы: \u003Ci\u003Epop()\u003C/i\u003E , \u003Ci\u003Eremove()\u003C/i\u003E и служебный оператор del\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Пример pop()\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EМетод \u003Ci\u003Epop()\u003C/i\u003E удаляет значения исходя из его индекса и возвращает в консоль удалённое слово.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"listnames = ['Misha', 'Alexandr', 'Alexandra', 'Masha', 'Alexei']\nlistnames.pop(0) # Удаление и возврат элемента (вернёт 'Misha')\nprint(listnames) # ['Alexandr', 'Alexandra', 'Masha', 'Alexei']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Пример\u003Ci\u003E remove()\u003C/i\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EМетод \u003Ci\u003Eremove()\u003C/i\u003E удаляет значение по заранее заданному значению в качестве аргумента, только здесь он НЕ возвращает полученное значение. Всё тот же пример с именами :)\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"listnames = ['Misha', 'Alexandr', 'Alexandra', 'Masha', 'Alexei']\nlistnames.remove('Alexandr')\nprint(listnames) # ['Misha', 'Alexandra', 'Masha', 'Alexei']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Пример \u003Ci\u003Edel\u003C/i\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Ci\u003EDel\u003C/i\u003E является уже служебным словом и допускает удаление значения по его индексу.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"listnames = ['Misha', 'Alexandr', 'Alexandra', 'Masha', 'Alexei']\ndel listnames[0]\nprint(listnames) # ['Alexandr', 'Alexandra', 'Masha', 'Alexei']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТеперь со списками я закончил и перехожу к словарям.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что важно знать про словари?"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСловарь - неупорядоченная коллекция, которая отличается от списка тем, что элементы сохраняются и извлекаются по ключу, а не по позиционному смещению. \u003C/p\u003E","subline1":"М. Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДрузья, а давайте вспомним школьные годы уроки английского языка. Помните, что для того, чтобы заучить какие-то слова, каждый из нас составлял словарь из незнакомых слов. А давайте возьмём эту задачу и реализуем её на Python.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"RussianEnglishDictionary = {'яблоко': 'apple', 'идти': 'to come', 'язык':'language'}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЭтих слов можно добавлять бесконечно много. А теперь как можно найти перевод слова по значению? Предлагаю это реализовать.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"RussianEnglishDictionary = {'яблоко': 'apple', 'идти': 'to come', 'язык':'language'}\nprint(RussianEnglishDictionary['яблоко']) # apple","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДумаю, ассоциация может помочь понять и разобраться лучше в понимании о словарях.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Какие характеристики выделил М.Лутц по отношению к словарям?"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Они поддерживают доступ по ключу, а не смещению. Я впервые увидел что словари могут также называть ассоциативными массивами или хешами","Они являются неупорядоченными коллекциями произвольных объектов. Элементы в словаре не поддерживают определённый порядок","Они имеют переменную длину, разнородны т допускают глубокое вхождение. (аналогию со списками не видите?)"],"type":"UL"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Они относятся к категории изменяемые отображения. Словари в Python называют единственным инструментом, которым свойственно отображение. Их разрешено менять на месте, выполняя присваивания по индексам, они не поддерживают операции над последовательностями, которые работают на строках и списках"],"type":"UL"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Они представляют таблицы ссылок на объекты. Словари - неупорядоченные таблицы ссылок на объекты."],"type":"UL"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Как иначе можно реализовывать словари?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Пример. Через словарь в словаре\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"PersonalDataDict = {'person' : {'firstname': 'Misha', 'lastname': 'Ivashkin'}} #{'person': {'firstname': 'Misha', 'lastname': 'Ivashkin'}}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Через вывод служебного слова \u003Ci\u003Edict()\u003C/i\u003E\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"PersonalDataDict = dict(firstname = 'Misha', lastname = 'Ivashkin') # {'firstname': 'Misha', 'lastname': 'Ivashkin'}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Через служебное слово \u003Ci\u003Ezip()\u003C/i\u003E\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"keysList = ['firsname', 'lastname']\nvaluesList = ['Misha', 'Ivashkin']\nPersonalData = dict(zip(keysList, valuesList)) # {'firsname': 'Misha', 'lastname': 'Ivashkin'}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВсе методы по работе со словарями можно получить по следующей \u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fwww.w3schools.com%2Fpython%2Fpython_ref_dictionary.asp&postId=564927\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Eссылке\u003C/a\u003E.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Как работать со словарями?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1 Пример. Изменение словарей на месте.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДопустим, у нас есть словарь, отображающий количество овощей и фруктов в корзине.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"ItemsDict = {'potatoes': 2, 'kiwi': 3, 'tomatoes': 4}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДавайте поменяем, количество помидор на список из 3 значений (допустим у нас их несколько видов:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"ItemsDict['tomatoes'] = [1,1,2]\nprint(ItemsDict) # {'potatoes': 2, 'kiwi': 3, 'tomatoes': [1, 1, 2]}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТаким образом получается, что в словарь можно вставлять список.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2 Пример. авайте удалим картофель из словаря ( например, мы его написали ошибочно)\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"del ItemsDict['potatoes']\nprint(ItemsDict) # {'kiwi': 3, 'tomatoes': [1, 1, 2]}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3 Пример. А что, если я захочу добавить морковь? Да проще простого!\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"ItemsDict['carrots'] = 6\nprint(ItemsDict) # {'potatoes': 2, 'kiwi': 3, 'tomatoes': [1, 1, 2], 'carrots': 6}","lang":""}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА вот с методами предлагаю попробовать поиграться самостоятельно. Тем более большая их часть повторяет списки с некоторыми дополнениями вроде \u003Ci\u003Edict.get()\u003C/i\u003E, \u003Ci\u003Edict.values()\u003C/i\u003E, \u003Ci\u003Edict.keys()\u003C/i\u003E…\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Немного про сложные случаи"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ ряде случаев словари работают точно также как и списки. Они также могут поддерживать встроенные \u003Ci\u003Emap()\u003C/i\u003E и list comprehention\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПриведу сложные сложных случаев на примере из следующего отображения\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"DateOfBirth = {\n 'Misha': 1996,\n 'Masha' : 2000,\n 'Oleg' : 2002\n}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1 Пример. Отображение списка из значений\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(DateOfBirth.items()) # dict_items([('Misha', 1996), ('Masha', 2000), ('Oleg', 2002)])","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2 Пример. ListComprehention\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"K = 'Oleg'\nV = DateOfBirth[K]\nprint([key for key in DateOfBirth.keys() if DateOfBirth[key]==V]) #Oleg для ключа\nprint([key for (key, value) in DateOfBirth.items() if value==V]) # Oleg аналогичный вывод","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ последнем случае применение цикла выглядит немного интересней. В первом случае мы используем только ключ в цикле, а во втором и ключ и значение. Когда мы их используем совместно, необходимо объединить их скобками. Лично я не привык писать цикл для словарей в одну строчку, но считаю такой подход очень полезным навыком.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Есть какие-то замечания, когда мы используем словари?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКонечно есть! Лутц, например, выделяет три основных замечания.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) В словарях не работают операции с последовательностями вроде нарезания и конкатинации. Если я их захочу использовать Python выведет ошибку. (Попробуйте сами)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Присваивание по индексам добавляет элементы. Помните пример с морковкой?\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Ключи не обязаны быть строками. Это да, они могут являться и строками и числами (это как минимум), а как максимум не знаю даже что сказать.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПример:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"Number = {}\nNumber[99] = 'ninety nine'\nprint(Number) # {99: 'ninety nine'}","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Любопытный пример использования словаря, который я вычитал у Лутца"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОказывается в качестве ключа могут выступать как единичные значения, так и множественные. И тут в голову приходит нахождение точки по заданным координатам. Смотрите какая красота. Не уверен конечно, что данный шаблон часто применяется, но это выглядит довольно-любопытно по крайней мере.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"Point = {}\nPoint[(1,2,3)]='A'\nprint(Point) # {(1, 2, 3): 'A'} Координаты 1,2,3 имеет точка А","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Вы что-то говорили про существование вложенных словарей. Можно подробней на них остановиться?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДаже нужно. Поскольку вложенные словари служат даже примером вывода данных в формате JSON (о нём поговорим в другой статье). Поэтому, чтобы понять как работает словарь Лутц предлагает его создать.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПредлагаю немного поменять его пример на наш.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"MyData = {}\nMyData['name'] = 'Misha'\nMyData['age'] = 26.3\nMyData['skills'] = ['entrepreneur', 'young scientist']\nMyData['home'] = {'country': 'Russia', 'city': 'Yekaterinburg'}\nprint(MyData) #{'name': 'Misha', 'age': 26.3, 'skills': ['entrepreneur', 'young scientist'], 'home': {'country': 'Russia', 'city': 'Yekaterinburg'}}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСловарь может сказать обо мне (да и о вас всё). Кстати такой формат словаря может вполне соответствовать боевым данным.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Вы что-то писали, что существует очень много способов создания словаря. А какой из них удобный?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКаждый способ удобен по-своему. Давайте через примеры пойдём.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПример 1\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"{'name': 'Misha', 'lastname': 'Ivashkin'}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EУдобен, когда мы можем составить словарь заранее\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПример 2.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"MyData = {}\nMyData['name'] ='Misha'\nMyData['lastname'] = 'Ivashkin'","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПрименяется, когда словарь создаётся на лету. Как правило такой формат объявляется перед применением цикла for, ну или как в моём случае\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПример 3.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"dict(name = 'Misha', lastname = 'Ivashkin')","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОсновное требование третьего примера - необходимость, чтобы все ключи являлись строками\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПример 4.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"dict([('firsname', 'lastname'), ('Misha', 'Ivashkin')])","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИспользуется когда необходимо накапливать ключи и значения\u003C/p\u003E"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЛично я часто использую шаблоны первого и второго примера\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Это всё интересно, конечно. Но где-то я уже подобный символ встречал у вас в статьях. Можете напомнить где?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКонечно могу, словарь очень похож на множества. Но это не совсем так. Например ключи (\u003Ci\u003Ekeys\u003C/i\u003E) подобны множествам и поддерживают операции над множествами (пересечения и объединение). А метод (\u003Ci\u003Evalues\u003C/i\u003E) не подобны множествам. Однако\u003Ci\u003E items()\u003C/i\u003E (совместная пара ключ-значение) являются подобными, если пары (ключ/значения) уникальны и хешируемые.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТрудно конечно в этом разобраться, читая текст. Давайте лучше на примерах.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПример.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДавайте поиграемся вот с этими данными\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"MyDict = {'FirstValue': 1, 'SecondValue': 2, 'ThirdValue': 3}\nMyKey = MyDict.keys()\nMyValue = MyDict.values() #dict_keys(['FirstValue', 'SecondValue', 'ThirdValue']) dict_values([1, 2, 3])\nMyKey | {'FourthValue': 4} # множества поддерживают логический оператор \"или\"\nMyValue | {'FourthValue': 4} # А вот тут ошибка типа\nMyDict.keys() | MyDict.keys() # {'SecondValue', 'FirstValue', 'ThirdValue'}\nMyDict.keys() & {'FirstValue'} # {'FirstValue'}\nMyDict.items() | MyDict.keys() # Объединение items() и keys()","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ общем я не знаю, как это использовать на практике, но тот факт, что словари поддерживают работу со множествами вызывал у меня сильный интерес\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EФуф. Я устал. Пойду кофе пить. Спасибо за внимание!\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"2f760220-6b26-56a1-9bcf-985052488ac3","width":807,"height":424,"size":32731,"type":"png","color":"1c1c1c","hash":"","external_service":[]}}}]}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":2,"favorites":3,"reposts":0,"views":96,"hits":328,"reads":null,"online":0},"dateFavorite":0,"hitsCount":328,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/id1377277/564927-spiski-i-slovari-po-marku-lutcu","author":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1766057581,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1766057581,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"reactions":{"counters":[{"id":1,"count":1}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":564618,"customUri":null,"subsiteId":1377277,"title":"Строки (подробнее) по Марку Лутцу","date":1671281209,"dateModified":1671281209,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВсем доброго вечера, кто читает мои небольшие публикации. Сегодня я наконец-то перехожу освещать седьмую по счёту главу книги Марка Лутца «Изучаем Python». Данная статья посвящена глубокому анализу строк и методов работы с ними.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"3a0ad995-3014-53df-a0f9-34f7e93c45fb","width":807,"height":318,"size":37698,"type":"png","color":"6e6e6e","hash":"","external_service":[]}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Итак, что же по сути является строкой с точки зрения Python?"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСтрока - это тип данных, представляющий упорядоченную коллекцию символов для хранения и текстовой и байтовой информации.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ Python строки обычно представлены с помощью одинарных кавычек (\u003Ci\u003E''\u003C/i\u003E), двойных кавычек ( \u003Ci\u003E'' ''\u003C/i\u003E), тройных кавычек (\u003Ci\u003E''' ''\u003C/i\u003E'). Строковый тип дынных представлен классом \u003Ci\u003Estr()\u003C/i\u003E\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myString = 'Misha'\nmyNewString = \"Misha\"\nmyNewNewString = \"\"\"Misha\"\"\"\nprint(myString, myNewString, myNewNewString) #Misha Misha Misha\nprint(type(myString), type(myNewString), type(myNewNewString)) # \u003Cclass 'str'\u003E \u003Cclass 'str'\u003E \u003Cclass 'str'\u003E","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EМарк Лутц начинает введение в строковый тип данных с получение представления у читателя о кодировки информации. Вообще кодировок существует большое множество, однако наибольшей популярностью используются \u003Ci\u003EUnicode\u003C/i\u003E и \u003Ci\u003EASCII\u003C/i\u003E\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что вообще такое кодировки и как с ними работать?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПожалуй, не для кого не секрет, что элемент строки является символ. Например, буквы английского алфавита - это один набор символов, буквы русского алфавита - другой набор символов. То же самое можно сказать и про китайский, арабский и другие языки и компьютеру надо с ними работать. И поэтому для их обработки придумали специальную систему кодировки.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ своей книге Лутц останавливается на Unicode и ASCII.\u003C/p\u003E"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E«ASCII - это простая форма текста Unicode, но лишь одна из немногих кодировок алфавита»\u003C/p\u003E","subline1":"М.Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ Python содержится аж три строковых типа. Один из них я уже называл (\u003Ci\u003Estr\u003C/i\u003E, для текста), вместе с ним имеется \u003Ci\u003Ebytes\u003C/i\u003E(для двоичных данных), \u003Ci\u003Ebytearray\u003C/i\u003E (изменяемый вариант типа bytes).\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОтличие двух кодировок определяется шагом трансляции. Он необходим для получения данных из файлов. Практический пример использования кодировки можно встретить например в библиотеке \u003Cb\u003Epandas\u003C/b\u003E. Например, если при импорте данных из того же excel-файла не правильно указать кодировку, то вывод данных будет не читаемым для человека (пожалуй всем известен случай с «крокозябрами»).\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что предлагает автор знать на начальном этапе о строках?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Строки допускается использовать для представления всего что может восприниматься как текст или байты\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Строки - это инструмент высокого уровня. Они сопровождаются большим количеством методов их обработки.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Строки - неизменяемая последовательность и их значение не поддаётся каким-либо модификациям. Поэтому, чтобы модифицировать строку, необходимо создать новую строку на основе предыдущей.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4) Для сложной обработки строк можно пользоваться библиотекой re. Этой библиотеке посвящу публикацию отдельно. \u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EО том, что можно творить со строками можно узнать как из книги, так и из официальной документации. Для ознакомления со всеми методами можно пройти по следующей \u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fdocs.python.org%2F3%2Flibrary%2Fstdtypes.html%3Fhighlight%3Dstr%23str&postId=564618\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Eссылке\u003C/a\u003E.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Как ещё можно представить строки ( примеры)?"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(\"s\\tp\\na\\0\\m\") # Вывод - управляющие последовательности\n\ns\tp\na\nprint(r\"C:\\new\\test.spm\") # Вывод - неформатированные строки\nC:\\new\\test.spm\nprint(b'sp\\x01am') # Вывод - байтовые литералы\nb'sp\\x01am'\nprint(u'eggs\\u0020spam') # Вывод - литералы Unicode\neggs spam","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОднако самые распространённые случаи считаются представление строкового типа с помощью одинарных и двойных кавычек.\u003C/p\u003E"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EС точки зрения Python они почти ничем не отличаются друг от друга, поэтому прежде чем начать писать проект, вы договоритесь сами с собой какие кавычки вы будете использовать.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИ ещё примеры:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"'myString', 'myString2' #('myString', 'myString2')\n'Mikhail\"s', \"Allex's\" #('Mikhail\"s', \"Allex's\")\nmessage = \"I \" 'am' \" filling good\" # I am filling good\n'Mikhail\\'s', \"Allex\\\"s\" # (\"Mikhail's\", 'Allex\"s') Тут кавычка внедряется во внутрь строки","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ последней строки используются символы с обратной косой чертой (\\). Данный символ используется для изменения представления выводимой строки в интерпретаторе. Я достаточно часто использовал символ \\n на сайте CodeWars, однако вместе с ним есть и ряд других. Ниже представлю перечень.\u003C/p\u003E"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\\новая строка - Игнорируется (строка продолжения) \u003C/p\u003E\u003Cp\u003E*\\\\ - Обратная косая черта (сохраняет символ \\) \u003C/p\u003E\u003Cp\u003E*\\' - Одинарная кавычка (сохраняет ')\\'' - Двойная кавычка (сохраняет '')\u003C/p\u003E\u003Cp\u003E\\a - Звонок\u003C/p\u003E\u003Cp\u003E\\b - Забой\u003C/p\u003E\u003Cp\u003E\\f - Перевод страницы\u003C/p\u003E\u003Cp\u003E\\n - Новая строка \u003C/p\u003E\u003Cp\u003E*\\r - возврат коретки\u003C/p\u003E\u003Cp\u003E\\t - горизонтальная табуляция\u003C/p\u003E\u003Cp\u003E\\v - вертикальная табуляция\u003C/p\u003E\u003Cp\u003E\\xhh - шестнадцатиричный символ\u003C/p\u003E\u003Cp\u003E\\ooo - символ с восьмиричным значением\u003C/p\u003E\u003Cp\u003E\\O - пустой двоичный символ (не конец строки)\u003C/p\u003E\u003Cp\u003E\\N{идентификатор} - Идентификатор Unicode\u003C/p\u003E\u003Cp\u003E\\uhhhh - Символ Unicode c 16-битным шестнадцатиричным значением\u003C/p\u003E\u003Cp\u003E\\Uhhhhhhh - Символ Unicode с 32-битным шестнадцатеричным значением\u003C/p\u003E\u003Cp\u003E\u003Cbr /\u003E\u003C/p\u003E\u003Cp\u003E* Используются в программировании достаточно часто\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСтоить также указать, что функция \u003Ci\u003Elen()\u003C/i\u003E , отвечающая за вывод количество символов НЕ учитывает вышеописанные специфические значения.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"newString = 'T\\nis\\t is \\n\\aspam'\nstrng = 'This is is spam'\nprint(len(newString), len(strng)) # 15 15","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТакое поведения программы обязательно следует учитывать при проектировании приложения.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЗамечание\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСуществуют примеры, когда ввод специальных символов вызывает затруднение. Например, они могут возникнуть, когда путь файла содержит символы, которые не следует считать как символы. Тогда для решения подобной задачи может помочь флаг r. Вот пример:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myFilePath = '\\new\\text.dat'\nprint(myFilePath) # ew\text.dat\nprint(len(myFilePath)) #11","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСовсем не то, что я хотел вывести. Я ожидал, что вызов print() выведет мне полный путь файла. Поэтому, чтобы это исправить, немного модифицируем код вот так:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myFilePath = r'\\new\\text.dat'\nprint(myFilePath) #\\new\\text.dat\nprint(len(myFilePath)) #13","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EМы всего лишь добавили флаг \u003Ci\u003Er\u003C/i\u003E к \u003Ci\u003E'\\new\\text.dat' \u003C/i\u003Eи у нас получилась требуемая строка.\u003C/p\u003E"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОбратите внимание на это правило!\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Тройные кавычки"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EГоворя простым языком, если двойные кавычки от одинарных практически ничем не отличаются, то с помощью тройных может описываться документирование кода. В тройных кавычках уже могут автоматически содержаться специфические символы, даже если формально они не встречаются в тексе. Вот пример:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"life = \"\"\"\nThe\nbest\nday\nof\nmy life\n\"\"\"\nlife # '\\nThe\\nbest\\nday\\nof\\nmy life\\n\\n' \nprint(life) \n# Однако:\n#The\n#best\n#day\n#of\n#my life","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EС помощью тройных кавычек можно:\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Выделять код\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Документировать программу\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Описывать состояние ошибок\u003C/p\u003E"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОднако на практике, чем меньше мы используем документирование в программе тем лучше. Сейчас будет отсылка на мою статью на хабре: \u003Ca href=\"https://vk.com/away.php?to=https%3A%2F%2Fhabr.com%2Fru%2Fpost%2F683956%2F&cc_key=\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Ehttps://habr.com/ru/post/683956/\u003C/a\u003E\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что умеют строки в Python? Базовые операции"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Считать длину\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myString = 'Misha'\nprint(myString) # Misha\nprint(len(myString)) #5","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Конкатенация:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myString = 'Misha'\nsecondString = ' Ivashkin'\nprint(myString+secondString) # Misha Ivashkin","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Повторение\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myString = 'Misha'\nsecondString = ' Ivashkin '\nprint((myString+secondString) * 4) # Misha Ivashkin Misha Ivashkin Misha Ivashkin Misha Ivashkin","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4) Индексация:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myString = 'Misha'\nsecondString = ' Ivashkin '\ninitials = myString+secondString\nprint(initials[0:5]) # Misha","lang":""}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИндексация - это способ извлечения информации согласно номеру символа. Номер символа начинается с 0. Я не буду подробно останавливаться на этом, просто имейте ввиду, что она существует.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА теперь внимание!\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Очень частая ошибка:"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"a = '34'\nprint(a+2) # TypeError: can only concatenate str (not \"int\") to str","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПочему так? На самом деле всё просто: у нас переменная a хоть и принимает значение 34, но она обёрнута в кавычки, поэтому интерпретатор распознаёт её как строку. А Python не позволяет складывать строку с числом.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЧтобы исправить, надо представить переменную в целочисленный тип данных\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"a = '34'\nprint(int(a)+2) # 36","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Преобразования кодов символов"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНе смотря на то, что Лутц описывает это неявно, но существует представление о том, что каждый символ представляется определённым кодом. Он соответствует кодировке ASCII. По таблице видно, что каждое значение соответствует своему шестнадцатиричному и десятичному значению.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"441ea730-3948-5dae-8a44-1583cca6aaee","width":807,"height":534,"size":368726,"type":"png","color":"dcdde3","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДля их преобразования существуют методы \u003Ci\u003Eord()\u003C/i\u003E и \u003Ci\u003Echr()\u003C/i\u003E . Для понимания кодировки Лутц предлагает написать следующий код:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"S = '5'\nchrS = ord(S) \nprint(chrS) # 53","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЕсли мы проверим решение на предмет соответствия с таблицей, то мы обнаружим, что действительно символ 5 соответствует числу 53. Python допускает операции с преобразованными значениями. Но, обратите внимание, только с числами закодированных символов.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Как можно изменять строку?"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПоскольку нам известно о том, что строка является неизменяемым типом данных, а менять строку всё равно нужно, то чтобы это исправить существует три основных способа: конкатенация, замена символа и форматирование. Ниже привожу примеры\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Конкатенация\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"s = 'spam'\nprint(s+'SPAM!') # spamSPAM!\ns = 'spam'\nprint(s[:4]+'SPAM!'+ s[4:]) # spamSPAM!","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Замена символов\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"s = 'splot'\ns = s.replace('pl', 'pamal')\nprint(s) # spamalot","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Форматирование\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EA.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"a='This is %d %s bird!' % (1, 'dead')\nprint(a) # This is 1 dead bird!","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EБ.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"a='This is {0} {1} bird!'.format(1 , 'dead')\nprint(a) # This is 1 dead bird!","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EМетоды, представленные в статье являются базовыми, однако их недостаточно для того, чтобы понять всё многообразие работы со строками. Для того, чтобы полностью увидеть картину можно заглянуть в документацию. Ссылку по строкам я уже сюда приводил, поэтому чтобы вы не забыли, продублирую её заново ( \u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fvk.com%2Faway.php%3Fto%3Dhttps%253A%252F%252Fdocs.python.org%252F3%252Flibrary%252Fstdtypes.html%253Fhighlight%253Dstr%2523str%26cc_key%3D&postId=564618\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Ehttps://docs.python.org/3/library/stdtypes.html?highlight=str#str\u003C/a\u003E ). Настоятельно рекомендую потренироваться над изменением и способам проверки строк. Помните, что программирование - это больше про практику.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"А теперь подробней про форматирование"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EФорматирование строк - способ, позволяющий выполнять множество подстановок, специфических для типов за единственный шаг. \u003C/p\u003E","subline1":"М.Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНа сегодняшний день существует три способа форматирования текста, однако Лутц выделяет только два (очень сказывается время, когда впервые была выпущена эта книга). Пример использования f-строки я раскрывать не стану. Скажу лишь, что он сейчас наиболее популярный и часто используется в программировании.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EШаблон форматирования определяется с помощью базового шаблона\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003E'….%s….' % (значение) - старый приём\u003C/b\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003E'….{}…..'.format(значение) - новый приём\u003C/b\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЭти два приёма необходимо знать вместе, поскольку в первый случай наиболее предпочтительней использовать, когда заходит речь о вставке данных в реляционную базу данных.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПара примеров:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"exclamation = 'Ni!'\nprint('The knights who say %s!' % exclamation) # The knights who say Ni!!\nmessage = '%d %s %g you' % (1, 'spam', 4.0)\nprint(message) # 1 spam 4 you\nmessageNew = '%s -- %s -- %s' % (42, 3.14159, [1,2,3])\nprint(messageNew) # 42 -- 3.14159 -- [1, 2, 3]","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИнтерпретация и результаты:\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЧто такое % ? - ожидает в правой стороне либо одиночный элемент, либо кортеж из одного и более элементов.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЧто такое\u003Ci\u003E %d,\u003C/i\u003E \u003Ci\u003E%s \u003C/i\u003E? - это специальный код, описывающий вставляемые данные. Ниже представлен список из этих элементов\u003C/p\u003E"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003Es - строка (или строка str(x) любого объекта)\u003C/p\u003E\u003Cp\u003E*r - То же, что и s, но применяется как repr, а не strc - символ (int или str)\u003C/p\u003E\u003Cp\u003Ed - десятичное число (целое число с основанием 10)\u003C/p\u003E\u003Cp\u003E*i - целое числоo - восьмиричное целое число\u003C/p\u003E\u003Cp\u003Ex - Шестнадцатиричное целое число\u003C/p\u003E\u003Cp\u003EX - то же самое, что и в верхнем регистреe - число с плавающей точкой со степенью в нижнем регистре\u003C/p\u003E\u003Cp\u003EE - то же, что и e, но в верхнем регистре\u003C/p\u003E\u003Cp\u003Ef - десятичное число с плавающей точкой\u003C/p\u003E\u003Cp\u003E*F -то же, что и f, но в верхнем регистре\u003C/p\u003E\u003Cp\u003E*g - число с плавающей точкой e или f\u003C/p\u003E\u003Cp\u003EG - Число с плавающей точкой E или F\u003C/p\u003E\u003Cp\u003E* - на мой взгляд часто используемые символы вставки\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЕсли знать, когда применять кодировку, можно легко подобрать нужный текст, главное запомнить какой код за что отвечает\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"number = 1234\nmessage = 'integers: ...%d...%-6d...%06d' % (number, number, number)\nprint(message) # integers: ...1234...1234 ...001234","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОбратите внимание на \u003Ci\u003E%06d\u003C/i\u003E в строке. По сути данный формат строки означает, что выводимое число должно содержать 6 целых чисел. Если мы посчитаем количество цифр в 001234, то как раз получим тот же самый ответ.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Ci\u003E%-6d\u003C/i\u003E отвечает за выделенное пространство под число. Если количество чисел меньше, чем область, то он добавляет к ней знаки пробелов\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"x = 1.23456789\nprint(x)\nx = 1.23456789\nmessage = '%e | %f | %g' % (x,x,x)\nprint(message) # 1.234568e+00 | 1.234568 | 1.23457\nmessage2 = '%-6.2f | %05.2f | %+06.1f' % (x,x,x)","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Форматирование на словаре"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСтоит иметь ввиду, что форматирование строк сильно отличается от форматирования словаря. Для того, чтобы отформатировать данные через словарь Лутц приводит следующий пример.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"reply = \"\"\"\nGreetings...\nHello %(name)s!\nYour age is %(age)s\n\"\"\"\nvalues = {'name': 'Misha', 'age':23}\nprint(reply %values)","lang":""}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВажно: форматирование через словарь очень часто пригождается в работе с базами данных, поэтому настоятельно рекомендую потренироваться в использовании словарей при форматировании текста.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Форматирование через метод format()"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EМетод format() базируется на обычном синтаксисе вызова функции, а не выражении. \u003C/p\u003E","subline1":"М.Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЯ не буду вдаваться здесь в теорию. Сразу перейду к практике\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"template = '{0}, {1} and {2}'\ntemplate.format('spam', 'ham', 'eggs') #'spam, ham and eggs'\nnewTemplate = '{motto}, {pork} and {food}'\nnewTemplate.format(motto = 'spam', pork = 'ham', food='eggs') #'spam, ham and eggs'","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Для словарей:"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"template = '%(motto)s, %(pork)s and %(food)s'\ntemplate % dict(motto='spam', pork='ham', food = 'eggs') #'spam, ham and eggs'","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Более сложные методы форматирования:"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import sys\n'My {1[kind]} runs {0.platform}'.format(sys, {'kind': 'laptop'}) #'My laptop runs win32'","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ последнем примере используется индексация (позиция метода форматирования. Применяя ключи словаря и метод библиотеки sys получаем заветное слово:)\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"'My {map[kind]} runs {sys.platform}'.format(sys=sys, map = {'kind': 'laptop'}) #'My laptop runs win32'","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЗдесь показывается пример, аналогичный предыдущему, единственное, что бы я сделал - это поменял название словаря, уж очень он идентичен зарезервированному слову map ( смотрите \u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fdocs.python.org%2F3%2Flibrary%2Ffunctions.html&postId=564618\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Eдоку\u003C/a\u003E )\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myList = 'MyNewValue'\n'first = {0[0]}, third = {0[2]}'.format(myList) #'forst = M, third = N","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЕсть ещё более специфические методы форматирования, но для собеседования, думаю, достаточно знать базовые\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"В заключении статьи опишу какие преимущества видит автор, применяя метод format"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Располагает некоторыми дополнительными возможностями, отсутствующими в самом выражении\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Обладает гибким синтаксисом ссылки на чтение\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Может делать ссылки на значения более явными\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4) Обменивает операцию на более значащее имя метода\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E5) Не допускает разного синтаксиса для одиночных и множественных значений\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"5420ae1c-e63f-5309-a18f-a39866ad3333","width":807,"height":538,"size":182739,"type":"png","color":"751817","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ заключении могу сказать, что это не всё, что отразил в своей книге Лутц. В статье представлена только базовая и основная выжимка. Статья не раскрывает специфичные случаи использования строк, но может дать базовое представление о том, что это такое и как оно работает. Благодарю за внимание и до новой статьи!\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВсе статьи по книге собраны в отдельном сообществе на vc: \u003C/p\u003E"}},{"type":"link","cover":false,"hidden":false,"anchor":"","data":{"link":{"type":"link","data":{"url":"https://vc.ru/s/1378283-python-chitaem-marka-lutca","title":"Python Читаем Марка Лутца — Cообщество на vc.ru","description":"Всем привет! Представляю Вашему вниманию переработанное содержание учебника \"Изучаем Python\" Марка Лутца.","image":{"type":"image","data":{"uuid":"https://leonardo.osnova.io/ico/vc.ru","width":0,"height":0,"size":0,"type":"jpg","color":"","hash":"","external_service":[]}},"v":1,"hostname":"vc.ru"}}}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКому интересно развитие проекта, могут поддержать донатами.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСпасибо за прочтение!\u003C/p\u003E"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":1,"reposts":0,"views":65,"hits":702,"reads":null,"online":0},"dateFavorite":0,"hitsCount":702,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/id1377277/564618-stroki-podrobnee-po-marku-lutcu","author":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1766057581,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1766057581,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"reactions":{"counters":[{"id":1,"count":1}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":564003,"customUri":null,"subsiteId":1377277,"title":"Что такое динамическая типизация и как она трактуется по Лутцу?","date":1671193678,"dateModified":1671193678,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДрузья, всем привет. Продолжаю медитировать над книгой «Изучаем Python». Сегодня речь зайдёт про сущность динамической типизации. Эта статья будет иметь более теоритическое, ежели практическое значение, однако этот вопрос может легко попасться на собеседовании. Поэтому читаем, вникаем и думаем\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Итак какова сущность динамической типизации?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EРассмотрим пару примеров. Допустим, у нас имеются следующие переменные:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"intNumber = 6; floatNumber = 3.5 ; StringRow = 'abba'; BoolValue = True\nprint(type(intNumber), type(floatNumber), type(StringRow), type(BoolValue)) # \u003Cclass 'int'\u003E \u003Cclass 'float'\u003E \u003Cclass 'str'\u003E \u003Cclass 'bool'\u003E","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКак Python определил, что данные значения соответствуют определённому типу?\u003C/p\u003E"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА всё дело в том, что определение типов в Python происходит автоматически, и как раз за это и отвечает метод динамической типизации.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДолжен признаться, существует некая группа программистов, которая не любит работать с динамически типизированными объектами. Как правило это уже продвинутые программисты, которые умеют программировать на нескольких языках и в их представлении Python является даже не языком программирования. Поэтому будьте осторожны, когда начинаете спор с Java программистом или C++ программистом. У них мозг работает несколько иначе, чем у тех людей, кто программирует на Python.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Итак, из чего состоит программа в Python?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПо Лутцу это: \u003Ci\u003Eпеременные\u003C/i\u003E, \u003Ci\u003Eобъекты\u003C/i\u003E и \u003Ci\u003Eссылки\u003C/i\u003E. Их различие следует вызубрить на зубок, ибо это может быть очередным ответом на вопрос. Их не обязательно знать дословно, главное дать внятное объяснение и понимать различия\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003EПеременные\u003C/b\u003E - это записи в системной таблицы, в которых предусмотрены места для связей с объектами\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003EОбъекты\u003C/b\u003E - это области выделенной памяти с достаточным пространством для представления значений, для которых они предназначены\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003EСсылки\u003C/b\u003E - это указатели от переменных к объектам\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДля ассоциации в книге приводится следующая схема. Я её немного поменял, но совсем чуть-чуть. Она описывает задачу присвоения переменной intNumber значения 6 (взял это из выдуманного примера, который описал выше)\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"3155038d-c9af-5bfb-8e72-c41711e54476","width":807,"height":311,"size":32350,"type":"png","color":"ececec","hash":"","external_service":[]}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что происходит, когда мы создаём переменную?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Сначала создаётся объект \u003Ci\u003E6\u003C/i\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Затем создаётся переменная с именем \u003Ci\u003EintNumber\u003C/i\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Создаётся ссылка, связывающая объект \u003Ci\u003E6\u003C/i\u003E с переменной \u003Ci\u003EintNumber\u003C/i\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКаждый объект имеет сложную структуру, чем описывается на рисунке. Вместе с вышеизложенным он делится на два стандартных поля: обозначение типа и счётчик ссылок. Для наглядности сделаю для описания умную карту.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"1d8dfd98-5aa9-54a0-a32d-dd214b74e98f","width":807,"height":231,"size":30147,"type":"png","color":"dfe8f2","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИсходя из сложности понимания объекта из этой схемы логично сделать вывод, что типы определяются именно в объектах, а не в переменных. Переменные - это чисто название объекта. Таким образом Лутц предлагает следующие утверждения:\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Имена не имеют типов\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Типы обитают в объектах\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Объектам известно какого типа он содержит переменную\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что необходимо знать про объекты и сборку мусора?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТак-так, тут уже появляется новый термин, и при чём очень важный. Следует правильно понимать, что под ним люди имеют ввиду, чтобы они вас смогли понять.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИтак, Python - очень оптимизированный язык программирования. И основное в этом преимущество состоит в том, что ненужные объекты он убирает из памяти. Вот пример:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"stringName = 'Misha'\nstringName = 'Vasya'","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКак можно видеть из примера, у нас одинаковые имена stringName. И если мы выведем stringName методом print. То получим объект Vasya\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(stringName) #Vasya","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА что случилось с \u003Ci\u003EMisha\u003C/i\u003E? Правильно, он уничтожился. Таким образом произошло освобождение памяти, а за это отвечает сборщик мусора.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСборщик мусора также используется с объектами разными типами. Таким образом вот следующий пример:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"x = 42 # тип int\nx = 'shrubbery' # тип string\nx = 3.14 # тип float\nx = [1,2,3,4] # тип list","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТаким образом при выводе переменной x происходит вывод последнего объекта, а другие удаляются.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(x) # [1, 2, 3, 4]","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСборщик мусора основан на счётчике ссылок (картинка 2), однако они имеют компоненты, обнаруживающие и освобождающие пространство в памяти для объектов с циклическими ссылками\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПо Лутцу циклические ссылки служат основной проблемой сборщика мусора, основанных на счётчиках ссылок.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"А что такое циклические ссылки?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЦиклические ссылки возникают тогда, когда объект ссылается на самого себя. Вот пример:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"x = [1,2,3,4] # тип list\nx.append(x) \nprint(x) #[1, 2, 3, 4, [...]]","lang":""}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЕсли честно, я так никогда не делал, да и Мартин не рекомендует. Однако вывод весьма любознательный на мой взгляд. Вполне возможно резонно сказать на собеседовании, что подобный случай является редким, однако «с ними нужно обходиться особым образом», поскольку счётчики ссылок никогда не уменьшаются до 0\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДля получения дополнительных сведений автор рекомендует изучить модуль \u003Ci\u003Egc\u003C/i\u003E. Я о нём узнал только недавно, поэтому до сей поры не игрался.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что такое разделяемые ссылки?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EАвтор приводит показательный пример:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"name = 'Misha'\nnewName = name","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИтак, я вижу переменную \u003Ci\u003Ename\u003C/i\u003E и вижу новую переменную \u003Ci\u003EnewName\u003C/i\u003E. То есть когда мы объявили переменную \u003Ci\u003EnewName,\u003C/i\u003E то этим самым мы организовали ссылку на один и тот же объект\u003Ci\u003E Misha\u003C/i\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДля иллюстрации автор предлагает нам запомнить тему с помощью простой схемы.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"449a269a-6b17-54ff-91a9-78f69e22815e","width":807,"height":330,"size":36721,"type":"png","color":"eaeaea","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИллюстрация демонстрирует как сценарий с множеством имён ссылается на на тот же самый объект. Такой процесс называется разделяемой ссылкой\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА теперь добавим новую переменную как в следующем примере\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что же происходит здесь?"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"576596a4-412f-597c-ae0b-dfa70cc62438","width":807,"height":569,"size":60787,"type":"png","color":"ececec","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЭту схему уже понимать сложнее. Однако на основе неё можно сделать следующий вывод:\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Переменные в Python всегда являются указателями на объекты,\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Установка переменной в новое значение не изменяет первоначальный объект, но в замен указывает на ссылку переменной, находящейся в другом объекте\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Как разделяемые ссылки меняют объекты?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ самой первой статье, которая носит по большей части общий характер, описывались типы данных. Также указывалось какие типы данных являются изменяемые, а какие нет.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EАвтор напоминает, что изменяемыми типами данных являются списки, словари и множества\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДля того, чтобы продемонстрировать процесс изменения для изменения объектов, автор предлагает это сделать на примере следующего кода:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"L1 = [2,3,4]\nL2 = L1\nL1[0] = 24\nprint(L1 , L2) # [24, 3, 4] [24, 3, 4]","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДанный пример фактически демонстрирует случай с разделяемыми ссылками.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА теперь, внимание, вопрос!\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Как изменить данные в списке таким образом, чтобы объекты в двух списках не менялись?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДля ответа на этот вопрос, Лутц показывает следующий пример:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"L1 = [2,3,4]\nL2 = L1[:]\nL1[0] = 24\nprint(L1 , L2) # [24, 3, 4] [2, 3, 4]","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что делает \":\" ?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EФактически это оператор делает копию данных переменной L1. Фактически, получается, что данный объект сохраняется в памяти и L2 уже является новым объектом.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EАналогичные процессы создаются при вызове оператора \u003Ci\u003Ecopy()\u003C/i\u003E и \u003Ci\u003Edeepcopy()\u003C/i\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОператор \u003Ci\u003Ecopy()\u003C/i\u003E создаёт поверхностное копирование объекта, а \u003Ci\u003Edeepcopy()\u003C/i\u003E - глубокое копирование.\u003C/p\u003E"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПредлагаю потренироваться и проследить поведение представленных методов. Не всё же мне писать)\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Как отличить разделяемые ссылки от оператора сравнения?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЭта тема очень важная, поскольку здесь определяется суть оператора is в Python. На тему использования is даже сделали небольшой гайд на YouTube.\u003C/p\u003E"}},{"type":"video","cover":false,"hidden":false,"anchor":"","data":{"title":"","video":{"type":"video","data":{"thumbnail":{"type":"image","data":{"uuid":"93a17f9d-6e24-5f84-9f89-4ac8f8c03ec5","width":1280,"height":720,"size":74971,"type":"jpg","color":"292a32","hash":"","external_service":[]}},"width":800,"height":450,"time":0,"external_service":{"name":"youtube","id":"mQk1NIV3HXM"}}}}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПримерно об этом же говорит соответствующая глава в книге\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что ещё важно знать про Динамическую типизацию?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Динамическая типизация - абстрактное пониятие\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) В Python абсолютно всё взаимодействует через присваивание и ссылки\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Для углубления понимания. Динамическая типизация является корнем полиморфизма\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4) В Python существует только одна модель присваивания\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Вместе с разделяемыми ссылками в Python есть и «слабые ссылки», что это такое?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЧестно говоря, о существовании «слабых ссылок» я прочитал только у Лутца. Ниже я представлю мнение автора, о том, как он понимает этот термин.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСлабая ссылка - довольно развитый инструмент, который связан с моделью ссылок, но операции \u003Ci\u003Eis\u003C/i\u003E будут без них не понятны\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Данный термин реализуется в стандартной библиотеке \u003Cb\u003Eweakref\u003C/b\u003E . Она представляет ссылку на объект, которая не препятствует выполнению сборки мусора в сборке мусора\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Слабые ссылки удобны в кешах для крупных объектов на основе словарей: без них них одна ссылка приводила бы к хранению объекта в памяти бесконечно долго.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНа практике я не использовал «слабые ссылки», поэтому их применение лично для меня остаётся открытым вопросом.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНа этом всё! До новых встреч :)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E#изучаемPython #программирование #готовимсяКсобеседованию \u003C/p\u003E"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":3,"favorites":1,"reposts":0,"views":55,"hits":2241,"reads":null,"online":0},"dateFavorite":0,"hitsCount":2241,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/id1377277/564003-chto-takoe-dinamicheskaya-tipizaciya-i-kak-ona-traktuetsya-po-lutcu","author":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1766057581,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1766057581,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"reactions":{"counters":[],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":561328,"customUri":null,"subsiteId":1377277,"title":"Числа для продвинутых по Марку Лутцу","date":1670939656,"dateModified":1670939656,"blocks":[{"type":"media","cover":true,"hidden":false,"anchor":"","data":{"items":[{"title":"                                                                           Узнаёте циферки?)","image":{"type":"image","data":{"uuid":"0f683399-f7d3-534e-b40b-b50d564930b5","width":640,"height":423,"size":212984,"type":"png","color":"ccc6c0","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДоброго, прекрасного, сказочного времени суток, семья моя :) Пришло время углубляться… И искать крупицы в стоге сена, которые углубят моё представление о языке Python.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНу что ж, начинаю рефлексировать и перечитывать уже законспектированный материал.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Итак, что такое числа с точки зрения Python?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЭто объект класса. Проверить это очень просто. Достаточно лишь написать в программном интерпретаторе следующий код:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"intNumber = 3\nprint(intNumber) #3\nprint(type(intNumber)) # \u003Cclass 'int'\u003E","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EPython есть такая встроенная функция \u003Ci\u003Etype() \u003C/i\u003Eназывается. С помощью неё как раз можно узнать каким типом данных является объект. Поскольку статья посвящена числам, то мы проверяем числа. В итоге результатом проверки числа определился класс int (\u003Ci\u003E<class 'int'>\u003C/i\u003E)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПо Лутцу числа являются не одиночным типом объектов, а категорией похожих объектов. \u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДавайте другой пример.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"floatNumber = 2.5 # это число уже с другим типом данных\nprint(floatNumber)\nprint(type(floatNumber)) #\u003Cclass 'float'\u003E","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВидите различие?\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ первом примере, у нас класс целых ЧИСЕЛ, а в другом класс ЧИСЕЛ с плавающей точкой. По факту их объединяет единое понятие «ЧИСЛО», а вот \u003Ci\u003E<class 'float'> \u003C/i\u003Eи \u003Ci\u003E<class 'int'>\u003C/i\u003E являются их категориями (или характеристиками).\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТаким образом выделяются следующие категории чисел:\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Целые числа и с плавающей точкой\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"floatNumber = 2.5\nintNumber = 3","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Комплексные числа\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"a = 3j\nprint(a) # 3j","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Десятичные числа\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import decimal\nprint(decimal.Decimal('2.6') + decimal.Decimal('1.2'))","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4) Дроби\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import fractions\nprint(fractions.Fraction(1,2)) #1/2","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E5) Булевы числа (True/ False)\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"Laptop = True #эквивалент 1\nKeyBoard = False #эквивалент 0","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E6) Встроенные функции и модули\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import math\nprint(math.sqrt(9))","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКак можно увидеть исходя из категорий далеко не все представления чисел входят в базовый модуль Python. Например для работы с десятичными и дробными числами мне пришлось импортировать библиотеки \u003Ci\u003Edecimal\u003C/i\u003E и \u003Ci\u003Efractions\u003C/i\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПри работе с числами очень важно знать операции, которые необходимы для их обработки. Операции применяются по старшенству. Я выделил это понятие, потому что несоблюдение данного правила могут вызвать ошибки в программе. Из правила старшинства следует перечень операций приоритетные к обработке по сравнению с другими. Перечень операторов можно взять из (\u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fvk.com%2Faway.php%3Fto%3Dhttps%253A%252F%252Fletpy.com%252Fhandbook%252Foperator-priorities%252F%26cc_key%3D&postId=561328\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Ehttps://letpy.com/handbook/operator-priorities/\u003C/a\u003E) этой таблицы. А в этой статье (\u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fvk.com%2Faway.php%3Fto%3Dhttps%253A%252F%252Fhabr.com%252Fru%252Fcompany%252Fvk%252Fblog%252F337364%252F%26cc_key%3D&postId=561328\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Ehttps://habr.com/ru/company/vk/blog/337364/\u003C/a\u003E) можно встретить экзотические случаи, когда игнорирование правила старшенства может привести к ошибочному результату.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Числа в действии"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДля того, чтобы приступить к разбору числовых типов данных необходимо помнить о правилах присвоения переменных. \u003C/p\u003E","subline1":"М.Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1. Переменные создаются, когда им присваиваются значения.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2. Переменные заменяются своими значениями, когда используются в выражениях\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3. Переменным должны быть присвоены значения до того, как можно применять их в выражениях\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4. Переменные ссылаются на объекты и не объявляются заранее\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНиже опишу это с помощью кода\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003E1 правило:\u003C/b\u003E\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"Number =3 # Number - название переменной , 3 - значение # 1 утверждение","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003E2 правило\u003C/b\u003E\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"Number =3 #объявление переменной\nNextNumber = Number + 4 # Замена переменной своим значением\nprint(NextNumber) # 7","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003E3 правило\u003C/b\u003E\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\"\"\"\nНеобходимо сначала ОБЪЯВЛЯТЬ, а потом выполнять операции, иначе ошибка\n\"\"\"\nNumber1+Number2 # NameError: name 'Number1' is not defined\nNumber1 = 3\nNumber2 = 5","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003E4 правило\u003C/b\u003E\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\"\"\"\nТак тоже нельзя\n\"\"\"\nprint(Number) #NameError: name 'Number' is not defined\nNumber = 3","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Неочевидные вещи при работе с числами"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Если я захочу вычислить несколько чисел в одной строке, то формальным результатом получу кортеж.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"Numbers = 2 +3 , 3+4\nprint(Numbers) # (5, 7)\nprint(type(Numbers)) # \u003Cclass 'tuple'\u003E","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВот показательный пример. Тут я запихал в переменную Numbers два выражения, их он оформил в кортеж. Если я проверю тип, то обнаружу, что он НЕ относится к числовому типу данных. Магия Python в действии :)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Если я захочу отформатировать строку, то можно воспользоваться следующими примерами.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНа форматировании я останавливаюсь очень подробно в виду того, что очень привык к f-строкам (хотя это самый мощный и быстрый инструмент). На мой взгляд, такой расклад вещей не является Best Practice, поэтому приведу форматирование чисел как видит их Лутц.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Я мало использовал правила отображения. \u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЗнаете ребят, я редко их применял в функциональном программировании, но это не значит, что они вообще не нужны. Как я понял они очень востребованы в ООП (там, где мы объявляем классы).\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003EКак отличить отображение? \u003C/b\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЛучше опишу конкретными примерами\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"repr('spam') # \"'spam'\" - это отображение как в коде\nstr('spam') # 'spam' - более дружественный человеку вариант","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Ci\u003Erepr ()\u003C/i\u003E представляет собой представляет собой вывод выражения, таким образом, каким его видит код\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Ci\u003Estr()\u003C/i\u003E представляет собой более дружественный вывод объекта\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4) \u003Cb\u003EНемного о правилах деления. \u003C/b\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТут и без комментариев всё понятно, поэтому сразу к написанию программ:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"10/4 # 2.5 # вывод - число с плавающей точкой\n10//4 # 2 вывод - число типа int\n10//4.0 #2.0 вывод - число типа float","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПравила округления:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import math\nmath.floor(2.525) # 2 - усечение в меньшую сторону\nmath.trunc(2.5) # 2 - усечеение дробной части\nround(2.6) # 3 - округление в большую строну","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003E5) О существовании представления комплексных чисел в Python я не знал, поэтому для меня это новая информация.\u003C/b\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПо Лутцу, комплексные числа являются отдельным основным типом объектов в Python. Данное число состоит из действующей и мнимой части. И записываются с добавлением суффикса j и J.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПример с использованием комплексных чисел я приводил в самом начале статьи, поэтому останавливаться на этом больше не буду\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E6) \u003Cb\u003EПоддержка системы счисления. \u003C/b\u003EДанный пункт я прямо хорошо проработал на CodeWars. Здесь я лишь только скажу, что в базовой комплектации Python работает с двоичной, восьмеричной, десятичной, шестнадцатеричной системой счисления.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПреобразование в десятичный тип:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(0o10, 0o20, 0o5) #8 16 5 преобразование в десятичный тип из восьмеричного\nprint(0o10+ 0o20) #24 преобразование в десятичный тип\nprint(0b001, 0b111) # 1 7 преобразование в десятичный из двоичного\nprint(0x2f) #47 - преобразование в десятичный тип из шестнадцатеричного","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПреобразование в обратную сторону:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(hex(20)) # в шестнадцатеричный тип\nprint(bin(2)) # в двоичный\nprint(oct(20)) # в восьмеричный","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Правила форматирования разных типов"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"'{0:o}, {1:x}, {2:b}'.format(64, 64, 64) # '100, 40, 1000000' # с применением метода format\n'%o, %x, %x, %X' % (64, 64, 255, 255) # '100, 40, ff, FF' без применения методов format","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E7) Существуют другие встроенные типы. К ним Лутц относит random и math. Есть и более продвинутые ( вроде NumPy но о них автор не рассказывает)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИх описание я привёл выше по тексту. Основные методы, которые содержит этот модуль можно взять из официальной документации.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Ci\u003EМодуль random: \u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fvk.com%2Faway.php%3Fto%3Dhttps%253A%252F%252Fdocs.python.org%252F3%252Flibrary%252Frandom.html%26cc_key%3D&postId=561328\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Ehttps://docs.python.org/3/library/random.html\u003C/a\u003E\u003C/i\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Ci\u003EМодуль math: \u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fvk.com%2Faway.php%3Fto%3Dhttps%253A%252F%252Fdocs.python.org%252F3%252Flibrary%252Fmath.html%26cc_key%3D&postId=561328\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Ehttps://docs.python.org/3/library/math.html\u003C/a\u003E\u003C/i\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EРебят, в программировании очень важна тренировка и отработка навыков, поэтому тут моя рекомендация: поэкспериментируйте с этими модулями, не бойтесь ошибаться. Уж лучше ошибиться сейчас, чем на собеседовании :)\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Основы десятичных чисел . Для чего нужен модуль Decimal?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКак говорит Лутц математика с плавающей точкой не является точным представлением вычисляемого выражения. Для того, чтобы это исправить существует внутренняя библиотека decimal. В начале статьи я уже упоминал в вкратце об этом модуле.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ этом пункте привожу наиболее интересные случаи:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"from decimal import Decimal\nDecimal('0.1') + Decimal('0.1') + Decimal('0.1') - Decimal('0.3') # Вывод: Decimal('0.0')\nDecimal(0.1) + Decimal(0.1) + Decimal(0.1) - Decimal(0.3) # Вывод: Decimal('2.775557561565156540423631668E-17')","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЗдесь в выводе следует особо обращать внимание на точность.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(0.1+0.1+0.1-0.3) #5.551115123125783e-17 (похож на предыдущий пример)","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОбратите внимание! Если вы хотите вывести число в более человекочитаемом виде, то рекомендуется отображать числа в строковом представлении\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Глобальная установка точности"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЧтобы установить точность модуля decimal необходимо его настроить. Для этого существует метод getcontext().prec\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВот пример из книги:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import decimal\ndecimal.Decimal(1)/decimal.Decimal(7) # Decimal('0.1428571428571428571428571429')\ndecimal.getcontext().prec = 4 # присвоение фиксированной точности\ndecimal.Decimal(1)/decimal.Decimal(7) #Decimal('0.1429')","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EРебята, знаете, если бы я знал об этом раньше, то работа с точными числами на CodeWars обходилось бы мне куда меньшей болью. Так что примите даннный модуль во внимание. Если вы столкнётесь с анализом больших данных и вычислении собственных показателей, он может вам оказать просто огромную службу\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E9)\u003Cb\u003E Поработаем с дробями. \u003C/b\u003EЭто тоже полезный метод. С дробями, ребят я на CodeWars не сталкивался, но однако не факт, что подобного типа задач там нет.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВот парочку примеров:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import fractions # импорт модуля с дробями\nxCoordinate = fractions.Fraction(1 , 3) # 1 - числитель, 3- знаменатель\nyCoordinate = fractions.Fraction(4, 6) # аналогично\nprint(xCoordinate, yCoordinate) #1/3 2/3 (вывод координат X и Y)","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИспользование этого модуля автоматически упрощает дробь. Метод позволяет работать с числами разных типов. Для экспериментов можно обратиться к документации. (\u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fvk.com%2Faway.php%3Fto%3Dhttps%253A%252F%252Fdocs.python.org%252F3%252Flibrary%252Ffractions.html%26cc_key%3D&postId=561328\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Ehttps://docs.python.org/3/library/fractions.html\u003C/a\u003E)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E10)\u003Cb\u003E Поработаем со множествами.\u003C/b\u003E По Лутцу множества представляют неупорядоченную коллекцию уникальных и неизменяемых объектов, которая поддерживает операции, соответствующие математической теории множеств.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСразу скажу, определение достаточно сложное. Его хорошо прорабатывать на практических примерах. Опишу его примерами:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"x = 'abcde'\ny = 'bdxyz'\nprint(set(x) , set(y)) {'c', 'd', 'a', 'e', 'b'} {'y', 'd', 'z', 'x', 'b'}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EМножества описываются встроенным методом\u003Ci\u003E set()\u003C/i\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЕго методами являются такие операции как: разность, пересечение, объединение, симметрическая разность, надмножество, подмножество\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"x = 'abcde'\ny = 'bdxyz'\nsetX, setY = set(x) , set(y)\nsetX-setY # разность {'c', 'e', 'a'} \nsetX | setY # объединение {'y', 'c', 'd', 'z', 'x', 'a', 'e', 'b'}\nsetX & setY # пересечение {'d', 'b'}\nsetX^setY # симметрическая разность (исключающее ИЛИ) {'c', 'z', 'a', 'e', 'x', 'y'} \nsetX\u003EsetY, setX\u003CsetY # надмножество, подмножество","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВместе с операциями есть пара методов, среди которых: add() и update()\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДля чего могут использоваться множества?\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003E1) Для создания объектов с уникальными номерами\u003C/b\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003E2) Для выделения различий в списках, строках и других объектах\u003C/b\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Выполнения проверок на равенство, нейтральное к порядку\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003E4) Обработка запросов, связанных с базами данных\u003C/b\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТе пункты, которые я выделил, считаю наиболее важными.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"da28abc7-1bdb-529f-bd27-6143c196575b","width":618,"height":350,"size":105403,"type":"png","color":"d6a061","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВот и закончилось глубокое описание работы с числами в Python!\u003C/p\u003E"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":1,"reposts":0,"views":48,"hits":172,"reads":null,"online":0},"dateFavorite":0,"hitsCount":172,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/id1377277/561328-chisla-dlya-prodvinutyh-po-marku-lutcu","author":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1766057581,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1766057581,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"reactions":{"counters":[],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":560768,"customUri":null,"subsiteId":1377277,"title":"Python, начало","date":1670907752,"dateModified":1670907752,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВсем здравствуйте, друзья. Сегодня я продолжу рассказывать про обучение программированию на Python.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДолжен сразу предупредить, что у меня был уже достаточно наработанные навыки по программированию на этом языке. Сейчас они ограничиваются знанием нескольких сторонних библиотек (на подобие Pandas, Numpy, Flask) и практикой решения задач на CodeWars (\u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fvk.com%2Faway.php%3Fto%3Dhttps%253A%252F%252Fwww.codewars.com%252F%26cc_key%3D&postId=560768\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Ehttps://www.codewars.com/\u003C/a\u003E) . Для того, чтобы достичь более-менее хороших навыков владения языком, мне потребовалось решить не менее 500 задач разного уровня сложности.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДальше я понял, что хорошая практика - это конечно хорошо, но тот факт, что мои знания не систематизированы вызывало некую озадаченность. Поэтому я задал себе вполне резонный и закономерный вопрос: «Как мне всё это можно систематизировать?»\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНа этот запрос гугл выдал весьма лаконичный результат - книги. Прекрасно! Книги - это такой источник знаний, который позволяет дать не только систему, но и теорию.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЯ полез на YouTube и сразу почти первым результатом выскочила книга Марка Лутца «Изучаем Python».\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"24ac7b71-a81a-541b-a1b5-718674d3203b","width":604,"height":425,"size":122443,"type":"png","color":"6f3d63","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EХорошо, подумал я. Видно, что книга толстая и это круто, ведь это то, что мне и нужно было. Но одно дело книга, а другое - содержимое. Таким образом посмотрел следующий ролик\u003C/p\u003E"}},{"type":"video","cover":false,"hidden":false,"anchor":"","data":{"title":"","video":{"type":"video","data":{"thumbnail":{"type":"image","data":{"uuid":"a83da894-9ad0-5016-9145-0e4daa635214","width":1280,"height":720,"size":128397,"type":"jpg","color":"c3b4af","hash":"","external_service":[]}},"width":800,"height":450,"time":0,"external_service":{"name":"youtube","id":"ipXBlnv8odU"}}}}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ общем спасибо автору за качественную рецензию! Теперь я знаю, что читать.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ кратце скажу, что данная книга НЕ для новичков. Я полностью разделяю мнение автора этого ролика. Однако имея небольшой опыт программирования, эту книгу должен прочитать каждый. Она описывает практики и шаблоны, применяя которые можно улучшить качество кода а также систематизировать УЖЕ ИМЕЮЩИЕСЯ знания.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНа текущий момент у меня на руках русская версия этой книги. Она есть как в свободном доступе, так и на Ozon. Однако я предпочитаю печатную версию книги, по той простой причине, что в таком виде мне легче её разобрать. Два тома обошлись в кругленькую сумму - 7500 рублей.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНиже я напишу преимущества и недостатки.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Преимущества"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Устаревшая версия\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Средний перевод\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНу а теперь плавно переходим к цели. Данную статью я прежде пишу, чтобы определить шаблоны реализации программного кода и их использование на практике.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЗдесь будут представлены блоки реализации программного кода, которые я редко использовал в процессе практики на CodeWars.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЯ очень надеюсь, что они сохранятся в моей голове и я уже в дальнейшем могу использовать их на реальном коде. Приступаю…\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Введение в типы объектов в Python"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ начале этой главы автор начинает с представления о концептуальной иерархии в Python. Что ж, я попробую её перевести с русского на русский и сделать информацию более понятной для себя.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИтак, из чего состоят программы:\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Модули. В любой программе они описываются в начале документа. Примером модуля может являться импорт сторонней библиотеки, внутренней библиотеки и файла с самописным кодом.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import pandas as pd \nfrom math impot pi\nimport numpy as np\n....\nimport mycode","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Модули содержат операторы. По сути своей операторы соответствуют понятию переменные. Очень важно понимать как именуются переменные. На днях я писал статью на хабре ( \u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fvk.com%2Faway.php%3Fto%3Dhttps%253A%252F%252Fhabr.com%252Fru%252Fpost%252F683956%252F%26cc_key%3D&postId=560768\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Ehttps://habr.com/ru/post/683956/\u003C/a\u003E), где как раз указана информация о том, как надо правильно именовать переменные. Данная статья вызвала вал критики. Но факт есть факт. Операторы (как и переменные) надо именовать. Маленький пример:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"PersonId = 3\nNextPersonId = PersonId+1","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Операторы содержат выражения. По сути своей выражение - это блок кода, который выполняется для вычисления значений или операторов.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"numbers = []\nfor i in range(1,3):\n numbers.append(i)\nprint(numbers) #[1, 2]","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4) Выражения обрабатывают объект. Вообще объект - это основа Python. В данном языке всё состоит из объектов. Так что привыкайте к правильному именованию переменных :). Особенно когда речь идёт о классах.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ Python любой объект состоит из типов. Из всего многообразия типов я, например не знал, что к типам относят не только строки, числа, множества, словари и списки , кортежи но и файлы, модули, классы, структурированный код. Так что на собеседовании надо быть внимательным, когда задают вопрос про типы.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИ теперь чуть-чуть про типы.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Числа"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЧисла - это представление объектов в виде цифр. В общем виде отображать числа в Python просто. Здесь они описываются в виде целых типов или типов с плавающей точкой.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"integerNumber = 2\nfloatingNumber = 2.5\nprint(integerNumber+floatingNumber) #4.5","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКак видно из примера, целые не содержат точки, а с плавающей точкой содержат точку. Звучит как масло-масленое, но что есть, то есть.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Другие примеры"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import math\nprint('%.2f'% (math.pi)) # 3.14\nprint('%.2f'% (math.pi*2)) # 6.28","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЗдесь пример сложнее. Самая первая строка импортирует встроенный модуль math. Если что, он представляет набор функций и переменных с помощью которых можно вычислять базовые математические значения. Считается, что хорошей практикой является чтение документации. Слава Богу, я знаю английский и подобрать примеры для вас не составляет большого труда. В случае чего базу можно найти здесь \u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fvk.com%2Faway.php%3Fto%3Dhttps%253A%252F%252Fdocs.python.org%252F3%252Flibrary%252Fmath.html%26cc_key%3D&postId=560768\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Ehttps://docs.python.org/3/library/math.html\u003C/a\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОднако, если так случится, что я не смогу туда добраться. Вдруг против меня введут санкции, то можно воспользоваться встроенной функцией \u003Ci\u003Edir()\u003C/i\u003E и \u003Ci\u003Ehelp()\u003C/i\u003E\u003C/p\u003E"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА теперь внимание! На собеседованиях очень часто спрашивают про них. Поэтому я оставлю информацию о них в этой заметке .Функция dir() описывает методы, которые может содержать тип данных.\u003C/p\u003E","subline1":""}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(dir(math))","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВыведет\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']","lang":""}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(help(math.pi))","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВыведет\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"Help on float object:\nclass float(object)\n| float(x=0, /)\n|\n| Convert a string or number to a floating point number, if possible.\n|\n| Methods defined here:\n|","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИными славами, dir() выводит список методов, а help() - справочную информацию.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Строки"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСтроки необходимы для тестовых данных. Здесь Марк Лутц говорит об объявлении строки, подсчёте количества символов, индексах и срезах. Базовые знания о строках я имею, поэтому заострять внимание на них не буду. Однако добавлю, что они поддерживают специфичные методы и форматирование. Пример форматирования оставлю здесь\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"NewSentence = '%s, eggs and %s' % ('spam', 'SPAM')\nprint(NewSentence) #spam, eggs and SPAM","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЭтот пример очень важный при работе с базой данных. Именно таким образом надо осуществлять вставку в многие реляционные БД. Вместе с этим хорошей популярностью пользуются f-строки. Они не описываются в книге, но в CodeWars я их использую часто.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОтдельно отмечу информацию, что числа, что строки являются неизменяемыми. Иными словами, если я захочу их модифицировать, сделать это не получится, потому что Python это запрещает. А теперь возможный вопрос из собеседования.\u003C/p\u003E"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКакие типы данных являются неизменяемыми?\u003C/p\u003E","subline1":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Ci\u003EОтвет\u003C/i\u003E: помимо вышеизложенных ещё кортежи и bytearray\u003C/p\u003E"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА какие изменяемые?\u003C/p\u003E","subline1":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Ci\u003EОтвет: \u003C/i\u003Eсписки, словари, множества\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Строки Unicode"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВот тут я бы возможно пролетел. Не знаю, правда на сколько данная тема важна, но шпаргалку всё-таки оставлю.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что же такое Unicode?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПо сути своей это кодировка. Она используется для обработки символов. Её используют для представления строк для тех символов, которые не помещаются в латинский алфавит. Python позволяет использовать множество символов кодировок. Лутц среди них выделяет байтовые строки (bytes), UTF и др. Они очень пригождаются для чтения данных с файлов с использованием сторонних библиотек (например Pandas).\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДалее примеры:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print('sp\\xc4m') # spÄm - текст Unicode\nprint(b'a\\x01c') # b'a\\x01c' - флаг b (байтовое представление строки)\nprint(u'sp\\u00c4m') # spÄm - флаг u (соответствует Unicode)","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКодировка и декодирование:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"WordTo8 = 'spam'.encode('utf8') # 4 байта в файлах b'spam'\nWordTo16 = 'spam'.encode('utf16') # 16 байтов в файлах b'\\xff\\xfes\\x00p\\x00a\\x00m\\x00'\nprint(WordTo8.decode('utf8')) #spam\nprint(WordTo16.decode('utf-16le')) #spam","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТо, что я привожу - это игровой пример, но вдруг где-то пригодится.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Сопоставление с образцом"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЗдесь автор ссылается на регулярные выражения. Подробнее о них я остановлюсь в другой статье\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Списки"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСписки - основа Python. И это действительно так. Вместе с этим они представляют собой изменяемый набор последовательности. Я не буду останавливаться на этом типе данных, поскольку их часто применял на CodeWars. Единственное оставлю форму объявления списка\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"Names = ['Ben', 'Pen', 'Den'] # ['Ben', 'Pen', 'Den']\nNamesList = list('Ben') # ['B', 'e', 'n']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПоскольку list разделяет строку поэлементно, то такой способ используется достаточно редко. Наиболее часто можно встретить первый способ\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что умеют списки?"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Срезы (только в пределах списка!)","Добавлять элементы, удалять элементы, изменять элементы\u003Cbr /\u003E","Вложение элементов\u003Cbr /\u003E","Использовать списковые включения (list comprehencions)\u003Cbr /\u003E","Вложенные функции (с помощью map, и filter)\u003Cbr /\u003E"],"type":"OL"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"inneredList = [\n [1,2,3],\n [4,5,6],\n [7,8,9]\n]\n\nprint(inneredList) # очень круто, когда список создаётся как табуляция (тогда понятно сколько он содержит строк)","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Словари"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСловари как и списки являются одним из способов представления данных. Если я хочу детализировать данные, то словарь самая лучшая тема. Здесь я приведу различные способы создания словарей ( в том числе даже такие, о которых и знать не знал), если бы не стал читать Лутца.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"FirstDict = {'food': 'Spam', 'quantity': 4, 'color': 'Pink'} #Знал\nSecondDict = dict(food='Spam', quantity=4, color='Pink') # Знал\nThirdDict = dict(zip(['food', 'quantity', 'color']), zip(['Spam', 4, 'Pink'])) # Не знал","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EО функции \u003Ci\u003Ezip()\u003C/i\u003E я знал давно, но я не задумывался о том, что его можно применять при создании словаря. Не знаю насколько данный способ крутой, но что есть, то есть.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКак можно представлять вложенные словари:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"rec = {'name': {'first': 'Bob', 'last': 'Smith'},\n 'jobs': ['dev', 'mgr'],\n 'age': 40.5}\nprint(rec) #{'name': {'first': 'Bob', 'last': 'Smith'}, 'jobs': ['dev', 'mgr'], 'age': 40.5}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТакой вывод хорошо описывает структуру представления данных и именно так собираются данные, например при парсинге сайта. Словари очень похожи на списки.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Кортежи"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНеизменяемый тип данных. Он очень похож на список, но его нельзя изменить. Формат его представления описывается с помощью круглых скобок. Вот как это выглядит:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"a = (1,2, 3)\nprint(a) #(1, 2, 3)\nprint(type(a)) # \u003Cclass 'tuple'\u003E","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСтоит обратить внимание, что в английском языке кортеж называется tuple. Поэтому не стоит пугаться, если не увидите в интерпретаторе kortezg ^-^)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОн поддерживает всего два метода. Среди них \u003Ci\u003Ecount() \u003C/i\u003Eи \u003Ci\u003Eindex()\u003C/i\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКортежи я тоже часто использовал на CodeWars. Поэтому сильно много о них говорить не стану.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Файлы"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЗдесь я в первые столкнулся с тем, что файл это тип данных!\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EФормально он описывается с помощью этого выражения\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"f = open('dataone.txt', 'w')\nf.write('Hello\\n')\nf.write('world\\n')\nf.close()","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДанный код создаёт файл и помещает в него Hello world.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"e644f4b9-199a-5508-b182-619ea64e51d6","width":807,"height":454,"size":42154,"type":"png","color":"edeeeb","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EС помощью файлов можно записывать , создавать, модифицировать и считывать данные.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EС ними я поиграюсь в другой статье и уделю им много времени, так как я о них знал, но не игрался :)\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Множества"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВсё пошло из математики :) И множества тоже. По сути это ещё один тип данных. В основном я его использовал тогда, когда хотел вычленить уникальные значения в списке. Вот как это работает.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"a = [2,3,4,5,5,6,7,8,8,8]\nsetA = set(a)\nprint(len(a), len(setA))","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОчень частый приём, но я запишу его сюда, чтобы не забыть во время собеседования.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОперации со множествами в целом вызывают у меня интерес, так как они могут использоваться при работе с базами данных, поэтому я оставлю эту тему на попозже.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Классы"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКакое же программирование без классов? Классы - это основа объектно-ориентированного программирования (далее ООП). Их буду изучать подробнее, так как знания именно в классах вообще слабые. Тут оставлю базовый шаблон.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"class Worker:\n def __init__(self, name, pay):\n self.name = name\n self.pay = pay\n def lastName(self):\n return self.name.split()[-1]\n def giveRaise(self, percent):\n self.pay *= (1.0 + percent)\n \nbob = Worker('Bob Smith', 5000)\nbob.giveRaise(1)\nbob.pay","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПока оставляю без комментариев.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВот такое вот краткое введение в типы данных. Спасибо за чтение!\u003C/p\u003E"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":4,"favorites":2,"reposts":0,"views":41,"hits":355,"reads":null,"online":0},"dateFavorite":0,"hitsCount":355,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/id1377277/560768-python-nachalo","author":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1766057581,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1766057581,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"reactions":{"counters":[{"id":1,"count":2}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":560592,"customUri":null,"subsiteId":1377277,"title":"Поговорим про человека","date":1670867985,"dateModified":1670867985,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКак можно понять из заголовка, сегодня речь пойдёт не про профессиональные навыки и умения, которым можно обучиться, а про человека. Нет, даже не так, Человека. Сложную на первый взгляд натуру, имеющее своё миропонимание, мироощущение и жизненную позицию.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИ прежде чем начать говорить о нас с вами, предлагаю обратить внимание на эти две картинки\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"                                                                                   Первая","image":{"type":"image","data":{"uuid":"c9853af0-b3ce-5a97-8c9f-9087825d9dee","width":800,"height":509,"size":82253,"type":"png","color":"e7e2e1","hash":"","external_service":[]}}}]}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"                                                                              Вторая","image":{"type":"image","data":{"uuid":"267df48d-a902-57ca-8cdc-f63b3d2708d1","width":630,"height":473,"size":248741,"type":"png","color":"d5a498","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EУзнаёте на них себя? Я узнаю себя на первой и второй. И при чём вторая — это то состояние, в котором я был, а первое — тот кем являюсь и по сей день. Признаюсь, для этого перехода мне приходится проходить огромный путь и каждая победа над своими собственными драконами, страхами и другими негативными словами помогает быть чуточку счастливей, любить этот мир и обнимать его таким, какой он есть.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСегодня я готов рассказать про эту трансформацию и про этот путь. Для этого понадобится вспомнить о знаниях из многих областей: математики, философии, истории, русского языка и толкования слов и даже основ религии. Я не жду, что вы примите слова как за истину в конечном пределе. Я единственное порадуюсь, если вы дочитав всё до конца, сформируете свой взгляд на эту статью и при желании дадите обратную связь.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"О мироощущении"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОчень важная и нужная вещь, помогающая воспринимать этот мир, извлекать уроки и делать выводы, превращая их в ЗНАНИЯ. Это движение уроки-выводы-знания на мой взгляд невозможно найти ни в одной из книг: ни в научной, ни классической, ни в учебной литературе. Я считаю, тех людей, которые действительно любят получать знания героями! Ваша черта характера очень редка в это время, ведь вы — ЛЮБОЗНАТЕЛЬНЫЙ ЧЕЛОВЕК!\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЧто же такое это за предмет то такой ЛЮБОЗНАНИЕ?\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОткрываю словарь и читаю:\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Любознательность – стремление к приобретению всё новых знаний. (\u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fvk.com%2Faway.php%3Fto%3Dhttp%253A%252F%252Fwww.xapaktep.net%252Fvirtues%252Frussian%252Finquisitiveness%252Fdesc.php%26cc_key%3D&postId=560592\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Ehttp://www.xapaktep.net/virtues/russian/inquisitiveness/desc.php\u003C/a\u003E)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Любознательность – Внутренняя заинтересованность в получении новой информации с целью удовлетворения познавательной потребности. (\u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fvk.com%2Faway.php%3Fto%3Dhttps%253A%252F%252Fdic.academic.ru%252Fdic.nsf%252Fsocio%252F1924%252F%25CB%25DE%25C1%25CE%25C7%25CD%25C0%25D2%25C5%25CB%25DC%25CD%25CE%25D1%25D2%25DC%26cc_key%3D&postId=560592\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Ehttps://dic.academic.ru/dic.nsf/socio/1924/%D0%9B%D0%AE%D0%91%D0%9E%D0%97%D0%9D%D0%90%D0%A2%D0%95%D0%9B%D0%AC%D0%9D%D0%9E%D0%A1%D0%A2%D0%AC\u003C/a\u003E)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Любознательность — это желание постигать мир, узнавать новую информацию самостоятельно или с помощью доступных источников, например книг.(\u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fvk.com%2Faway.php%3Fto%3Dhttps%253A%252F%252Fschool-ethiopia.ru%252Fbaza-sochinenij%252Flyuboznatelnost-argumenty.html%26cc_key%3D&postId=560592\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Ehttps://school-ethiopia.ru/baza-sochinenij/lyuboznatelnost-argumenty.html\u003C/a\u003E)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EУглубляясь в эту тему я вижу ещё два термина, близких по смыслу: ЛЮБОПЫТСТВО и ИНТЕРЕС.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Любопытство — бессознательное стремление к познанию, присущее не только человеку, но и многим живым существам. (\u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fvk.com%2Faway.php%3Fto%3Dhttps%253A%252F%252Fru.wikipedia.org%252Fwiki%252F%25CB%25FE%25E1%25EE%25EF%25FB%25F2%25F1%25F2%25E2%25EE%26cc_key%3D&postId=560592\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Ehttps://ru.wikipedia.org/wiki/%D0%9B%D1%8E%D0%B1%D0%BE%D0%BF%D1%8B%D1%82%D1%81%D1%82%D0%B2%D0%BE\u003C/a\u003E)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Интерес — Внимание, возбуждаемое чем-н. значительным, привлекательным. (\u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fvk.com%2Faway.php%3Fto%3Dhttps%253A%252F%252Flanguages.oup.com%252F%26cc_key%3D&postId=560592\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Ehttps://languages.oup.com/\u003C/a\u003E)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКак вы думаете для чего я привёл сюда эти термины и определения? Отвлекитесь от экрана и подумайте как часто говорите в своей речи эти три слова?\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"                                     А это картинка, чтобы случайно не прочесть текст ниже","image":{"type":"image","data":{"uuid":"8b9375e1-5548-58cd-951a-d71e66414533","width":495,"height":330,"size":52171,"type":"png","color":"100705","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОднажды я тоже задумался о том, как эти три слова влияют на моё сознание и что происходит в мышлении в следствие этого. Произношу эти три слова в слух: ЛЮБОЗНАНИЕ, ЛЮБОПЫТСТВО, ИНТЕРЕС. Чувствую в них совершенно разную тональность. А не эта ли тональность является результатом программирования себя на будущие события в жизни?\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"                                                                                Думаю...","image":{"type":"image","data":{"uuid":"be6995ae-9fff-5da4-ab1b-c5ab98857248","width":807,"height":807,"size":308708,"type":"png","color":"34524a","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЕсли ЛЮБО-ЗНАНИЕ — это ЛЮБОВЬ к ЗНАНИЯМ. А ЛЮБО-ПЫТСТВО — пытать ЛЮБОВЬ? Разве можем мы пытать любовь, подвергать её пыткам, унижать это вечное чувство? А ведь оно дано нам Свыше. А если так, то я отвергаю то, что даётся мне свыше. .. В представленном в статье определении смысл слова не раскрыт, но если разобрать его по составу, то можно понять его сущность.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА теперь если постоянно произносить это слово…\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСтану ли я счастливым человеком? Как будто изнутри приходит ответ «нет».\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДальше разбираюсь с «ИНТЕРЕСОМ». Читаю внимательно определение. И вижу слово «ВОЗБУЖДЕНИЕ». Это похоже на что-то проходящее, мы ПЫТАЕМ ИНТЕРЕС только к тому, что хотим закончить…\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА ДЛЯ ЧЕГО мне что-то заканчивать, если я просто ЛЮБЛЮ ЗНАТЬ? В первом случае тональность вверх, во втором и третьем тональность вниз. И тут на помощь приходит математика и графики.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"                                                                        Тональность вверх","image":{"type":"image","data":{"uuid":"bc6bb9b2-6d4a-5fe9-9ce0-a01bdd62fe0f","width":348,"height":382,"size":42788,"type":"png","color":"dcdddb","hash":"","external_service":[]}}}]}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"                                                                       Тональность вниз","image":{"type":"image","data":{"uuid":"e72ee2af-a021-599c-9428-d0e9239cef2a","width":285,"height":177,"size":30089,"type":"png","color":"0d0506","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА ведь каждый человек желает, чтобы у него шло всё вверх, а не вниз :)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКакой вывод я сделал с этого?\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Мы те, что произносим в нашей речи. Если много негативного тона (напр. «плохо», «ужасно», «противно», «ничего себе»), значит программируем себя на то, что никогда не сможем сделать.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) А если очень много положительного тона (напр. «хорошо», «замечательно», «прекрасно», «удивительно»), значит мы в большей вероятности сделаем всё запланированное и просто порадуемся результатам)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Негативный тон конечный, а позитивный вечный. В негативном состоянии обречён на проигрыш, а в позитивном — нет.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4) Каждое произнесённое слово программирует на негативный или позитивный исход события\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПолученные выводы вдохновили копать ещё дальше\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Всё, что конечное — материальное, а бесконечное — вечное."}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКак это связано с мышлением? Делюсь своими наблюдениями\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"463d8c1c-96c2-5ed1-8c89-2e88db501d52","width":807,"height":537,"size":174101,"type":"png","color":"2c2f36","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЛюбая материальная вещица, которую я видел в магазинах имеет свойство устаревать. И доходит до того, что в конечном итоге она умирает и Человечество о нём забывает. Когда вещь новая, то срок её жизни достаточно длинный, а кривая сильно далека от оси OX. Смотрите на картинку.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"В общем случае всё, придуманное человеком имеет вышеизложенный вид","image":{"type":"image","data":{"uuid":"97bf4c66-d8d1-56af-9682-38fa93ae140b","width":452,"height":339,"size":86024,"type":"png","color":"d3d3d3","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПод такую кривую подходят не только все вещи, но и технологии и как не странно тело человека. Устаревание технологий очень хорошо описывает типовая модель жизненного цикла.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"                                                  Кривая жизненного технологического цикла","image":{"type":"image","data":{"uuid":"13ae08c0-1bb6-51ba-a729-33ba65a21c5c","width":443,"height":221,"size":27385,"type":"png","color":"e5e5e5","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА теперь вопрос\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Всё, что описано выше являются материальными предметами. График наглядно показывает как материя устаревает. А что же в таком случае может быть бесконечно-вечное?"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"774b9c87-6e2f-5f4d-880c-215f25628962","width":757,"height":504,"size":217664,"type":"png","color":"bdc1bd","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНа ум пришло мышление, но здесь всё не так то просто.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EУ Человека мышление бывает материальным и нематериальным, то есть зацикленным либо на получение материального (потребление), либо на получение нематериального т.е. вечного. Что я под этим подразумеваю?\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EМатериальное это когда:\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Человек стремится получить высокопоставленную должность\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Прочитать книгу без понимания о чём она\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Получить дорогой предмет\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4) … (дальше читателя помыслить самим)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНематериальное это когда:\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Извлекаем уроки\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Получаем знания\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Вдохновляемся…\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4) … (дальше прошу читателя помыслить самим)\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Размышляя на эту тему появился вопрос: люди, которые мыслят материальными категориями себя убивают, а вечными — постоянно возрождают?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА ведь процесс устаревания и возрождения хорошо описывает график нормального распределения. Только это происходит в цикле… То есть после того, как кривая будет близкой к нулю, значит она возродится снова.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"c02c14ad-08e1-5693-ae5f-47af8c6f2558","width":566,"height":351,"size":51053,"type":"png","color":"e6e4e4","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПриведу простой пример, который мне рассказал мой научный руководитель в аспирантуре.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"2e388b59-cee0-5eea-9de8-723b9c66c4aa","width":807,"height":454,"size":173760,"type":"png","color":"45463e","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЭто крыски :) Обычные ничем не примечательные. И вот этих крыс так много расплодилось, что человек принимает решение отравить этих крыс. Всех ли крыс удастся отравить? Нет конечно:)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСильные особи выживут и возродят новую популяцию. Если принять во внимание что крысы, как и человек Божественные создания, то понятно почему популяция постоянно возрождается.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"d3112f07-d7e1-539f-a2ec-6f52a4dad9a1","width":318,"height":158,"size":16365,"type":"png","color":"e5e9ee","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА что делать с теми животными, которых больше с нами нет? Как можно их объяснить? ( вопрос вам на подумать)\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"А как же с мыслями?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНапример, я студент и стремлюсь получить диплом ради диплома.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Буду ли я счастлив после получения материального, которое рано или поздно превратится в негодность? — Временно да, потом нет\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Буду ли я удовлетворён, когда получу диплом? — Временно да, а потом нет\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) … (дальше прошу читателя помыслить самим)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА что если у меня другое намерение. Я стремлюсь получить диплом ради ЗНАНИЙ.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Буду ли я счастлив, когда получаю знания? — Однозначно да, они мне пригодятся в жизни\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Буду ли я счастлив, если стану их использовать для блага мира и людей? — Однозначно да. Значит я сам для себя востребованный и это даёт мне стимул получать новые знания. Я любознательный, помните? :)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) … (дальше прошу читателя помыслить самим)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИтого по разделу выводы:\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Если мы делаем ради получения диплома, ради получения должности, ради покупки новой модели телефона — это значит мы не живём\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Если мы делаем для вечности, для собственного наполнения — мы живём, всякий раз возрождаясь.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ первом случае мы вечно страдаем и хотим умереть, во втором — всегда живём и радуемся жизни :)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E#человек #психология \u003C/p\u003E"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":0,"reposts":0,"views":40,"hits":88,"reads":null,"online":0},"dateFavorite":0,"hitsCount":88,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/id1377277/560592-pogovorim-pro-cheloveka","author":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1766057581,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1766057581,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"reactions":{"counters":[{"id":1,"count":1}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":559814,"customUri":null,"subsiteId":1377277,"title":"Почему технологическим предпринимателем быть не модно?","date":1670823013,"dateModified":1670823013,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПривет, vc! Это моя первая публикация на этом ресурсе и вот недавно созрел один существенный повод поразмышлять над проблемой предпринимательства в России.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСразу оговорюсь, материал будет не про программирование, а про нас с вами, а если быть ещё более точным про проблемы среды, в которой мы сейчас находимся.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ начале декабря посчастливилось принять участие в конференции г. Екатеринбург в Ельцин-Центре. Формат конференции не похож на привычный сценарий: когда мы заходим в аудиторию, слушаем экспертов, задаём вопросы после выступления.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ отличии от привычного сценария эта конференция носит формат Организационно-Деятельностной Игры (ОДИ). Автором и разработчиком ее является заслуженный советский и российский философ, методолог, культурный деятель Георгий Петрович Щедровицкий. О его деятельности можно узнать по материалам \u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fru.wikipedia.org%2Fwiki%2F%25D0%25A9%25D0%25B5%25D0%25B4%25D1%2580%25D0%25BE%25D0%25B2%25D0%25B8%25D1%2586%25D0%25BA%25D0%25B8%25D0%25B9%2C_%25D0%2593%25D0%25B5%25D0%25BE%25D1%2580%25D0%25B3%25D0%25B8%25D0%25B9_%25D0%259F%25D0%25B5%25D1%2582%25D1%2580%25D0%25BE%25D0%25B2%25D0%25B8%25D1%2587&postId=559814\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003EВикипедии\u003C/a\u003E. После его смерти (в 1994 году) появилось много сподвижников. Они обращали и обращают по сей день внимание общественности на проблемы, существующие в разных экономических отраслях, буквально сталкивая их мнения лбами. Таким образом в процессе обсуждения появляются варианты решения сложных и важных задач.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"b452cce7-2e4b-5242-892e-9b6588009ec1","width":3574,"height":2082,"size":653626,"type":"jpg","color":"786c68","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНе трудно догадаться, для людей — участников конференции предложенные варианты решения могут послужить своеобразным профессиональным лифтом. Только представьте ситуацию, когда одномоментно обычный разработчик может стать руководителем структурного подразделения и принести существенный вклад в развитие компании, государственных механизмов, жизни людей и так далее.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСо временем практика проведения подобных игр распространилось и стала традиционной по крайней мере в моём городе — Екатеринбурге.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ этом году темой выбран тезис, который неоднократно высказывал президент Российской Федерации Путин В. В. «о решении вопроса обретения технологического суверенитета Российской Федерации».\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЗадача очень сложная. Усложняется она и тем, что Российская Федерация испытывает существенный дефицит в квалифицированных кадрах и технологиях, не говоря уже о санкциях, наложенных на Россию со стороны западных стран.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ результате организаторы игры предложили участникам разделиться на 8 групп:\u003C/p\u003E"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["\u003Cp\u003EКорпорации\u003C/p\u003E","\u003Cp\u003EПредприниматели\u003C/p\u003E","Органы власти","\u003Cp\u003EИдеологи\u003C/p\u003E","Экономисты","Разработчики","Пользователи","Методологи"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНо не каждая группа дошла до финального завершения (а игра длилась 7 дней) . Таким образом:\u003C/p\u003E"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["\u003Cp\u003EНЕ сформировалась группа Пользователи;\u003C/p\u003E","\u003Cp\u003EЭкономисты и Органы власти объединились в одну группу под общим названием “Экономика и право”.\u003C/p\u003E","В группе “Предприниматели” присутствовал всего лишь один человек.","\u003Cp\u003EЧуть больше людей в группе “Методология”\u003C/p\u003E","Ещё больше “Экономика и право”.","\u003Cp\u003EМаксимальное количество игроков набрали группы: Корпорации, Разработчики и Идеологи.\u003C/p\u003E"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНа мой взгляд полученное распределение отражает реальную ситуацию, в которой на данный момент находится Россия: всем интересно идти в корпорации, в разработку, органы власти, НО практически никто не хочет быть предпринимателем и никто не хочет брать ответственность за пользователя. Мой выбор пал на предпринимательство.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"ДЕНЬ первый. самоопределение участников И ГРУПП. готовы ЛИ МЫ принять участие В судьбе страны?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПробуем разобраться в роли предпринимателя в России. Для этого наша команда подготовила небольшую презентацию. Ниже представлю схематично её содержание.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"7daf8bbd-2795-5958-b48d-64dc76dbdbbe","width":702,"height":616,"size":33645,"type":"png","color":"dbdbdb","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПредставленная схема описывает предпринимателя в качестве производной, полученной в результате взаимодействия окружения, общества, государства и корпораций.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"f5024764-c024-598a-b5b7-3da013032b52","width":506,"height":426,"size":10444,"type":"png","color":"dbdbdb","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EУслуга или продукт предпринимателя возникает от его тесного сотрудничества с корпорациями и государством в обществе и среде.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНо на деле не понятно, насколько работает последняя схема и также не понятен смысл деятельности предпринимателя, если государство и корпорации могут обойтись и без него, как например, во времена Советского Союза.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИз этого следует вывод, что в первый день задача самоопределения позиции технологического предпринимателя в обществе решена не была.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"ДЕНЬ второй. анализ ситуации В профессиональной СФЕРЕ деятельности. причины технологического отставания россии."}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПоскольку в первый день нашего самоопределения не произошло, команде пришлось решать во второй день задачу первого дня (самоопределение предпринимательства) и второго (анализа ситуации) . На второй день было сделано предположение.\u003C/p\u003E"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВозможно технологический предприниматель может выступать лицом, которое налаживает связи между другими группами.\u003C/p\u003E","subline1":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЕсли на игре гипотеза подтверждается, следовательно вероятнее всего в реальной жизни может быть точно также. Таким образом появляется другая схема.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"7b5ee285-4942-54ce-b3c7-ab537e27a669","width":989,"height":900,"size":22143,"type":"png","color":"e1e1e1","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИдея этой схемы заключается в том, что предприниматель выступает в роли посредника между группами. Тогда для уточнения этой роли определены черты, отличающие предпринимателя от других групп. Среди них:\u003C/p\u003E"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Отслеживание тенденций","Организация выгодного дела\u003Cbr /\u003E","Отслеживание перспектив развития тенденций\u003Cbr /\u003E"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТак значит предприниматель — это не просто посредник, а ещё и внедритель? Ведь что делал Илон Маск? Внедрял технологии. Что делал Стив Джобс? Тоже внедрял технологии.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА существуют ли подобные внедренцы технологий в России, кроме Павла Дурова, который, на секундочку, тоже вынужден покинуть Россию? Возможно они есть, но их настолько маленькое количество, что о них мало кто знает.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"c1b78c35-1316-5140-9e3d-942ade2c4329","width":576,"height":335,"size":32384,"type":"png","color":"c3c3c3","hash":"","external_service":[]}}}]}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВнедрение технологий в промышленное производство не происходит. Иначе мы бы это видели. Следовательно в России количество технологических предпринимателей стремится к нулю.\u003C/p\u003E","subline1":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТаким образом понятно, почему нам сложно было определить роль технологического предпринимателя в обществе. Их настолько мало в нашей стране, что трудно описать его портрет. Итогом второго дня нами проанализирована ситуация, но как такового самоопределения группы не произошло.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"ДЕНЬ третий. проблематизация. ЧТО мешает обрести суверенитет?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКогда начался третий день игры, ведущий дал понять группе, что это самый сложный день. Потому что по замыслу организаторов, нам следовало: (1) определить роль предпринимателя, (2) проанализировать ситуацию в профессиональной сфере деятельности и (3) определить проблемы, с которой сталкивается предприниматель в процессе своей деятельности.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВторую задачу мы более-менее выполнили. Но проблема самоопределения не решена. В добавок мы определили, что в России технологическое предпринимательство плохо развивается. Вроде кажись государством выделяются колоссальные денежные средства, а результата видимого нет.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EС этим багажом мы начали третий день, по итогу которого появилась новая схема. В центр рисунка мы поместили идеологическую проблему общества — наличие потребительского отношения. Мы думали, что именно оно является корнем проблемы малого количества предпринимателей в России.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"2bcb2d95-8dc5-5b04-b8f7-53af3841ca58","width":877,"height":740,"size":65556,"type":"png","color":"dbdbdb","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПотребительское отношение порождает отсутствие мотивации у будущего поколения иметь свое дело в сфере производства это приводит к отсутствию проявления технологического предпринимательства и внедрению разработок в промышленное производство. И при этом примечательно, что предложенные факторы являются взаимозаменяемыми. Например в ситуации, когда студент ищет работу. (У меня нет опыта, потому что нет работы. Нет работы, потому что нет опыта)\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДанная схема позволила сформулировать последствия описанных выше факторов. Они получены в результате мозгового штурма:\u003C/p\u003E"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Никого не интересует развитие Российской Федерации","Никто не берёт ответственность за развитие Российской Федерации\u003Cbr /\u003E","Производство технологий в России низкокачественное\u003Cbr /\u003E","Быть предпринимателем не в моде\u003Cbr /\u003E","В России инициатива наказуема\u003Cbr /\u003E","Отсутствие осознанности, что Российская Федерация находится в опасности."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА теперь итоги: нашей группой ключевой проблемой выбрана такая, которую предприниматель решить не в состоянии. Он не может поменять идеологию общества, в которой живёт. Он может лишь подстроиться под идеологию и предложить решение. В этот день мы вероятнее всего были очень близки к решению задачи роли технологического предпринимателя в жизни России, однако задача первого дня всё же не решена.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"ДЕНЬ ЧЕТВЁРТЫЙ. КАК обрести технологический суверенитет?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЧетвертый день игры мы решили повернуться внутрь себя и задать вопрос: “Что мы можем сделать, чтобы обрести суверенитет? ”. И решили сфокусироваться не на то, что происходит вокруг предпринимателя, а что происходит внутри его деятельности.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТаким образом методом мозгового штурма были пересмотрены характеристики предпринимателя в России. Получился следующий список:\u003C/p\u003E"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Инициативность","Нацеленность на результат\u003Cbr /\u003E","Ориентация на разработку и внедрение продукта\u003Cbr /\u003E","Деньги не первостепенны."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВозможно, по последнему пункту, читатель может раскритиковать выводы нашей группы. Но в процессе игры, мы всё-таки нашли стартап, который может быть отнесен к технологическому предпринимательству. Данный стартап называется “Канатаход”, разработанный компанией “Лаборатория будущего”. В беседе с руководителем компании, наша группа поняла, что у них есть готовый продукт “Канатоход”, а внедрить они в производство не получается - не покупают. В лучшем случае предлагают внедрять его незаконными способами. Данный робот проверяет сетевой кабель на предмет повреждений и их устраняет. Казалось разработка есть, даже робот есть, а денег и продаж нет.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"18b76d6c-686e-5dc8-bd57-8a55d8cefe20","width":750,"height":500,"size":93151,"type":"png","color":"91c7f8","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНа основе полученных сведений команда сформулировала выводы:\u003C/p\u003E"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИнновационные продукты не хотят покупать и внедрять в Российской Федерации. \u003C/p\u003E\u003Cp\u003EПричиной может являться плохой продукт, либо плохая бизнес-модель.\u003C/p\u003E\u003Cp\u003EВ этой ситуации возможным вариантом решения может быть изменение бизнес-модели либо улучшение качества продукт\u003C/p\u003E","subline1":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВыводом по четвертому дню служило выявление роли предпринимателя в России, его проблемы и боли в процессе осуществления предпринимательской деятельности. А также решение, которое для нас, участников игры, было не очевидно.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"2ba5a5be-181f-5aae-9885-b6a66b033061","width":1560,"height":1170,"size":614856,"type":"png","color":"6f5e54","hash":"","external_service":[]}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"ДЕНЬ ПЯТЫЙ. ПОДВЕДЕНИЕ ИТОГОВ, САМООПРЕДЕЛЕНИЕ УЧАСТНИКОВ."}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПоследний день игры был посвящён рефлексии участников. Мы анализировали свою роль в игре. Примечательно, что группой “Предприниматели” было подмечено, что проблема достижения технологического суверенитета может также быть низкий уровень качества образования в Российской Федерации. Следует отметить, что группы “Наука и образование” на игре вообще не была представлена. Об этом мной было сказано в заключительном докладе. Рекомендую его к просмотру. Заранее прошу прощения за низкое качество записи.\u003C/p\u003E"}},{"type":"video","cover":false,"hidden":false,"anchor":"","data":{"title":"","video":{"type":"video","data":{"thumbnail":{"type":"image","data":{"uuid":"18492d12-e3f7-50a2-aba7-3e9a3876b428","width":1280,"height":720,"size":102256,"type":"jpg","color":"ecf2f1","hash":"","external_service":[]}},"width":800,"height":450,"time":0,"external_service":{"name":"youtube","id":"T-piWhH1zwo"}}}}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"ИТОГИ ИГРЫ"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EМне, как участнику конференции, очень понравился вариант решения сложной проблемы через организацию подобных мероприятий. Они помогают найти общий знаменатель, с помощью которого можно прийти к решению проблемы. Кстати, презентации других групп можно посмотреть на официальном \u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=http%3A%2F%2Fnavigo.su%2Findex.php%3Foption%3Dcom_content%26task%3Dview%26id%3D801&postId=559814\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Eсайте\u003C/a\u003E игры.\u003C/p\u003E"}},{"type":"quiz","cover":false,"hidden":false,"anchor":"","data":{"uid":"","hash":"154edc91c3cfcd00","tmp_hash":"","title":"А у вас был опыт участия в организационно-деятельностных играх?","items":{"a16708227550":"Да","a16708227551":"Нет"},"is_public":false,"date_created":0}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":1,"reposts":0,"views":35,"hits":262,"reads":null,"online":0},"dateFavorite":0,"hitsCount":262,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/id1377277/559814-pochemu-tehnologicheskim-predprinimatelem-byt-ne-modno","author":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1766057581,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1766057581,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"reactions":{"counters":[{"id":1,"count":1}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}}],"cursor":"PuR2GsZKFTvhhG9UDIbj7NrVS6IzQAa09I6wtbz/zlbeaPDONLWpx0VZ4WpFlm4=","isAnonymized":true}};