Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Популярность Питона

Автор Devorator linguarum, сентября 27, 2020, 20:03

0 Пользователи и 1 гость просматривают эту тему.

Rachtyrgin

Чуть выше я упомянул Scratch. Вот фреймворк, который хорошо подходит для школы. И базовые концепции позволяет освоить, и быстро игрушку написать, хотя бы и простенькую. Светлана, не попробовать ли Вам с внуком? Быстрая визуализация для детей - самое то. В плюсах с визуализацией проблема - нужно осваивать QT или что-то в этом роде. Это, все-таки в первую очередь язык системного программирования.
Всякому остановленному фашисту для захвата его в плен можешь еще крикнуть:
«Хэндэ хох!» (Руки вверх!)
«Вафи хинлеги!» (Бросай оружие!)
«Абгезэсен!» (Слезай! — С машины, с лошади, с повозки.)
Если фашист не сразу исполняет твое приказание, крикни грознее и добавь:
«Бай флухтфэрзух вирт гэшози!» (Побежишь — буду стрелять!)
А. Афанасьев. В помощь партизану. Москва, 1942 г.

_Swetlana

Цитата: Rachtyrgin от сентября 28, 2020, 22:57
Чуть выше я упомянул Scratch. Вот фреймворк, который хорошо подходит для школы. И базовые концепции позволяет освоить, и быстро игрушку написать, хотя бы и простенькую. Светлана, не попробовать ли Вам с внуком? Быстрая визуализация для детей - самое то. В плюсах с визуализацией проблема - нужно осваивать QT или что-то в этом роде. Это, все-таки в первую очередь язык системного программирования.
Так я поэтому и выбрала Питон - там есть модуль с черепашьей графикой.
С помощью этого модуля первую игру написали: по полю рандомно перемещается круг (мишень).
Каждый раз появляется на новом месте. Нужно в него попасть, вернее, угадать координаты точки внутри круга.
🐇

Rachtyrgin

Боюсь, что на черепашьей графике Вы далеко не уедете, и интерес внука рассеется. Почитайте о скретче вот здесь: https://habr.com/ru/post/234823/
В статье отец очень интересно рассказывает о том, как он обучал 7-летнего сына программированию.
Всякому остановленному фашисту для захвата его в плен можешь еще крикнуть:
«Хэндэ хох!» (Руки вверх!)
«Вафи хинлеги!» (Бросай оружие!)
«Абгезэсен!» (Слезай! — С машины, с лошади, с повозки.)
Если фашист не сразу исполняет твое приказание, крикни грознее и добавь:
«Бай флухтфэрзух вирт гэшози!» (Побежишь — буду стрелять!)
А. Афанасьев. В помощь партизану. Москва, 1942 г.

_Swetlana

Цитата: Rachtyrgin от сентября 28, 2020, 23:07
Боюсь, что на черепашьей графике Вы далеко не уедете, и интерес внука рассеется. Почитайте о скретче вот здесь: https://habr.com/ru/post/234823/
В статье отец очень интересно рассказывает о том, как он обучал 7-летнего сына программированию.
Спасибо, посмотрю  :)
🐇

From_Odessa

Цитата: Rachtyrgin от сентября 28, 2020, 22:17
Могу предположить, что речь идет о Scratch. Его символом является кот)
Спасибо за наводку! Scratch не подходит, он только в 2007-м появился. Но теперь я думаю, что это была KTurtle, которую называли "черепашкой". Как минимум, это вероятно.

Jumis

Жуть этот скрэтч. Хотя будущий 7-классник и побаловался им недели 2 на код-классе...


Цитата: Rachtyrgin от сентября 27, 2020, 20:40
Соответственно, достаточно низкий порог вхождения.

Он еще и мощненький до бесконечности. Хочешь — черепашкой по экрану ползай. Можешь — чеши им массивы в data science...

Т.е. на строгой типизации паскаля дальше дельфей не выедешь (на развитие возможностей которых все подзабили). Читайте — "зря учили". Что не скажешь о питоне.
Ужасный чудными делами
Дзержинец мира искони
Он нашими решил судьбами
Себя прославить в эти дни

_Swetlana

Дельфи я учила не зря  :)
В Дельфях сделала свой недавний диплом магистра. Бесхитростно, без какой-либо графики, запрограммировала свой алгоритм.
Вводим неориентированный взвешенный (положительные веса вершин) и нагруженный (положительные веса рёбер) граф, веса вводится по двум измерениям: "длины" и "стоимости". Вводим ограничение на стоимость пути. Результат: в каких точках графа находятся абсолютные центры с ограничение на стоимость пути до любого клиента (клиенты находятся в вершинах).

