Тёмный

Практика программирования на Python 3, лекция №4 

Тимофей Хирьянов
Подписаться 354 тыс.
Просмотров 103 тыс.
50% 1

Практика: cs.mipt.ru/python
Telegram-группа: t.me/tkhiriano...
Программа курса: github.com/tkh...
Спонсировать: / tkhirianov или www.paypal.me/... или 63900240 9020000598 (карта СБ).

Опубликовано:

 

29 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 128   
@NeoSkywalker8081
@NeoSkywalker8081 5 лет назад
0:00 Вводные слова, в основном для студентов. 1:00 Начало. Про структурное программирование. Немножко истории. 2:20 Теория о структурном программировании. Суть, по пунктам. 4:08 1. Структурное программирование - это... 5:55 Фишка в том, чего нет в структурном программировании. (о GOTO) 9:45 2. Про повторяющийся код - в функции (10:50 о минусе этого пункта (о программировании снизу-вверх)) 11:40 3. Программируй "сверху-вниз". (главная парадигма) 12:25 Лирика. О системах управления контентом/версиями 14:30 Пример про подход к программированию программы. (итеративный подход) 22:00 Лирика про ошибку в какой-то строке. ($ git blame *.py) 23:00 Возвращаемся к программированию сверху-вниз. Декомпозиция задачи на примере строительства дома. 26:13 Про делегирование. (полномочий и ответственности) 30:50 Про Интерфейс взаимодействия/вызова. Про договоренности/контракт. (Документация) 34:00 Продолжаем про подход сверху вниз. Про pass и документацию. 46:00 Про функцию main в подходе сверху вниз. 48:50 Возвращаемся к рисунку про "мошенника" и что нужно сделать, чтобы он перестал им быть. 54:10 Стираем pass и пишем код. 1:00:25 Нельзя коммитить программу... 1:00:57 Про отладочную печать 1:02:45 Немного практики программирования сверху-вниз "в живую". 1:05:25 Про выбор "опорной точки", о спорах и удобности интерфейса. 1:12:40 О важности запустить программу перед commit'ом. 1:13:15 Резюме о структурном программировании.
@turkmenprofessor4125
@turkmenprofessor4125 4 года назад
Спасибо!
@firespirit2405
@firespirit2405 5 лет назад
Учитель которого всегда интересно слушать! Всем таких советую
@amrklp
@amrklp 5 лет назад
Студенты на лекциях убывают, зрители из интернета прибывают.
@ZZZ5204
@ZZZ5204 4 года назад
Вестимо, часть студентов предпочитает ютуб;)
@aamv4319
@aamv4319 5 лет назад
Спасибо Вам большое, очень интересно и доступно подан материал, хотел глянуть минут на 10, пропал на час.
@АнонАнонов-ы6о
@АнонАнонов-ы6о 5 лет назад
Ага, затягивает.
@egorla89
@egorla89 4 года назад
Спасибо вам, прекрасные лекции
@moj-psevdonim
@moj-psevdonim 4 года назад
Супер лекция )
@ZZZ5204
@ZZZ5204 4 года назад
Да, научиться бы мне хорошо делать декомпозицию и делегирование. Какие книги почитать для этого можно? Здоровская лекция, в прочем, как и всегда.
@Jaguarrre
@Jaguarrre 4 года назад
Лайк заочно!!!
@ИванДернов
@ИванДернов 2 года назад
Избавлю вас от обременения почитать про РЕР8. Достаточно просто нажать cnrl+alt+L - всё расставляет на свои места
@toomanof
@toomanof 5 лет назад
Еще одни программист который начинал изучение с ZX Spectrum-a )
@Marvin_Corvin
@Marvin_Corvin 2 года назад
Первые 2 главы книги Бытие, описаны как комментарии к программе, обратите внимание пожалуйста.
@MrJASONFLO
@MrJASONFLO 3 года назад
Как попадать к вам на лекции при этом не быть студентом ?=)))))
@WarMusic2022
@WarMusic2022 4 года назад
Да что же это такое, всё время хватает времени закончить лекцию.
@bassboosted1184
@bassboosted1184 5 лет назад
12:36 разве не система управления версиями (git и его аналоги)?
@MsKarlason
@MsKarlason 5 лет назад
произошла опечатка
@madlena2005
@madlena2005 5 лет назад
В университете надо вставать? У нас в колледже Цюриха препод просто "Привет " говорит. Удивило, что он нам дал эмейл и мобильный рабочий номер. Если непонятки, то можно всегда спросить на неделе или назначить встречу.
@leavemehere9702
@leavemehere9702 5 лет назад
Это обычное уважение. Преподаватель перед студентами стоит 1,5 часа, почему бы и студентам не встать на пару секунд?
@isamiwind438
@isamiwind438 5 лет назад
как поступили?
@olegmakarikhin
@olegmakarikhin 4 года назад
Такая традиция приветствия в наших ВУЗах. Кроме того у такого приветствия есть роль переключения внимания, сложно не заметить что вокруг тебя студенты повставали, а значит начась лекция
@ZZZ5204
@ZZZ5204 4 года назад
Я перед просмотром каждой лекции встаю. Это не шутка. Это помогает мне лучше погружаться, как будто на лекции в реальной жизни
@Andrei-de6mf
@Andrei-de6mf 3 года назад
лабы в ссылке под видео)
@freelife1000
@freelife1000 4 года назад
59
@mikepro8371
@mikepro8371 4 года назад
Система управления контентом, наверное здесь не при чем
@lumpenscl
@lumpenscl 4 года назад
Система управления версиями
@paveldumavin5068
@paveldumavin5068 4 года назад
в 2к19 смотрят ))
@DAZouk_NN
@DAZouk_NN 4 года назад
Гениальный преподаватель! А фраза "много званых, но мало избранных" - просто бомба!
@Досужийчеловек
@Досужийчеловек 5 лет назад
О, е-е-е, старый добрый БАСИК (Basic). На 7:15 пишется так: 30 IF a=0 THEN GOTO 50 Я не умничаю, это просто ностальгия. Школьный компьютер «Агат». В то время это было что-то бомбически.
@АндрейГришин-с8ю
@АндрейГришин-с8ю 4 года назад
А вопрос про GOTO был призабавнейший, презобавнейший для этой аудитории! Конечно наверное не все это должны знать.... сейчас хз чего им в школах преподают
@JuggernautWare
@JuggernautWare 4 года назад
И ни одного комментария про "the roof is on the fire"
@akkh6971
@akkh6971 4 года назад
"Давайте делать паузы в словах"-не нудные лекции, а захватывающее шоу! Так учиться-мечта!
@carter366
@carter366 4 года назад
the roof, the roof, the roof is on fire все лекции смотрю как сериал. Спасибо, очень интересно!
@timuriskakov49
@timuriskakov49 4 года назад
Добрый день Тимофей! В первую очередь хотел бы сказать огромное спасибо за Ваш труд, очень классные лекции! Можно Вас попросить также предоставить доступ к Лабораторным работам, с целью закрепления прослушанного материала. После первых лекций были классные задачи с черепашкой, которые позволили намного глубже понять материал. Дальше к сожалению таких же заданий не нашел. Я думаю, если вы сделаете Лабораторные на платной основе, это будет справедливо и полезно для многих. Еще раз спасибо за Ваш труд!!!
@dyler_turden
@dyler_turden 3 года назад
Поддерживаю данную инициативу
@picochups
@picochups Год назад
Пустил слезу, когда про GOTO услышал. Застал ещё то время, когда в школе Бэйсик проходили (поверхностно, но всё же).
@optimusprime9456
@optimusprime9456 5 лет назад
Ура! Есть пиджак!)
@paveldumavin5068
@paveldumavin5068 4 года назад
)))print(пиджак)
@yaroslav5168
@yaroslav5168 4 года назад
@@paveldumavin5068 a=1 while a < 4 : teacher.chto_odet(sviter) a += 1 while ??????: teadcher.chto_odet(pidjak)
@paveldumavin5068
@paveldumavin5068 4 года назад
@@yaroslav5168 это ещё не учил ....s = Nekto s = del(s)
@sergberozkin7522
@sergberozkin7522 5 лет назад
ZX-Spectrum имел, как по мне, самый приятный Бейсик )
@knudrasmussen6181
@knudrasmussen6181 4 года назад
Обратная связь: Как перестать захлёбываться от восторга и ощущения, что ты снова студент, хотя тебе 27 лет :D Очень понятно и интересно. То, что не мог осилить в школе и универе сейчас влёт идет. Хотя образование горного инженера. Которое не пригодилось вообще, хех...
@xarukane
@xarukane 4 года назад
Отлично доносит суть. Очень интересно. Больше бы таких учителей.
@denstiller3606
@denstiller3606 4 года назад
Препод похож на домовёнка Кузеньку )
@wolfich4684
@wolfich4684 5 лет назад
Спасибо за большое количество лекций . Глотаю на ходу
@Oleksiy777
@Oleksiy777 3 года назад
Одного не пойму, как у него в 3мерном пространстве получилось 4 координаты дома. Т.е. если с локейшном, то должно быть 5 переменных - location x,y + 3 для дома (стен, без крыши). Даже если параметры одинаковые по цифре. Или он имел в виду двумерный дом на экране?. Ну и читается не хейт, а хайт, конечно. В дальнейшем пользуемся словами length, width, height. Ну и не lection, а lecture.
@iritaka
@iritaka 4 года назад
Тайм-коды: Структурное Программирование 1:39 одним из первых топил за Парадигму структурное программирование Никлаус Вирт 2:18 суть СП: 4:14 1) программирование - это а) последовательное исполнение б) ветвление в) циклы 5:58 это не GOTO 8:45 продвижение идеи: давайте делать отступы 9:53 2) повторяющийся код -> в функции 11:00 3) программируй "сверху-вниз" (прога сначала создается крупными мазками, а потом уходим в детализацию (решение маленьких подзадач) 12:28 системы управления контентом (системы контроля версий) Git 14:25 рисунок time-line проекта. 1) пустой репозиторий 2) делаем его git-клон 3) initial commit. Файл с прогой отсутствует. Но он Уже (даже пустой) Консистентный (интерпретировабельный) 15:06 итеративный подход 17:21 двигаться итерациями 19:05 промежуточные устойчивые версии 21:44 $ git blame 1.py # это если где-то ошибка 22:46 ваша задача: уметь git pull, git add, git commit, git push 23:01 "сверху-вниз" + Декомпозиция задачи 23:30 пример Постройка дома. (Программа и Подпрограмма) От программы в подпрогр - Параметры, обратно - что-то 26:13 Делегирование подзадачи (полномочий и ответственности) 28:34 источник ошибки 30:47 Интерфейс взаимодействия (вызова) программы и подпрограммы 31:16 Контракт (договоренности) в виде Документации. На этапе проработки интерфейса 34:08 вначале пишется так, как будто подпрограмма уже есть 36:55 Функция-заглушка (функция-мошенник с телом pass) # mock-функция 41:12 в любом коммите 2 этапа: 1) взлёт (творческий) 2) приземление (технический) Документация. writ it down 42:55 документ-строка. Главное человеко-понятность 46:10 сверху всех def main(): 47:03 ниже всех if__name__=="__main__": main() в Питоне нет предобъявления функций 48:57 дорисовываем строительство 1:00:26 нельзя коммитить неконсистентную прогу. Репозиторий ломать нельзя. 1:01:00 отладочная печать (например тупо принтануть чёт) 1:02:47 переход в среду разработки git status git commit -m 1:08:10 windowSize(x,y) чтобы появился холст, на кот. будет все рисоваться. run() 1:12:07 типичная ошибка программиста - закоммитить не синтерпретировав ( не запустив) 1:13:20 СП - упорядочивание программы. Думаем: - а за что отвечает кусок программы - что ему надо дать - что он должен вернуть
@anna-volkova-editor
@anna-volkova-editor 4 года назад
Моим первым (и пока единственным) языком программирования тоже был бейсик. И вот решила Python изучить. Как изменился мир!
@AlexanderTvorogov
@AlexanderTvorogov 4 года назад
11:43 -- в наше время, в середине 70-х, это называлось "программирование сверху-вниз наискосок" 😎 А если серьезно, я бы начинал Python с объектно-ориентированной парадигмы, потому что структурное программирование - это частный случай.
@entropy_7827
@entropy_7827 3 года назад
На прошлой лекции были сравнения с фашизмом, в этой уже сам господь бог. Такие яркие примеры :D
@anatolys9203
@anatolys9203 5 лет назад
Тимофей, ты лучший! Спасибо тебе за твой труд! Очень крутые наглядные и очень понятные объяснения!
@toyas7330
@toyas7330 2 года назад
Что за Лабы? Гетлаб что-ли?. Сыллку можно, я тоже пропускать не буду
@rashid1506
@rashid1506 2 года назад
пришлось переслушать песню Fire Water Burn
@tyyyyuuuuuuuuijjjiio
@tyyyyuuuuuuuuijjjiio 4 года назад
Сколько я отдал своей юности языку Basic >_
@romansergeev
@romansergeev 4 года назад
Если кому-то понадобится домик, который не успели доделать в данном упражнении, то вот код: from graph import * def main(): windowSize(500,600) paint_house(100, 200, 300, 400) x = 100 y = 200 width = 300 height = 400 run() # Запускает холст def paint_walls(x, y, width, height): brushColor("green") rectangle(x, y, width, height) def paint_roof(x, y, width, height): brushColor("gold") points = ((x, height), (width, height), (height, x), (x, height)) polygon(points) def paint_window(x, y, width, height): brushColor("white") rectangle(x, y, width, height) def paint_house (x, y, width, height): paint_walls(x, y, width, height) paint_roof(x, y, width, height//2) w_height = height // 1.6 w_width = width // 2 paint_window(x + w_width, y//2 + w_height, w_width, w_height) main()
@dmytrosoroka7335
@dmytrosoroka7335 4 года назад
from graph import * def main(): windowSize(500, 600) paint_house(100, 200, 300, 400) x = 100 y = 300 width = 300 height = 400 run() def paint_house(x, y, width, height): paint_walls(x, y, width, height//2) paint_roof(x, y, width, height//2) w_height = height//4 w_width = width//2 paint_window(x + w_width//2, y + w_height//2, w_width, w_height) def paint_walls(x, y, width, height): print("Рисую стны", x, y) brushColor("green") rectangle(x, y, x + width, y + height) def paint_roof(x, y, width, height): brushColor("gold") points = ((x, height), (x + width, height), (x + width//2, y - height//1.6), (x, height)) polygon(points) def paint_window(x, y, w_width, w_height): brushColor("white") rectangle(x, y, x + w_width, y + w_height) main()
@kyoki9302
@kyoki9302 5 лет назад
Эх, мне бы такого учителя в вузе
@nickolajn.9961
@nickolajn.9961 4 года назад
Тимофей Федорович, здравствуйте! Смотрю ваши лекции, и там вы говорите про лабораторные. Может быть можно где-то скачать задания для них?
@iokar911
@iokar911 4 года назад
а это не то? cs.mipt.ru/python
@nickolajn.9961
@nickolajn.9961 4 года назад
@@iokar911 вроде, это. Спасибо
@Pchel102
@Pchel102 5 лет назад
57:16
@tooman
@tooman 4 года назад
Сочувствую
@devian2582
@devian2582 3 года назад
Классно рассказал про Структурное программирование
@sainco3036
@sainco3036 5 лет назад
Спасибо.
@andrey7530
@andrey7530 5 лет назад
12:40 не использовал систему управления версиями, попробую :). СПАСИБО!!!
@_pheax
@_pheax 4 года назад
спасибо, Тимофей Фёдорович, всё ясно и декомпозированно
@dharmanam9263
@dharmanam9263 5 лет назад
Щедро. Спасибо!
@ЯнКуратов
@ЯнКуратов 5 лет назад
Я фанат этого чувака, таким разносторонне развитым быть нереально!
@AlexandrSpirit
@AlexandrSpirit 3 года назад
Почему не использовать аннотации? paint_house(x=100, y=100, width=50, height=50) Видно что за элементы и за что отвечают. Ну и конечно использовать docstring,
@wizard286killer5
@wizard286killer5 4 года назад
Помогите пожалуйста, как заставить весь корабль двигаться, я его нарисавал в отдельной функции: def lodka(x,y): penColor("brown") brushColor("brown") rectangle(x, y, x+180, y+50) polygon([(x+180,y),(x+250,y),(x+180,y+50)]) penColor("black") brushColor("white") circle(x+220,y+10,8) penColor("brown") brushColor("brown") arc(x+50,y-50,x-40,y+50,start=180,end=270) дальше x = 50 y = 240 obj = lodka(x,y) onTimer(update, 50) и куча ошибок, как это правильно оформить?
@АндрейС-ь7н
@АндрейС-ь7н 4 года назад
Подскажите плз. создали функцию main() из нее мы запускаем созданную ниже функцию paint_house(...), а из нее запускаем функции paint_wall, paint_roof, paint_window, но эти же функции еще не созданы? Или это сделано только чтобы показать как делается декомпозиция и структура программы?
@andrey7530
@andrey7530 5 лет назад
благородное дело передавать знания
@7deser
@7deser 4 года назад
8:09 бейсик это не низкий уровень. низкий уровень это ассемблер. как раз на спектруме это и показали людям - была задача показать что программировать дома это просто. и далее - не сказал бы что читать код бейсика тяжело. ассемблер читать - надо тренироваться, знать структуру компьютера (в том же спектруме знать что в каких ячейках хранится, какую память можно использовать...) и то, сложностей не много. в свое время сам освоил даже прерывания и мог переделывать загрузчики "защищенных" программ, помню модно еще было что-то делать пока идет загрузка... в то время ни литературы толком ни интернета еще существовало... и повторюсь - для людей впервые столкнувшись с программированием - давать язык слишком рано, наверное потому и стали меньше посещать - чем дальше тем сложнее понять что и зачем. наверстать они уже не успеют... зачем такой аудитории аналогии с бейсиком?! они не поймут ни недостатков ни прелести...
@ruslanchechotkin789
@ruslanchechotkin789 4 года назад
Подскажите пожалуйста, как сделать овалы? Я нашел задание картина 1. Но вот как делать овалы я так и не понял, нашел функцию которая описывает эллипс, но проблема в том что его можно построить по точкам только горизонтально или вертикально. И не понятно как рисовать овалы под углом.. И есть ли в библиотеке graph что-то похожее на библиотеку черепахи, а именно поворот на какое-то количество градусов? Или может кто-то может кинуть примеры выполнения этих заданий?
@barkas2589
@barkas2589 2 года назад
Спасибо
@AnTul_RUS
@AnTul_RUS 3 года назад
Дай Вам Бог здоровья. Настоящий преподаватель. Увлекательно, доходчиво. Рад за Ваших учеников. Надеюсь, они ценят.
@avto-mexanic
@avto-mexanic 3 года назад
Просто шикарно! Тёзка взорвал мозг как ПРАВИЛЬНО подходит к программированию. Особенно конец лекции прекрасен
@АндрейФатуев-ш5й
@АндрейФатуев-ш5й 2 года назад
Когда Basic начали расписывать чуть слезу не проронил
@ДжанглФорраст
@ДжанглФорраст 3 года назад
Этот волшебник называется прораб. А прорабы, как известно, еще те волшебники)
@octanlevitan6703
@octanlevitan6703 2 года назад
Аплодирую в конце лекции в который раз. Какой же тимофей чудесник.
@ДаниилПлотников-т7ж
Можно вопрос, а как лекция может быть прочитана 23.10.2019 если видео выложено 18.10.2019?
@testmybrend7591
@testmybrend7591 5 лет назад
скорее всего месяцем* ошиблись и скорее всего это было за сентябрь
@iskandarihsanov4324
@iskandarihsanov4324 5 лет назад
23.9.19
@eladbv1
@eladbv1 5 лет назад
Это магия )))
@wolfich4684
@wolfich4684 5 лет назад
Просто благодаря питону уже можно многое ... )
@nickkondr5565
@nickkondr5565 5 лет назад
Это сверху вниз.
@gennadykotov1923
@gennadykotov1923 3 года назад
Блеск, спасибо Тимофей Фёдорович. Большое.
@int0matar
@int0matar 5 лет назад
С человечками получился забавный намек на абстракцию
@ENGLISH-vj4hf
@ENGLISH-vj4hf 4 года назад
7:45 тыщ
@maximzolotarev507
@maximzolotarev507 5 лет назад
Спасибо вам за Ваш труд!!!
@stepanfilippov2220
@stepanfilippov2220 4 года назад
Классно наверное, в нашем вузе на пары не приходят преподы а не студенты
@FeeleGood
@FeeleGood 3 года назад
Де домік?)
@MrFog124
@MrFog124 3 года назад
8:18 в чпу станках макропрограммирование такое )))
@Dark_Moon_270
@Dark_Moon_270 3 года назад
Огромное спасибо за ваш труд)
@ilfat_akhmerov
@ilfat_akhmerov 4 года назад
Roof is on fire )))
@ДмитрийЕгорович-н5д
"я лекцию проспал по питону. О чём там было?....ну, э-э-э, про волшебников". Гарри Поттер и так себе дары питона.
@paveldumavin5068
@paveldumavin5068 4 года назад
прикольно
@kepler3991
@kepler3991 4 года назад
Нереально крутой чувак!)
@Warkinstar
@Warkinstar 4 года назад
Круть!!! Продолжайте в том же духе
@MrNikitakis
@MrNikitakis 4 года назад
Подскажите, почему комментарии к функциям не пишутся, как комментарии, а через тройные кавычки?
@ocetua
@ocetua 4 года назад
Это разные вещи. В кавычках пишется документация к функции, классу или модулю и эта документация должна отличаться от комментариев.
@sirozhanfurman7539
@sirozhanfurman7539 4 года назад
Тайрел Уэллик
@mrddt8437
@mrddt8437 4 года назад
Спасибо за Ваш труд ! Подскажите пожалуйста, какие платные Курсы стоит пройти? Боюсь заплатить не малые деньги и в итоге разочароваться. Опыта нет
@dyler_turden
@dyler_turden 3 года назад
Имхо, только Курсера вызывает интерес... И она сотрудничает с МФТИ, кстати
@gennadiymedvedev214
@gennadiymedvedev214 5 лет назад
, спасибо за очередную лекцию !!! , , , храни Вас Бог
@Titanoboagames
@Titanoboagames 5 лет назад
Бога нет
@BlackRasta207
@BlackRasta207 4 года назад
@@Titanoboagames Ахаха, в каждой что ли коммент-секции есть человек, который мгновенно применяет свои сверхценные убеждения к любому нейтральному комменту, хоть как-то затрагивающему хоть какой-нибудь религиозный термин?)) Откуда вы такие вообще берётесь?)
@LavrentiiBelozerov
@LavrentiiBelozerov 5 лет назад
13:20 - В точку, во время работы , постоянно с такой проблемой сталкивался 🙄
@arcsin4083
@arcsin4083 3 года назад
Большое спасибо!
@freelife1000
@freelife1000 4 года назад
56:26 Премьер министр Канады.
@alexandermeshkov4953
@alexandermeshkov4953 4 года назад
Окуджава пел : "Давайте восклицать...", а вы процитировали сплина
@АндрейГришин-с8ю
@АндрейГришин-с8ю 4 года назад
Оказывается это стихи Окуджавы. СПЛИН спел
@akkh6971
@akkh6971 4 года назад
Лучшее!
@ruslanchechotkin789
@ruslanchechotkin789 4 года назад
Можно конечно нарисовать черепахой, и сохранить точки куда-то, а потом по этим точкам нарисовать библиотекой graph, но мне кажется это дичь, должен быть способ проще
@ruslanchechotkin789
@ruslanchechotkin789 4 года назад
Или нарисовать в ряд много окружностей и поиграть с радиусами... Да, наверне так
@ruslanchechotkin789
@ruslanchechotkin789 4 года назад
Думал серией кругов с увеличивающимся и уменьшающемся радиусом, но нет, кружочками не выходит, тогда ободка нет черного на овале, я уже не знаю как еще
@ruslanchechotkin789
@ruslanchechotkin789 4 года назад
Разобрался как наклонить эллипс и посчитать точки, пол дня убил, ох и задачки у вас товарищ))
@ksantippa22
@ksantippa22 5 лет назад
Вопросов нет, пока перевариваем материал. Спасибо за лекции. "За него топил...." это сленг преподов? Или чтобы ближе к тинейджерам быть?
@ridnat1760
@ridnat1760 5 лет назад
"топил" сленг распространён примерно с 2006 года, преподу на вид 30-35 лет, соответственно 13 лет назад ему было 17-22 года, короче не думаю что это для того чтоб быть ближе к тинейджерам LoL
Далее
Это нужно попробовать
00:42
Просмотров 336 тыс.
Моё мнение про Python
11:14
Просмотров 415 тыс.
Алгоритмы на Python 3. Лекция №3
1:14:12