ЗЫ. Никогда ни с какой графикой не работала, баловство это.
Теперь ради внука осваиваю графику на Питоне  ;D
🐇

Karakurt

О, я тоже делал задачу коммивояжера. На вижуалбейсике.

_Swetlana

Цитата: Karakurt от сентября 29, 2020, 19:25
О, я тоже делал задачу коммивояжера. На вижуалбейсике.
А каким алгоритмом?
🐇

Karakurt

Не помню, нашел что-то где-то. Это было году так в 2000 или чуть раньше.

Karakurt

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

_Swetlana

Цитата: Karakurt от сентября 29, 2020, 22:01
Сейчас понял, что у меня был вроде бы только один параметр, а не два, как у вас.
У меня не коммивояжер)) Но коммивояжера я активно толкаю в ширнармассы студентов-второкурсников. Поэтому и спросила про алгоритм.
Коммивояжер - поиск минимального гамильтонова цикла хоть на неор. графе, хоть на орграфе. Без разницы какой граф.
В модельной задаче граф полный, рёбрам приписаны целые положительные веса, нужно найти цикл минимальной стоимости, проходящий через каждую вершину ровно один раз.
Почему коммивояжер - наше всё?  ;D
Это классическая NP-трудная в сильном смысле задача, точным алгоритмом она решается только за экспоненциальное время (для полного графа - даже за факториал).
Если вы решали точным алгоритмом, то число вершин было не больше 20.
На коммивояжере проверяют эвристические алгоритмы, насколько они хорошо работают.
В Германии есть специальный сайт, где это можно сделать - есть тестовые примеры для коммивояжера большой размерности с известным точным решением, можно оценить погрешность полученного решения.

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

Python

Касательно питона как первого языка. Всем он хорош, только вот некоторые базовые вещи делаются слегка костыльно. Возьмем, к примеру, двумерные массивы, которые обычно реализуются как списки списков. Получить простой список, забитый нулями, просто:
a=[0]*10
А теперь попробуем провернуть то же самое с двумя измерениями:
a=[[0]*10]*10
Фейл! Да, внешне полученное изделие будет выглядет так, как нам хотелось, но как только мы присвоим новое значение какому-либо его элементу, то внезапно обнаружим это же значение в целом столбике. А все из-за того, что внешний список в каждом элементе содержит ссылку на один и тот же внутренний. Поэтому надо делать так:
a=[[0]*10 for i in range(10)]
Либо делать цикл с присвоением нового списка каждому элементу внешнего — примерно то же самое, но больше писать.
Ну или еще можно разные извращенные способы придумать, напр.:
a=eval(repr([[0]*10]*10))
Или использовать вместо списка словарь с индексами-кортежами:
a={}
for i in range(10):
    for j in range(10):
        a[i,j]=0



Или, раз уж речь зашла об извращениях, является ли плюсом для новичка отсутствие в языке такой бесполезной вещи, как goto? Разумеется, сейчас начнутся крики «зачем учить детей плохому», «я в школе учил gw-basic и на всю жизнь остался инвалидом», и т.д. — всем известно, что даже если это слово в языке есть, пользоваться им крайне нежелательно. Но: как проще всего объяснить новичку, как работает цикл while? Сишник или паскалист мог бы показать примерно такой код:
l: if(условие)
    {
    тело цикла
    goto l;
    }

и объяснить, что цикл while делает точно то же самое. Без недоговорок, что такое «пока выполняется условие» — в гоутушном примере отчетливо видно, когда именно условие проверяется, и почему временное невыполнение условия в теле цикла не приведет к его завершению, например:
i=10
while i>0:
    i=-10
    print('i =', i)
    i=10

С тем же goto проще объяснить, что такое break, continue, ветка else в питоновских циклах, и т.п.

Да, владение столь универсальным средством позволяет писать безобразный макаронный код. (Строго говоря, для программистов на древнем BASIC'е проблемой было не наличие goto, а отсутствие while и прилагающихся к нему дополнительных удобств типа break — использование ТОЛЬКО goto способствовало макаронности кода; а еще блок-схемы, которые сами по себе неструктурированы, можно легко и просто превратить в такой же неструктурированный код произвольной запутанности). Ну а с другой стороны, распутывание такого кода с превращением его в красивые структурированные циклы было бы неплохим упражнением для учащихся писать программы. В конце-концов, писать плохой запутанный код можно множеством средств — необязательно даже использовать переходы для этого. Возможно, следовало бы пару раз оказаться в ситуации, когда сам не можешь разобрать свой запутанный код, чтобы понять, как программировать не следует.
Или, например, есть узконишевые языки, где инструкция перехода является основным средством построения алгоритмических конструкций — ассемблерный jmp является тем же goto, и нужно понимать, как им пользоваться, чтобы код даже на таком специфичном языке сохранял некое подобие структурности.

Ради объективности: python'овский код с goto писать все же возможно — для чего понадобится установить дополнительный пакет (этот или этот). Но это лишь самодельный любительский протез, а не стандартное средство языка.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

SWR


rounin

2Python
Зачем такие сложности?
np.zeros(10, 10)

А насчёт goto - за всё время программирования на Дельфях мне он
понадобился только при переводе фортрановского кода на паскаль.
Поскольку понять логику кода с многочисленными goto - безнадёжное дело.

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

Easyskanker

Цитата: _Swetlana от сентября 29, 2020, 19:22
Дельфи я учила не зря  :)
В Дельфях сделала свой недавний диплом магистра. Бесхитростно, без какой-либо графики, запрограммировала свой алгоритм.
Вводим неориентированный взвешенный (положительные веса вершин) и нагруженный (положительные веса рёбер) граф, веса вводится по двум измерениям: "длины" и "стоимости". Вводим ограничение на стоимость пути. Результат: в каких точках графа находятся абсолютные центры с ограничение на стоимость пути до любого клиента (клиенты находятся в вершинах).

ЗЫ. Никогда ни с какой графикой не работала, баловство это.
Теперь ради внука осваиваю графику на Питоне  ;D
С Дельфи забавно вышло. В России и Казахстане в нулевых программистов натаскивали на Дельфи, и время, когда язык окончательно вымер, совпало со временем гигантского наследия от этих программистов. Я работаю с двумя наиболее актуальными в России и Казахстане системами для служб такси, уточню - конкурирующих с Яндексом служб такси, и обе системы написаны на Дельфи. Как и почти все другие аналогичные на постсоветском пространстве.

Easyskanker

Цитата: Python от сентября 29, 2020, 23:51
Ради объективности: python'овский код с goto писать все же возможно — для чего понадобится установить дополнительный пакет (этот или этот). Но это лишь самодельный любительский протез, а не стандартное средство языка.
Для любителей Линукса вся прелесть как раз в васяно-пакетах, разве нет?

Easyskanker

Цитата: rounin от сентября 30, 2020, 11:36
2Python
Зачем такие сложности?
np.zeros(10, 10)

А насчёт goto - за всё время программирования на Дельфях мне он
понадобился только при переводе фортрановского кода на паскаль.
Поскольку понять логику кода с многочисленными goto - безнадёжное дело.

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

Python

Цитата: rounin от сентября 30, 2020, 11:36
Зачем такие сложности?
np.zeros(10, 10)
Нумпай — как бы питоновский пакет (тоже дополнительно устанавливаемый, но, тем не менее, весьма востребованный), но это не то, с чего начинают обучать новичков. Ну, научится он делать разные встроенные полезности с матрицами (что, безусловно, тоже хорошее дело), но в той части, где новичка обучают алгоритмам, нумпай стоит встороне — он заточен под совершенно другие парадигмы и совершенно другие типы данных, имеющие с искоробочными средствами слишком мало общего. Новичок сначала должен освоиться со встроенными средствами языка, а потом уже, на следующем уровне, учить этот «язык в языке». Да, в теории, можно сразу стартовать с numpy, а все эти списки, кортежи и словари забросить — но тогда не логичнее ли сразу брать массиво-ориентированный язык типа APL, если вместо собственно python'а нам все равно нужна лишь надстройка над ним?
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

_Swetlana

Да, ув. коллеги, разъясните мне, наконец:
В стандартном Питоне нет обычных двумерных массивов? Только в каких-то дополнительных пакетах?
🐇

_Swetlana

Цитата: Easyskanker от сентября 30, 2020, 14:25
С Дельфи забавно вышло. В России и Казахстане в нулевых программистов натаскивали на Дельфи, и время, когда язык окончательно вымер, совпало со временем гигантского наследия от этих программистов. Я работаю с двумя наиболее актуальными в России и Казахстане системами для служб такси, уточню - конкурирующих с Яндексом служб такси, и обе системы написаны на Дельфи. Как и почти все другие аналогичные на постсоветском пространстве.
Один раз ко мне обратились из службы какого-то местного такси.
Не систему написать за деньги, конечно, а чтобы бесплатно "проконсультировала" по поводу алгоритмов. Математик не программист, его работа ничего не стоит.
Ну мне стало интересно, стала выяснять чего они хотят.
И тут выяснилось, что они хотят, чтобы одна машина подбирала клиентов с нескольких вызывов. То есть ты вызвал такси, а они не торопятся, им ещё в два места надо заехать, там клиентов подобрать, а потом только к тебе. Как только я услышала, как они меня обслуживать собрались, я их так шуганула, что больше они ко мне не обращались.
🐇

Python

Цитата: Easyskanker от сентября 30, 2020, 14:43
Я привык везде фигачить goto на ассемблере, и не сразу въехал, почему одногруппники смеются над моими goto в ТурбоПаскале. Каждый год приходилось переучиваться до основанья, и думали, что так будет всегда. Сейчас вроде эта буря стихла?
В  каком смысле стихла? Ассемблером никто почти не пользуется (впрочем, сейчас еще стали актуальными микроконтроллеры — там это может быть востребовано), зато есть безгоутушные языки типа Python или Java, где переход на метку невозможен технически. Другое дело, паника вокруг goto была актуальна в процедурно-ориентированные времена, когда нормальная программа могла содержать большой сложно организованный алгоритм, который следовало сделать максимально пригодным для чтения — следовательно, хорошо структурированным. С 90-х в моду вошло ООП — для него характерны классы с кучей маленьких функций (где с goto особо не развернешься), а запутывать логику кода стало возможно другими средствами (обработчики исключений, параллельные потоки, сложная иерархия классов с переопределением методов...). В 2010-е популярность приобретает функциональное программирование, элементы его начинают использоваться во всех уважающих себя языках — опять же, там еще более своеобразная методика написания кода, где само понятие перехода неприменимо. Или упомянутый выше numpy и языки для работы с массивами — в принципе, это тоже можно отнести к ФП, где программист оперирует не алгоритмическими примитивами, а цельными функциями для сложных действий с данными.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

rounin

Цитата: _Swetlana от сентября 30, 2020, 15:31
Да, ув. коллеги, разъясните мне, наконец:
В стандартном Питоне нет обычных двумерных массивов? Только в каких-то дополнительных пакетах?

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

А массивы - они как бы не являются краеугольным камнем языка, в отличие от Дельфи или плюсов.
Есть какой-то модуль array, в котором есть класс array. Я лично ни разу им не пользовался.

Все, кому нужны массивы - обычно пользуются NumPy.

Python

Цитата: _Swetlana от сентября 30, 2020, 15:31
Да, ув. коллеги, разъясните мне, наконец:
В стандартном Питоне нет обычных двумерных массивов? Только в каких-то дополнительных пакетах?
Как отдельной сущности — нет. Но элементом одномерного списка может быть список, и т.д. — таким образом, можно организовать какую-угодно мерность. Если взять для сравнения язык Java, там многомерность организована похожим образом (т.е., многомерный массив задается как массив массивов, и тип массивов тоже является ссылочным), но при этом есть и встроенные средства для многуровневой инициализации таких массивов:
int[][] a = new int[10][10];

Дополнительные пакеты, как numpy — слишком мощное средство для такой мелочи, и рассчитано на несколько другой круг задач. Да, можно установить его и пользоваться его многомерными массивами вместо встроенных средств, но это примерно как учиться автовождению, вместо легковушки сев за руль танка.

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

def dim(n, *args, v=0):
    if args:
        return [dim(*args, v=v) for i in range(n)]
    return [v]*n

a=dim(10,10)
Непонятно, почему никто не додумался сделать такую функцию встроенной — видимо, решили, что можно обойтись и генераторами списков.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Python

Цитата: rounin от сентября 30, 2020, 16:14
Есть какой-то модуль array, в котором есть класс array. Я лично ни разу им не пользовался.
Посмотрел. Похоже, это тоже не имеет отношения к многомерности — array предназначен для массивов однотипных элементов примитивных типов, что может быть полезно для оптимизации памяти или для обмена данными с кодом на Си.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр