Это копия, сохраненная 26 апреля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>1867362 (OP)
Литература:
https://ln2.sync.com/dl/cf2c1d070#xq4s328t-xbbjys2z-9r6j7ss7-gf4e9dv6 <-- Книжки, новое собрание
Ещё книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Больше книжек: https://yadi.sk/d/H-00n-UG3RSQem
Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить
https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
#######################################
ЧаВо: https://github.com/TheKnightsWhoSayNi/info/wiki/Hat Актуальность примерно 2015 года
Вопросы-ответы:
— А стоит ли читать Лутца, том номер N?
Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х?
Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать?
Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.
МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом?
Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4
— А как учить джангу? Нахожу только книги по джанге 1.х
У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать
Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kivy https://en.wikipedia.org/wiki/Kivy_(framework) https://kivy.readthedocs.io но народ на него жалуется
— Как можно без лишней возни ускорить программу на питоне
1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.
2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём
Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
исходник: https://dumpz.org/bASGKD8cCFDf
Что понимают под автоматизацией систем на пайтоне? Какие задачи решают спомощью неё?
Обновляют значение, чтобы не исчелзло случайно.
Скорее всего раньше оно делало что-то полезное, а потом так заглушили вместо закомментирования.
Откуда ты придумал бегунок, лол.
Это называется генератор. Применение list вытягивает все значения из него и выдает в виде списка.
Визуально никакой разницы. Выдает одинаково. На каком уровне это можно лучше увидеть в примерах
Ну вот тебе пример.
Оборачиваем в ещё один генератор с принтом и всё видно.
https://ideone.com/lpzJ7L
Он не итеративный, правда. Через него можно итерировать, но он не выдает итератор.
Лол, как бы по нему итерировались тогда.
Всё, что реализует протокол итератора - итератор.
n = iter(range(1488))
print(next(n))
Перекатываться во что-то другое не хочется, ибо в принципе повседневно кодить на сабже нравится, модулей на все случаи жизни просто миллионы.
В связи с чем возникла идея дополнительно выучить вью и позиционировать себя как джун фулл стек django, vue.js, postgresql ну и там всякое попутное говно типа докера, очередей итд. Нормальная идея, че думаете?
Ну я имею в виду, что в java операторы больше похожи на функции питона, то есть более громоздкие
Ты что поехавший?
Range это iterable объект, но это не итератор.
Введи вот это:
type(range(1488))
<class 'range'>
>n = iter(range(1488))
А здесь ты как раз создаешь объект-итератор
>>>n = iter(range(1488))
>>>type(n)
<class 'range_iterator'>
Брат, у тебя вышка есть, а у 90% вкатунов нет. Их даже рассматривать не станут, а твое резюме автоматом залетает в нужную стопку. Алсо, фулстек это днище.
Вы нам не подходите.
JSython
Ну, в джанге же есть возможность создавать формы. Да и без джанги есть библиотеки, которые создают фронтенд для веб-приложений на питоне, конечно, под капотом там генерируется html/js/css, но пользователь библиотеки может чисто в питоне все закодить. Кто знает, может, в обозримом будущем webassembly разовьется, и можно будет писать фронтенд действительно на чем угодно, хоть на питоне.
Пытаюсь вырвать текст из программы
На первом пикриле я по hWnd получаю текст из объекта, всё работает отлично
На втором пикриле делаю то же самое, но текст не печатается. Я не прошу подробного ответа, хотя бы скажи, куда гуглить
Что значит осваивать 3.8?
В принципе, можно учить по материалам любой 3+ версии, но лучше 3.6+, дальше уже не особо важно, это несложно подтянуть при желаниии.
Ты вообще делаешь неправильно, эти айдишки будут меняться каждый раз. Надо искать главное окно по тексту, а потом по его чайлд контролам уже.
это я сейчас погуглю, но в итоге всё сведётся к этой функции, как на пикриле, и будет ошибка
Ну хуй знает тогда, посмотри ещё подобные функции, по-моему там несколько штук для разных контролов, т.е. для лейблов и подобного что-то одно, а для эдитбоксов может быть другое.
кинь какой запрос вбить
В другом треде уже прокомментировал.
Судя по вопросу, тебе надо просто осваивать программирование и питон. Иначе бы такого вопроса не было.
Есть какие-то конкретные вещи, которые сильно усовершенствуют в версии N. Если эти конкретные вещи изучать по старой версии, то ты немного лезешь в легаси.
Никто тебе не запрещает как бы.
Батя сказал разрешает
3.8 добвили sharedMemor, вещь весьма полезная если твоя основная кодебаза - чистый питон и ты не интеропишь
>А стоит ли читать Лутца, том номер N?
а стоит ли читать лутца? я вообще полнейшая зелень во всем этом. лутц сможет дать мне уверенное знание синтаксиса для дальнейшего развития в питоне? время и сила воли есть. просто мало ли... вдруг тут уже давно советуют другого автора для начинающих? ведь еще так много разных книжек об одном и том же в закрепе...
>уверенное знание синтаксиса
Чего?
Зачем тебе читать беаную книгу на 400 сраниц дабы знать синтаксис? Я вот за пару вечеров основы подхватил на неделе. Если не уверен в чем-то, вроде return type - в отличие от других языков, кинуть мгновенные print(x) и затетить займет меньше секунды. Питон вообщ оджин из языков которые unironically проще дебажить принтом нежели полноценнымбдебаггером в 80%-90% случавем
Какой смысл шиппить barebones python interpreter в веб-ассембле? Шип соазу нативный, блять, дебил
Почему не С, если там готовая эко-система с Cython есть? нахуй тебе геморный интероп?
And?
https://github.com/ytdl-org/youtube-dl/issues
4k issues, Я ни разу проблем не видал с ним
Твой GO
https://github.com/golang/go/issues
Пиздец, если следовать твоей логике там индия полная
ИМХО Лутц не для тех, кто уже дружит с программированием. Слишком много банальщины и воды, при этом устарел, не современных вещей.
А у кого нет приличного опыта разработки, тому может лучше побольше воды. Лучше отложатся некоторые вещи.
>youtube-dl
>4k issues, Я ни разу проблем не видал с ним
Постоянно с ним проблемы, хотя бы потому, что сервисы регулярно что-то меняют и что-то из-за этого ломается.
Просто к разным проблемам привыкаешь и учишься жить с ними, просто не делать какие-то вещи.
В самом питоне тоже дохрена таких проблем, каких-то багов и недоделок. И на других платформах.
Бля, ну это я для простоты примера, у меня вообще не магазин никакой. В общем есть форма, данные из которой должны попасть в две связанных таблицы, а не в одну.
Двачая адеквату.
Сам вкатился так весной. Крупные компании до сих пор на вышку дрочат, как бы тут не пиздели.
Тут три таблицы по идее надо. Модели, например CliientModel, GoodsModel, OrdersModel
Дальше цепляешь выбранный клиентом товар запросом из GoodsModel
form = ClientForm()
if form.validate_on_submit():
new_client = CliientModel(kwargs - данные о клиенте)
new_order = OrdersModel(client_id=new_client.id, kwargs - данные о заказе + данные из запроса товара)
Тут я на Фласке писал, он мне ближе. Сам переведешь, надеюсь
Данные о заказе должны быть айди, время и статус, которые автоматически заполняются. Не дай б-г ты дашь клиенту такие данные самому вводить.
Никогда не встерчал, обновлял раз в 2 месяца.
Суть в том, что ты дебилойд. Счетчик "issues" на гитхабе не показатель нифига.
Проблемы есть у всех, но твой интероп с ГО удет иметь больше проблем. Плюс, будешь писать колесо ммаршалинга данных, потому как существующие решения, что найдешь, будут атк же полны багов, проблема в том, что что бы для них сдеать воркаранды тебе придется вникать в чужую кодебазу
Да и вообще, в абсолютном смысле, единственное зачем ты будешь юзать интроп или Cython - для реального параллелизма, ибо Pyton ограничен GIL в этом плане, однако с асинком IO у него проблем нет. ВОт и получается, в итоге, что задачи сведутся к минимуму и cython/C будет 100% за глаза - послал ссфлку на память, цифры закрунчил и вернул результат. Все останое будет на Питоне.
Плюс GO - это такой-же managed language c GC. Нахуя тебе такой интероп? Этот как интероп питона и C# или Джавы.
Интероп делается в нативный тогда, когда приоритетом являетмся производительность до байта, до бита, блять, ибо оверхед овердохуя. Одна из причи почему в НЕТ5 большую часть фнукционала экосистемы C# перенесли в IL/C# вместо нативного кода, ибо оверхед
Спасибо, вроде понял, попробую.
потому что принт возвращает None
только вчера узнал, что print(необъявленнаяПеременная) выдаст ошибку
а get(необъявленнаяПеременная) выдаст null
number = list(range(0,3))
while True:
guess = int(input('guess: '))
if guess == number:
print('+.')
break
elif guess < number:
print('-')
else:
print('nope')
exit(0)
У тебя number - это список [0, 1, 2]
А guess - это число.
Что ты ожидаешь получить при сравнении списка и числа на равенство?
Есть класс pydantic.BaseModel с атрибутами:
login:str
password:str
Мне надо выводить через метод dict() вот это. Overload pydantic запрещает почему-то.
{'Login':'my_login', 'Password':'my_password'}
Сам разобрался.
def to_camel(string: str) -> str:
return string.lower()
class Config:
alias_generator = to_camel
allow_population_by_field_name = True
Здравствуйте. Есть ли здесь шарящие за библиотеку telebot. Не могу понять функцию forward_message. Что туда передавать, как, БЛЯДЬ, номер сообщения переселаемого ей писать?
Уважаемые аноны, есть ли хоть один пример простенького бота в телеге с возможностью пересылать сообщения. Желаетльно с комментариями, объясняющими что и как. Все перерыл - не смог найти
bot.forward_message(to_chat_id, from_chat_id, message_id)
id чата откуда берешь сообщение
id чата куда пересылаешь
id сообщения
а ну и номер сообщения надо брать по какому-либо параметру через запрос сообщений из чата: по времени, по id пользователя или по контенты сообщения. Там уж сам реализовываешь как надо.
вот это я вообще не ебу как сделать, мне б самый просто йпример такого бота, я бы запустил и разобрался
Ты долбоеб или где?
Если ты не понимаешь алгоритм процесса, что ты собрался реализовывать?
https://github.com/keselekpermen69/Telegram_Forwarder/blob/master/forwarder/modules/auto_forward.py
Синтаксис учится за 1 час, инструментарий все время, что работаешь с языком.
Я вижу, что они работают вместе, но боюсь что посередине кода будет выкинут какой нибудь сюрприз.
С точки зрения нампай фракция - такой же вид намбера как и интегер или флоат, но мб они в чем-то конфликтуют? Не встречалось?
Ты не тот долбеб, который не может открыть Гугл на соседней вкладке?
Ты не тот долбеб, который не может открыть Гугл на соседней вкладке?
Подскажите, пожалуйста, по практикуму внизу https://younglinux.info/oopython/objects.php. Если сделать функцию просто рандомом определяющую кто кого ударит, то это не интересно. Я решил сделать небольшой оверкилл по этому заданию- сделать классы с наследованием и чтобы дралось любое число войнов.
- есть класс human, атрибут name и health - число, дочерний класс Warrior с прочими параметрами.
Есть 2 (или N) экземпляра Warrior firstwarrior и secondwarrior. Они должны драться, и вся эта логика еще будет реализована через функции.
Я себе представляю это так- в одной функции я соберу вызов трёх функции подряд- первая составляет список имён (name) всех войнов со здоровьем больше 0. Если такой воин один- он подебитель.
Потом вторая берет двух случайных из списка, пусть даже это будет один и тот же вои, который сам себя бъёт и возвращает их имена в список "кто-кому-ударил".
Третья функция берет первого из списка и отнимает его урон от здоровья второго. (тут грамотно нужно бы удалять экземпляр со здоровьем меньше 0, чтобы убрать проверку здоровья в начале)
Я застрял на получении списка атрибутов всех созданных экземпляров класса воин.
Я могу вызвать атрибут name у определенного война типа print(firstwarrior.name) и оно верное.
А как получить список атрибутов всех существующих объектов класса?
https://pastebin.com/Hc2ArdHm листинг.
Буду благодарен за советы.
https://stackoverflow.com/questions/328851/printing-all-instances-of-a-class
По уму, тебе нужно создать было публичный атрибут класса (name-list), куда при инициации вносится новое имя.
Потом через любой инстианс класса можно получить доступ к публичному атрибуту, или просто призывом к классу, но я не помню синтаксис вызова общего атрибута.
П. С. Если ты изменишь публичный атрибут призывом к инстансу, то инстанс получит свою отдельную копию публичного атрибута, а не изменит публичный, поэтому избегай этого.
wars = [firstwarrior, secondwarrior]
attrs = [w.__dict__ for w in wars]
print(attrs)
вот тебе листинг через comprehension
блять только щас догадался засунуть все в класс прописав в инит подгрузку списка, а потом функцией дёргать элементы... сукааа..
Ладно, мб варианты поумнее есть
>считай что так. Я вообще в программирование не шарю.
Очередные вкатыши, считающие что Python простой, потому что инфоцыгане так сказали.
Смотри https://nodered.org/
https://flows.nodered.org/node/node-red-contrib-telegrambot
Там еще доступнее, совсем для дурачков. Перекатывайся нахуй на JS.
кекнул конечно, блоками я прогал максимум в 8 классе робота шоб он по линии катался, а тут целый йоба серьезный проект
зарепортил залётного
И? Наработки IBM брошенные коммьюнити как кость собаке, как и все JS наработки.
Бота для Telegram делал на этой хуйне, все очень просто, еще проще чем на питоне.
Но так как вкатыши часто просто не читают документацию до конца, это вряд ли поможет.
>считающие что Python простой, потому что инфоцыгане так сказали.
Сам по себе Питон простой, еще проще C#
А advancуd concepts везде сложные, в любом языке, ибо обычно требуют SICP и comp-sci
Юзаю sqlalchemy, как понять с какой именно БД я в данный момент работаю (postgresql или mysql например) чтобы выполнить последующий код нужным образом?
>Сам по себе Питон простой
Под знанием питона обычно подразумевается знание кучи библиотек, которые далеко не простые, и требуют знания тех самых advanced concepts.
Математика ничего общего не имеет со "знанием языка X"
Большая часть этих бибилиотек идентична для любого другого языка.
Ты чертовски прав
Сам питон очень прост и его очень быстро можно выучить, а вот его библиотеки очень большие не говоря уже о фреймворках.
>Математика ничего общего не имеет со "знанием языка X"
Причем здесь математика? Не считая некоторых специфических тем, она в программировании вообще не нужна.
>Большая часть этих бибилиотек идентична для любого другого языка.
Не идентична. Тот же numpy не имеет аналогов ни в одном другом языке, а чтобы научиться им нормально пользоваться нужны месяцы. opencv, pandas, matplotlib - это все большие библиотеки, которые за один вечер не освоишь. Помимо этого придется осваивать типизацию, без которой в больших проектах будет совсем плохо, multithreading/multiprocessing с которыми в питоне заебешься из-за GIL, генераторы с корутинами, лямбды и прочее. Везде свой синтаксис и свои особенности.
Для того гит и нужен, чтобы можно было историю коммитов отмотать и посмотреть, что было раньше
Был работающий код, его обрезали, получилось вот то, что ты нашёл.
>Я что-то не знаю?
Москва. 50k. Не расстраивайся очень сильно.
Скорее всего какая-то компания, где был один разработчик, которые поддерживал веб. Потом он сделал x2, и они ищут нового, а сами мало чего в этих словах понимают.
>Не идентична. Тот же numpy не имеет аналогов ни в одном другом языке, а чтобы научиться им нормально пользоваться нужны месяцы. opencv, pandas, matplotlib - это все большие библиотеки, которые за один вечер не освоишь.
Все эти бибилотеки ничего общего с питоном и языком не имеюТ, они вообще на С написаны
При желании numpy на C моэно портировать
> чтобы научиться им нормально пользоваться нужны месяцы
Это столько у тебя ушло? Можешь привести примеры как писал в начале с numpy, через месяц и через 3?
>Это столько у тебя ушло? Можешь привести примеры как писал в начале с numpy, через месяц и через 3?
Я не помню, сколько точно ушло времени на один numpy, поскольку учил с нуля весь датасаенс и машоб. Библиотек, которыми я постоянно пользуюсь, где-то штук 15-20. На все вместе, включая практически всю стандартную библиотеку и особенности питона, ушло около 2 лет.
Минимальное адекватное понимание numpy - это знать, как ответить на вопросы вот такого уровня: >>1869665 → >>1869685 → . Полное понимание - это не задумываясь вертеть как угодно многомерные массивы, уметь в логические операции над массивами, индексы, минимальные/максимальные/средние значения по осям (например, найти среднее значение RGB у массива из картинок). Короче, когда любую операцию над массивом, которую можно описать одним предложением, ты можешь записать в одну строчку при помощи numpy.
Ты же понимаешь что вопросы такого
>>1869665 →
уровня решаются в течение 13 секунд содания test.py и написания print(x)?
> Полное понимание - это не задумываясь
В этом то и проблема современных овер 45789е674586784 бибилиотек - implementation details change. За ними сложно уследить. Это как питон 2 и 3- там пиздец изменений. Их невозможно все в голове человеку держать UNLESS ты только этим и хзанимаешься всю жизнь. На эту тему говорил сам автор SICP
https://habr.com/ru/post/282986/
Системы, что мы нынче оперируем, слишком сложные и не надежные. Нужен новый подход, подход "мертвого запоминания простых блоков" не действует, ибо простых систем и блоков больше нет. Индустрия за 20 лет изменилась.
В результате, таких людей, которые воротят нос от тех, кто решает мелкие вопросы на месте путем а-ля "print' вместо запоминания мелочей, который могут постоянно менятьс - вживут. Вы вымрете, это не приспосабливаетесь.
>уровня решаются в течение 13 секунд содания test.py и написания print(x)?
В том, чтобы тыкать print и смотреть на результат, нет ничего плохого - все с этого начинают. Но это этап вкатывальщика, эффективность которого стремится к нулю. Вместо затраченных 15 минут и 10 строчек кода, вкатывальщик потратит полдня и напишет 100 строк говнокода, а нетривиальные проблемы вообще не сможет решить. В этом и есть отличие сеньора от вкатвальщика - сеньор знает свой стек технологий от и до, и может быстро и эффективно решать на нем задачи.
А статься вообще не про это. Она про то, что не нужно все писать с нуля, и не нужно знать все уровни абстракции, начиная от принципа работы компьютера заканчивая тем, как работает питон.
Свой стек в любом случае надо знать хорошо. Иначе будешь спотыкаться и делать говнокод.
Хотя уровень абстракции повышается и о многих вещах тебе думать не нужно, потому что они сделаны и работают хорошо.
> Но это этап вкатывальщика, эффективность которого стремится к нулю.
I don't know, man, если даже Гвидо приходится смотреть, как работает стандартная библиотека, то есть ли шансы у нас, простых смертных?
Какой тип указать что бы все покрыть?
сукатупая
Есть функция
def sdelat_gut(i: int, data: ???)
result = sdelat_gut(1, memoryview([1,2,3,4,5,6]))
Принимает в качестве data list, array, bytearray, bytes, string, memoryview - все слайсаются
Ловко ты его приложил!
Помогите, пожалуйста, уважаемые господа.
Знаю английский язык, подскажите сайтов годных с курсами хорошими, можно даже за деньги, но лучше бесплатно, где можно потом сертификат получить знаю что всем на него похуй, но все-таки для себя хочется, а западный будет явно солиднее наших контор
Заранее благодарю!
Просто шарп это энтерпрайз ебанина с анальными стандартами.
Го для молодых и шутливых, как и пистон, да и для одного и того же используются. Очень часто в вакансиях их связка идёт, так как с питона начинают критические сервисы переписывать.
Нашел какой-то фришный курс по питону на stepik для нубов, но там пока стандартные математические задачки и пока непонятно как это все пригодится. Возможно стоит что-то почитать дополнительно из литературы чтобы углубиться в тему?
Как вообще лучше вкатываться в кодинг через питон?
пока вкатываюсь сам. Говорю о своём опыте. Рекомендую начать с http://pythontutor.ru/lessons/inout_and_arithmetic_operations/
за один вечер он дал больше, чем ютуб за неделю (всё благодаря практике)
Тип данных в списке может быть довольно абстрактным, вроде Callable, может быть Union из совершенно разнотипных данных, может быть Any в конце концов.
Так что нет, не получится.
>Тип данных в списке может быть довольно абстрактным
Это и переписать можно на какой-нибудь class 'func'
>может быть Union из совершенно разнотипных данных
Это дженерик обычный
>быть Any в конце концов
Так вообще моветон писать
И поэтому они валятся на контейнерах (которые нам сейчас вживляют).
Потом он пишет, что CORS это механизм защиты браузера и это имеем смысл, Олько если сервис напрямую стучит браузером. Это типа не наш случай, потому что большинство наших сервисов идут через Gateway и соответсвенно это зависит уже от GTW передавать CORS супорт.
Ну и потом пишет свою версию теста, где проверяет Хедеры на содержание Access Control Allow Credentials true.
Что это за ботва и как ее правильно тестить? Спасибо
codecs.decode будет жаловаться
Проеб в prod/pre-prod/testb версий, мхех.
Тебе дали api для тестирования? Нет? Пусть нахуй идёт.
В один из инстансов в метод надо передавать параметр, потому не понимаю как можно реализовать красиво.
Input: command.number
Output: implementation = next(imp for imp in CMD_LIST if imp.command_code == command.number)
return implementation.handle().
Так вот в один из handle надо передать параметр из класса в котором CMD_LIST является атрибутом.
Дичь? Ну так вышло
Потом попытался выгрузить сайт на сервер, по инструкции из видео с ютуба что-то вбивал в putty - не получилось.
Сейчас пытаюсь создать новый сайт - виртуальное окружение в PyCharm не создается и все файлы в проекте написаны шрифтом красного цвета.
Что это и как это исправить?
Когда в командной строке вбиваю pip install venv, вылазит:
ERROR: Could not find a version that satisfies the requirement venv (from versions: none)
ERROR: No matching distribution found for venv
Ручками прямо папку venv и другие сопутствующие гитигнор-вещи. Потом в настройках Pycharm удаляешь интерпретатор для старого виртуального окружения и создаешь новый.
Из корня, вестимо.
Без понятия, узнаешь ответ - скажи
Добавлю на всякий, я понимаю что я и так смогу вкатится, вопрос в том дает ли вышка действительно особую систему знаний, связи, проекты и т.д или лучше самому все наверстать, а ближе к синьерству там разберусь и всем будет плевать на мой диплом?
Гит подсвечивает, если не знаешь что это, то забей, иначе добавь в индекс и закомить
Алсо если ты тот анон с вопросом про деплой сайта на сервер, то не забивай на гит, а сначала узнай что это и почитай в гугле «pip requirements.txt”
Мне тоже кажется что это как-то связано с гитом, это из-за того что я пытался загрузить сайт на git?
Правда я так и не понял почему это случилось и почему venv перестало создаваться без команды python -m venv venv.
Загадки, загадки. Только начал учиться программировать - а уже чувствую себя таким заебанным.
Сказал же читай про гит, зря ты за джангу взялся, vcs вершон контрол систем, ты добавил в индекс файлы, советую курс на степике по гиту, а пучарм прекрасная ide, подсвечивает красным файлы вне индекса, зеленым дбавленные, серым закомиченные, синим измененные
Когда создаешь проект есть вкладка с созданием среды, либо без, ты выбрал без создания
Вот мой скриншот.
Все так же как у тебя. НО venv не создается (раньше создавалось).
Просто интересно в чем проблема - на будущее знать.
Не создается даже если галка создать включена? Первое что я могу посоветовать, приготовится к грению жопы, потому что у тебя пользователь создан на кириллице, возможно это мешает, второе попробуй в консоли(cmd) ввести python3 -V или как там, сам погугли, вероятно питона нет в PATH, тут нужно читать как его добавить, так же почитай про переменные среды, переименуй пользователя, гайд есть на ютубе, а так же приготовься переходить на линукс, иначе будет слишком много проблем в будущем, отдельно гугли саму проблему с тем, что у тебя venv не создается(однако если раньше создавалась и ты включал галку, то я вообще хз что могло поменятсья)
Спасибо за совет.
Когда я делал простенький сайт по курсу itproger (небольшой блог) - venv создавался.
Потом с помощью этого видео - https://www.youtube.com/watch?v=BWtrVIVgA6c - я попытался переместить сайт на хостинг.
Ничего не получилось. Но после этого venv перестал создаваться. Думаю это как-то связано с тем что я создавал виртуальное окружение в putty, хотя это не точно.
По поводу твоего совету по переходу на linux подумаю, спасибо за совет. Как думаешь, какая версия лучше для программиста? Ubuntu?
Я сам вкатывальщик, установил убунту и ни разу не жаловался, думаю ты зря этим занимаешься, пока не разобрался с линуксом ставить на хостинг что-то, еще и без гита сложновато, начни с его-то более простого
Антош, как зарабатывать планируешь на программировании?
Я вот сайты хочу научиться делать - и на upwork с fiverr, английский попутно учу.
Еще думаю java выучить и android приложения пилить, может создам чего вроде Тик-тока и озолочусь.
А ты что планируешь?
It takes 5 seconds for Vscode to start and 3-4secods for exceptions to kick in
Why do you have yourself?
Зато пайчарм не тупит с автокомплитом, особенно на больших библиотеках.
> It takes 1 minute on 120Kb
Таки що вы говорите? Как там с ХДД в 2к20?
Небось система ещё пару минут грузится.
Хз как у анона, но пучарм у меня ещё тянет кучу плагинов и прочей хуйни. Написан он на джаве и тяжеловат при запуске.
При этом вскод тянет парочку плагинов уровня "подсветки код в файле с расширением 'хуйпизда'".
научись гуглить, друг, узнай что такое логи
>Подсветка синтаксиса
Семантическая? Она есть у Pylance
> интеграция с различными сторонними системами.
Какими?
Когда вбиваю django-admin.py startproject shop, папки shop не появляется.
Чому?
появляется только файл django-admin.py, подсвеченный красным цветом, и в нем написано:
"#!d:\python\shop\scripts\python.exe
# When the django-admin.py deprecation ends, remove this script.
import warnings
from django.core import management
try:
from django.utils.deprecation import RemovedInDjango40Warning
except ImportError:
raise ImportError(
'django-admin.py was deprecated in Django 3.1 and removed in Django '
'4.0. Please manually remove this script from your virtual environment '
'and use django-admin instead.'
)
if __name__ == "__main__":
warnings.warn(
'django-admin.py is deprecated in favor of django-admin.',
RemovedInDjango40Warning,
)
management.execute_from_command_line()"
Открой вакансии работ где собираешься РАБотать и посмотри требуется в них вышка или нет, че ты как маленький. Или ты думаешь на тебя после вуза выстроится очередь работодателей с зп 50-100к? лол
a возвращает элемент в позиции b
a.index возвращает позицию элемента b в списке, если он там нашелся
Какая переменная конвертирует какой индекс в какое слово? У тебя в коде несколько переменных инициировано, мог бы ее имя назвать, а пока непонятно что тебе непонятно. Правильно и подробно заданный вопрос содержит в себе значительную часть ответа.
>a возвращает элемент в позиции b
Блять, спасибо абу, что до сих пор ссытся инъекций кода в постах.
А сейчас подумал, чем этот метод лучше, чем хранить файлы в обычном dropbox'e
Я знаю что есть вакансии где требуется и где не требуется, я не об этом спрашиваю, я говорю о том, возможно ли без вышки стать программистом, а не макакой
да. Ещё вопросы?
Заведи себе rclone
У тебя лекции MIT по программной инженерии выложены в инет бог знает в каком году, если студентам-хирургам ещё нужен доступ в медвузы потому что там им надо на трупах людей тренироваться резать, то комп у тебя итак есть, надеюсь, а больше в вузе ничего нет к чему бы ты не мог получить доступ самообразовываясь, ну разве что вузовский преподаватель по сишке за отсос порекомендует тебя какой-нибудь 1с конторе в твоем городе или студенток в общаге ебать.
аноны, как в пандосе фильтровать по нескольким строкам?
Наприме есть датафрейм, один из столбцов имена, хочу оставить всех кроме наташ и оксанок.
Убрать только наташ или только окснок работает, но как сразу несколько таких фильтров сделать?
df.loc[df['Name'] != 'Oksanka']
Что?
Тупой вариант - создать
dury = list(Notash, Oksanka)
и потом
if (df.loc[df['Name'] in dury):
sosat()
Понятно что буде O(n)
Можно создать Set или Dict, тогда будет O(1) average, cj спайками
Назрел вопрос. У меня есть несколько словарей в списке. Мне нужно перебрать все значения в списке, но это да черт с ним. Я не понимаю, каким образом взять одно из значений списка (кличку животного) и заключить его в name.
manya = {'kind': 'cat', 'owner': 'dar'}
devil = {'kind': 'dog', 'owner': 'jhon'}
piggy = {'kind': 'pig', 'owner': 'sasha'}
pets = [manya, devil, piggy]
name = ?
for pet in pets:
print("That`s " + pet[name])
Вуз нужен, корочка не нужна
Нужно выяснить какая последняя версия rasa поддерживает tensorflow==1.14 и я задолбался перекачивать релиз за релизом.
Что надо-то? Какие имена подразумеваются? Если manya, devil, piggy, то, чтобы с ними рабоатть, у тебя должны быть соответствующие ключи в словарях {'name': 'manya', 'kind': 'cat', 'owner': 'dar'} и так далее. А так, что-то не ясно, какая у тебя задача
Можешь для pets не список использовать, а словарь, типа
pets = {"manya": manya, "devil": devil, "piggy": piggy}
__name__ но ты долбаеб
3 часа работы - и вот уже с сайта выгружаю тысячи архивных фотографией
4 часа работы - и вот уже при нажатии кнопки в текст вставляется старорусское оскорбление (белебеня) или умная цитата
3 часа работы - и фотографии автоматически редактируются в облаке и сохраняются с красивой нумерацией по дате
как же охуенно, а ведь я раньше неделями дебажил макросы на X7, а тут всё то же самое, но ещё и с распознаванием откликов программы и даже распознаванием изображений, это просто охуенно
Через генератор next
можно вытащить из locals() / globals()
Запутался с циклом for и итераторами.
a = [1,2,3,4,5]
b = (1,2,3,4,5)
tulpa = (a,b)
for i in tulpa:
....i = i2
print (tulpa)
Вывод программы: ([1, 2, 3, 4, 5], (1, 2, 3, 4, 5))
То есть ничего не поменялось. Почему? Ну вроде как потому что for создаёт итератор объекта tulpa и работает уже с ним, а не с оригинальным объектом. После выхода из цикла итератор удаляется сборщиком мусора, а оригинальный tulpa не тронут. Такая реализация языка, узнали запомнили. Я же прав? Или нет?
Но это только начало. Давайте запишем умножение в виде краткой формы записи.
a = [1,2,3,4,5]
b = (1,2,3,4,5)
tulpa = (a,b)
for i in tulpa:
....i = 2
print (tulpa)
вывод: ([1, 2, 3, 4, 5, 1, 2, 3, 4, 5], (1, 2, 3, 4, 5))
То есть в изменяемом объекте поменялось, а в неизменяемом нет. Какого хуя?
Третья часть. Давайте попытаемся применить списковый метод к i в for:
a = [1,2,3,4,5]
tulpa = (a,)
for i in tulpa:
....i.append(2)
print (tulpa)
вывод: ([1, 2, 3, 4, 5, 2],)
То есть работает. То есть здесь i ссылается на элементы кортежа tulpa.
Запутался с циклом for и итераторами.
a = [1,2,3,4,5]
b = (1,2,3,4,5)
tulpa = (a,b)
for i in tulpa:
....i = i2
print (tulpa)
Вывод программы: ([1, 2, 3, 4, 5], (1, 2, 3, 4, 5))
То есть ничего не поменялось. Почему? Ну вроде как потому что for создаёт итератор объекта tulpa и работает уже с ним, а не с оригинальным объектом. После выхода из цикла итератор удаляется сборщиком мусора, а оригинальный tulpa не тронут. Такая реализация языка, узнали запомнили. Я же прав? Или нет?
Но это только начало. Давайте запишем умножение в виде краткой формы записи.
a = [1,2,3,4,5]
b = (1,2,3,4,5)
tulpa = (a,b)
for i in tulpa:
....i = 2
print (tulpa)
вывод: ([1, 2, 3, 4, 5, 1, 2, 3, 4, 5], (1, 2, 3, 4, 5))
То есть в изменяемом объекте поменялось, а в неизменяемом нет. Какого хуя?
Третья часть. Давайте попытаемся применить списковый метод к i в for:
a = [1,2,3,4,5]
tulpa = (a,)
for i in tulpa:
....i.append(2)
print (tulpa)
вывод: ([1, 2, 3, 4, 5, 2],)
То есть работает. То есть здесь i ссылается на элементы кортежа tulpa.
Макаба ожидаемо насрала мне в штаны. Но вы поймёте. Проебались две звёздочки. В первом примере i = i x 2, а во втором i x= 2, где вместо х звёздочка.
Это он тебе ещё ошибку не поднял ВМЕСТЕ с применением изменения, как, например, в
>>> r = (3, 4, 5, [11, 22])
>>> r[3] += [33, 44]
TypeError!
>>> r
(3, 4, 5, [11, 22, 33, 44])
Не помещай изменяемые объекты в неизменяемые. Насоздают парадоксов, а потом сами в них влипают.
Есть следующая задача: распарсить текстовый файл c записями следующего формата :
RI.AP.W.1 {@ Rule I.AP.W.1: Maximum AP
}
#IFDEF SHRINK_COMPATIBILITY
RCO.D.5_rec {@ Rule CO.D.5_rec: Recommended Distance
}
RCO.D.6_rec {@ Rule CO.D.6_rec: Recommended Distance
}
#ENDIF
RULES
RCGO2.A.1 { @ Rule CGO2.A.1 : maximum poly > 1000
}
То есть имя + запись в фигурных скобках и произвольное количество мусора между ними. Все такие записи в файле нужно найти и поместить в какой то контейнер и по запросу выдавать список имя-код. Попробовал реализовать с помощью pyparsing, вроде получилось, но с оговоркой. Вот код:
from pyparsing import
def pasreDrcFile(File):
drcString = File.read()
outputFile = open('parseddrc.txt', 'w')
keyName = Word(printables)
params = Word(alphanums + "#$%&'()+,-./:;<=>?@[\]^_`|~" + " " + "\n")
paramsWord = Suppress('{') + params + Suppress('}')
completeNote = keyName + paramsWord
allNotes = OneOrMore(Group(completeNote))
outputFile.write(str(allNotes.searchString(drcString)))
a=allNotes.searchString(drcString)
print a, type(a)
return outputFile
drcFile = open('test.txt', 'r')
outputDRC = pasreDrcFile(drcFile)
drcFile.close()
outputDRC.close()
На выходе получается вот что:
[[['RI.AP.W.1', '@ Rule I.AP.W.1: Maximum AP \n']], [['RCO.D.5_rec', '@ Rule CO.D.5_rec: Recommended Distance \n '], ['RCO.D.6_rec', '@ Rule CO.D.6_rec: Recommended Distance \n ']], [['RCGO2.A.1', '@ Rule CGO2.A.1 : maximum poly > 1000 \n ']]]
То есть он формирует кучу лишних вложенных списков, например кладет запись в дополнительный список если она отделена от предыдущего мусором. Если эту переменную(класса pyparsing.ParseResults) преобразовать в список хоть в ручную через list(a), либо через функцию этой библиотеки .asList(), то получается еще больший пидец в первом случае, либо вид никак не меняется во втором.
Что я делаю не так? Может мне другими средствами нужно с этим работать? Никаких содержательных гайдов по pyparsing не нашел, только совсем простые примеры, а работать с описанием модуля напрямую не хватает опыта, вроде беру оттуда функции, а результата нужного не получаю.
Есть следующая задача: распарсить текстовый файл c записями следующего формата :
RI.AP.W.1 {@ Rule I.AP.W.1: Maximum AP
}
#IFDEF SHRINK_COMPATIBILITY
RCO.D.5_rec {@ Rule CO.D.5_rec: Recommended Distance
}
RCO.D.6_rec {@ Rule CO.D.6_rec: Recommended Distance
}
#ENDIF
RULES
RCGO2.A.1 { @ Rule CGO2.A.1 : maximum poly > 1000
}
То есть имя + запись в фигурных скобках и произвольное количество мусора между ними. Все такие записи в файле нужно найти и поместить в какой то контейнер и по запросу выдавать список имя-код. Попробовал реализовать с помощью pyparsing, вроде получилось, но с оговоркой. Вот код:
from pyparsing import
def pasreDrcFile(File):
drcString = File.read()
outputFile = open('parseddrc.txt', 'w')
keyName = Word(printables)
params = Word(alphanums + "#$%&'()+,-./:;<=>?@[\]^_`|~" + " " + "\n")
paramsWord = Suppress('{') + params + Suppress('}')
completeNote = keyName + paramsWord
allNotes = OneOrMore(Group(completeNote))
outputFile.write(str(allNotes.searchString(drcString)))
a=allNotes.searchString(drcString)
print a, type(a)
return outputFile
drcFile = open('test.txt', 'r')
outputDRC = pasreDrcFile(drcFile)
drcFile.close()
outputDRC.close()
На выходе получается вот что:
[[['RI.AP.W.1', '@ Rule I.AP.W.1: Maximum AP \n']], [['RCO.D.5_rec', '@ Rule CO.D.5_rec: Recommended Distance \n '], ['RCO.D.6_rec', '@ Rule CO.D.6_rec: Recommended Distance \n ']], [['RCGO2.A.1', '@ Rule CGO2.A.1 : maximum poly > 1000 \n ']]]
То есть он формирует кучу лишних вложенных списков, например кладет запись в дополнительный список если она отделена от предыдущего мусором. Если эту переменную(класса pyparsing.ParseResults) преобразовать в список хоть в ручную через list(a), либо через функцию этой библиотеки .asList(), то получается еще больший пидец в первом случае, либо вид никак не меняется во втором.
Что я делаю не так? Может мне другими средствами нужно с этим работать? Никаких содержательных гайдов по pyparsing не нашел, только совсем простые примеры, а работать с описанием модуля напрямую не хватает опыта, вроде беру оттуда функции, а результата нужного не получаю.
import re
dictionary = {}
with open('file', 'r') as fp:
....for line in fp:
........if re.match("[0-9a-zA-Z_.]+\s+{", line):
........name = line.split(" ")[0]
........content = line.split("{")[1].replace("}", "").strip()
........dictionary[name] = content
print(dictionary)
print(dictionary['RI.AP.W.1']
>import re
>
>dictionary = {}
>
>with open('file', 'r') as fp:
>....for line in fp:
>........if re.match("[0-9a-zA-Z_.]+\s+{", line):
>............name = line.split(" ")[0]
>............content = line.split("{")[1].replace("}", "").strip()
>............dictionary[name] = content
>
>print(dictionary)
>print(dictionary['RI.AP.W.1']
hot-self-fix
>Сути не меняет.
Суть в том, что помещение изменяемых объектов внутрь неизменяемых создаёт логический парадокс.
Ну я поместил в изменяемый и поведение моей программы не поменялось.
В первом примере вызывается метод https://docs.python.org/3/reference/datamodel.html#object.__mul__
Во втором - https://docs.python.org/3/reference/datamodel.html#object.__imul__
Действуют они по-разному, потому и результаты разные.
Спасибо, братик, почти получилось.
Учитывает только строку в которой была открывающая "{", а дело в том, что записи бывают многострочные размером с целую страницу:
RCGO2.A.1 { @ Rule CGO2.A.1 : maximum poly > 1000
maximum poly > 1000
maximum poly > 1000 maximum poly > 1000
}
Можно добавить таг, который будет проверять конец контента
import re
dictionary = {}
with open('file', 'r') as fp:
name = ""
content = ""
end_of_content = True
for line in fp:
if not end_of_content:
if '}' in line:
end_of_content = True
else:
dictionary[name] += f"\n{line}"
if re.match("[0-9a-zA-Z_.]+\s+{", line):
name = line.split(" ")[0]
content = line.split("{")[1].replace("}", "")
dictionary[name] = content
if '}' not in line:
end_of_content = False
print(dictionary)
Итого выглядит вот так: https://www.codepile.net/pile/LVmAGvVp
Собственно, начиная с 70 строчки выдает ошибку Unresolved reference "N". Помогите нубу, пожалуйста, как корректно определить эту N? выполняю в pycharm
Не робит. Наверное я не так отступы расставляю и функции пиздой идут.
Вот тут
dictionary[name] += f"\n{line}"
f не лишняя?
Там для построения нужны и N, и cnt если я все правильно понимаю Изначально вот так:
risk = np.zeros(N)
doh = np.zeros(N)
portf = np.zeros((N, cnt))
for n in range(N):
r = randPortf()
portf[n, :] = r
risk[n] = riskPortf(r)
doh[n] = dohPortf(r)
При замене всех N на cnt выходит пикрил то есть множество портфелей он не строит
> np.zeros
в общем, я не программист, я пока только учусь
я больше не советчик
глянь что делает функция np.zeros и может что придумаешь
https://pyprog.pro/array_creation/zeros.html#:~:text=Функция zeros() возвращает новый,формы и типа, заполненный нулями.&text=Задает размеры необходимого массива - целое,Определяет тип данных выходного массива.
Чел, ты мне сейчас столько анальной крови сберёг, ты даже не представляешь. Спасибо огромное.
>>76585
Имя всегда идет с новой строки? И очень большой файл?
Если в память влазит без проблем, тогда проще классикой, бегунком. Читаешь файло со строки до первого { - вот тебе имя, переходишь в режим чтения данных внутри, и двигаешь каретку до закрывающего } - вот тебе данные, резет лупа и снова пошел.
>dictionary[name] += f"\n{line}"
>f не лишняя?
Нет, это укороченная версия format() метода, работает, вроде, начиная с версии 3.5 или 3.6, если младше, то вот так:
dictionary[name] += "\n{}".format(line)
А за сколько обычно отвечает? Минута на запрос это пиздец долго, мне кажется, если это не лонг пулинг какой нибудь
Ничего не понял. Какой конкретно запрос висит?
Настроить таймаут, очевидно. А вот как, зависит от того, как ты запрос делаешь.
Говорят неплохо бы почитать документацию и увидеть что метод get принимает именованный параметр timeout
Да, всегда с новой строки. Файлы довольно большие, 550Кб вижу, это 10к строк. Бегунком не долго ли будет? Ждать несколько минут не вариант.
Я не могу насоздавать себе переменных динамически типа:
def names(how_many):
for x in range(how_many):
string = f'Warrior{x} = Warrior()'
eval (string)
names(how_many)
ругается
Warrior0 = Warrior()
^
SyntaxError: invalid syntax
Только списки только хардкор?
И еще из задания от линуксоила- задавать принадлежность команде игрока сгенерированных "войнов" (первая или вторая команда) нужно случайным образом. Делаем класс героя на классе юнит:
class Hero(Unit):
def __init__(self,id= idcounter(),team = random.randint(1,5),level= 1):
Unit.__init__(self,id,team)
self.level = level
И при создании двух героев First = Hero(), Second = Hero() у них почему-то всегда будет одна команда, как будто рандом возвращает всегда одно значение. Если я делаю random в отдельной функции типа def randomteam(): return random.randint (1,5) и уже по умолчанию ставлю
class Hero(Unit):
def __init__(self,id= idcounter(),team = randomteam(),level= 1): то герои получают значение действительно случайное. Почему так?
И где мне лучше писать эту функцию? оно работает, если я пишу в коде просто сначала глобальные переменные типа ID, потом функцию рандома, потом классы. Если я пишу классы до того, как встречается функция, то классы выдают ошибку при попытке генерации объектов. Куда эти функции прячут прогеры? Они выносят их в другие файлы и подключают в начале импортами? Как тогда рационально выносить эти функции чтобы не раздувать main.py? Стоит ли для чего-то глобального выносить каждую функцию отдельно в файл и потом уже в финальном main.py подключать всё? (имю ввиду подключать последние используемые уже в main.py модули)
И вопрос на развитие- как реализуется игровая логика, например, стратежки, а именно расположение функций и переменных в коде- есть глобальная переменная с id объекта где она объявляется? Она загружается при загрузке карты или еще где-то? Есть вывод графики, интерфейса, управления и собственно карта и юниты, и юниты , как я понимаю ООП- они должны быть базовыми классами "Юнит" с параметрами принадлежности игроку, с дочерними классами типа "Пеший"-"Техника" и для "пехотинца" уже подкласс "Человек"-"Орк", чтобы, например, по разному определять урон других юнитов "по оркам +100", и вот действие выделения юнита- оно может быть прописано в GUI или его можно/нужно прописать методами для базового объекта "Юнит" (если выделение оверлап юнит при отпуске мышки сделать переменную выделение True) И это все проверяется игровыми циклами типа фреймов или тиков по 60-n раз в секунду?. Я раньше только Construct немного ковырял, поэтому то, что находится глубоко в движке для меня загадка.
Я не могу насоздавать себе переменных динамически типа:
def names(how_many):
for x in range(how_many):
string = f'Warrior{x} = Warrior()'
eval (string)
names(how_many)
ругается
Warrior0 = Warrior()
^
SyntaxError: invalid syntax
Только списки только хардкор?
И еще из задания от линуксоила- задавать принадлежность команде игрока сгенерированных "войнов" (первая или вторая команда) нужно случайным образом. Делаем класс героя на классе юнит:
class Hero(Unit):
def __init__(self,id= idcounter(),team = random.randint(1,5),level= 1):
Unit.__init__(self,id,team)
self.level = level
И при создании двух героев First = Hero(), Second = Hero() у них почему-то всегда будет одна команда, как будто рандом возвращает всегда одно значение. Если я делаю random в отдельной функции типа def randomteam(): return random.randint (1,5) и уже по умолчанию ставлю
class Hero(Unit):
def __init__(self,id= idcounter(),team = randomteam(),level= 1): то герои получают значение действительно случайное. Почему так?
И где мне лучше писать эту функцию? оно работает, если я пишу в коде просто сначала глобальные переменные типа ID, потом функцию рандома, потом классы. Если я пишу классы до того, как встречается функция, то классы выдают ошибку при попытке генерации объектов. Куда эти функции прячут прогеры? Они выносят их в другие файлы и подключают в начале импортами? Как тогда рационально выносить эти функции чтобы не раздувать main.py? Стоит ли для чего-то глобального выносить каждую функцию отдельно в файл и потом уже в финальном main.py подключать всё? (имю ввиду подключать последние используемые уже в main.py модули)
И вопрос на развитие- как реализуется игровая логика, например, стратежки, а именно расположение функций и переменных в коде- есть глобальная переменная с id объекта где она объявляется? Она загружается при загрузке карты или еще где-то? Есть вывод графики, интерфейса, управления и собственно карта и юниты, и юниты , как я понимаю ООП- они должны быть базовыми классами "Юнит" с параметрами принадлежности игроку, с дочерними классами типа "Пеший"-"Техника" и для "пехотинца" уже подкласс "Человек"-"Орк", чтобы, например, по разному определять урон других юнитов "по оркам +100", и вот действие выделения юнита- оно может быть прописано в GUI или его можно/нужно прописать методами для базового объекта "Юнит" (если выделение оверлап юнит при отпуске мышки сделать переменную выделение True) И это все проверяется игровыми циклами типа фреймов или тиков по 60-n раз в секунду?. Я раньше только Construct немного ковырял, поэтому то, что находится глубоко в движке для меня загадка.
Блин, ты столько дохуя написал.
Про рандом - значения дефолтных аргументов определяются один раз, при объявлении функции, а не каждый раз при ее запуске.
Обойти можно так
def func(param=None):
if param is None:
param=generate()
Про геймдев - почитай https://gameprogrammingpatterns.com/
И вообще- я решал задания на Codewars, всё было нормально кроме специфичного задания с созданием генератора чисел Фибоначи для трибоначи, четыребоначи и т.д. -я просто спасовал через пару часов, т.к. делать это для меня 1) сложно. У меня была обычная школа и дома обычный батя, забиравший провод и говоривший идти погулять к наркоманам на улицу 2) не вижу практической пользы. Мне бы формошлепствовать научиться нормально. Я жмакнул "показать ответ" и увидел, что многое было решено специальными формулами для вычисления, или вообще запросом к OEIS. Как и в прошлых заданиях, где я делал громоздкие конструкции if-else, а лучшими ответами считались короткие записи в одну строку, которые выглядят как будто их писал обфускатор. Я понимаю ценность краткости- её, после получения определённого навыка, проще-быстрее читать. Может она даёт буст к скорости выполнения (сомневаюсь, ну разве что мы не пишем дрова для нвидии на С или базы ютуба, фейсбука и т.д.)? Я даже гуглу задал вопрос- зачем разработчики пишут так кратко? И вот одна статья, которая оставляет вопрос- https://dev.by/news/ctrl-c-razrabotchik. Собственно, вопрос- нужно ли усиленно изучать математику и олимпиадные задачи, если пока что нету навыков формошлепа. Да, для ума это полезно, и забрасывать такие задачи не попробова- моветон. Но, всё же, может позже будет рациональнее изучать нужную тебе ветку? Не думаю, что попаду в НИИ в свои 30 лет, или вообще куда-то на работу. Пистон изучаю скорее для себя и, возможно, для фриланса, потому что работа теряется. А для практики-заказчика- не так уж важна будет предельная скорость работы, оригинальность и краткость кода, так? Ну, по крайней мере, для мелких проектов-решений. Или это будет плохая привычка, и хром тормозит всё больше, скорее всего, потому что там сейчас собралась куча формошлепов?
спасибо
>Файлы довольно большие, 550Кб
Большие это 550Мб. Вот тут уже оптимизировать надо. Если меньше 100Мб, то проще считать в память. Если меньше 10Мб, то даже и думать не надо.
В принципе если формат простой, то можно после этого обычными регулярками разобрать, то есть регулярками ищешь имя + скобки. Они работают очень быстро. Правда это для простых случаев, если возможна история, что есть комментарии со скобками, или же скобки могут внутри строковых значений каких-нибудь, то уже придётся извращаться и делать парсер.
Не очень корректен для ситуаций, когда закрывающая скобочка где-то есть, но не в начале строки. Надо чуть переписать на самом деле, чтобы группа 'value' жрала всё, пока не напорется на правильную закрывающую скобку.
Но смысл в том, что в данном случае скорее всего достаточно обычных регулярок, просто надо использовать режим re.MULTILINE. Pyparser не нужен.
<receipt>
<header align='center'>{{ params[0] }} </header>
<company align='center'> {{ params[1] }} </company>
<inn align='center'> {{ params[2] }} </inn>
</receipt>
Есть такой вот шаблон, jinja2 высирает строку, а мне надо снова объект для парсинга
Да, смотрел может в других templators есть нормальный встроенный метод, но хуй. Костыли костылики
Спасибо. Читану.
Попробуй использовать файлы requirements, сделай файл requirements.txt с таким содержанием:
rasa
tensorflow==1.14
А потом набери, pip install -r requirements.txt, желательно в отдельном новом виртуальном окружении. По идее, pip сам должен раздуплить как и что ставить, чтобы результат соответствовал требованиям в файле.
Вот тут можешь джейсончики попарсить
https://pypi.org/pypi/rasa/1.4.0/json
список версий взять тут https://pypi.org/pypi/rasa/json
Только учти что он requires python>=3.6, поэтому скорее всего у тебя питон древний и pip вынужден ставить 1.13 tf чтобы поставить сиротинушке с некропитоном хоть что-то
А либа uvloop подменяет его на свой, который более эффективно менеджит корутины?
Есть такой код - https://pastebin.com/E8ssr397
Сгенерировал последовательность тоновых сигналов, записал. Как я могу (опираясь на свой кортеж) получить обратно буквы отдав последовательность тоновых сигналов?
Если словарик не будет меняться, то я бы сделал обратную мапу еще
reverse_freq = {value: key for key, value in freq.items()}
Да нет, не в этом вопрос. Если я скрипту отдам wav файл с последовательностью тоновых сигналов, как скрипт научить понимать частоту каждого? Сопоставить-то нет проблем. Вот в какую сторону думать.
Вангую, что придется нарезать на куски по паузам и измерять частоту в каком-то numpy или подобной хуйне.
А что представляет из себя файл? Просто набор звуков одинаковой длинны без пауз? Найди какую-нибудь либу, которая показывает частоту и добавь это в массив попутно удаляя последовательные дупликаты
Сначала маркер, потом сообщение. Различия в длительности каждого тона.
Решаю ctf
Есть такой вот лог файл: https://hastebin.com/nuxunofumu
Из него вытащил само задание: https://hastebin.com/qikirofoli
Это простой python скрипт, который сам себя расшифровывает
НоооОО! Пароль нам неизвестен. Я насколько понял - пароль 3 символа UTF-8!!!!!! Те 100к в 3 степени вариантов? Это только брутом решать? На том же пайтоне скрипт написать?
Есть идея проверить utf-8 рендж у соли и прочих base64 строк чтоб на основе этой гадости генерить варинаты под брут пароля. Но это низкобальное задание, вряд ли там настолько все сложно..
или ссылки на более удобный интерфейс:
https://ghostbin.co/paste/73dey
https://ghostbin.co/paste/oczmz
newtext = (b'\xCF\xD0\xC8\xC2\xC5\xD2')
print(chardet.detect(newtext))
выводит KOI8-R.
Суть в том, что если печатаю из системы у меня текст нормально определяется принтером и он печатает символы в верной кодировке, из IDE получается хуйня. Не понимаю в чем дело.
огромное спасибо!!!! а то у меня совсем крыша поехала с этим юникодом
Просто никак не делаются. Обычно через эвент луп или треды.
Пиздато, я теперь автощитпостер.
Документацию не читай - сразу отвечай
https://schedule.readthedocs.io/en/stable/faq.html#how-to-execute-jobs-in-parallel
Точно, можно ведь посмотреть в сторону готовых планировщиков
есть задача: в папке лежат файлы с названиями:
a1.jpg, a2.jpg, a3.jpg, b1.jpg, b2.jpg, b3.jpg, b4.jpg. Программа выбирает в элемент массива список с именами a1.jpg, a2.jpg, a3.jpg, после окончания - создает второй лист в массив с именами b1.jpg, b2.jpg, b3.jpg, b4.jpg
Вопрос, как такое реализовать?
Очевидно, новые группы создаются, когда меняется кей.
Можешь сортировать, хотя при глоббинге будет уже сортировано вроде.
https://ideone.com/X92isi
благодарю
Нет, сервис обычно подразумевает отдельный инстанс приложения
Как это сделать грамотнее всего? Через маркёры собирать новый тест файл для каждого релиза? Или через импорты. Тогда импортов будет много. Ещё проблема что там есть сервис тесты, а есть Юай где запускается браузер. Для таких тестов создавать отдельный тест файл?
я делаю программу, которая будет создавать слайдшоу из изображений и музыки, но проблема в том, что мне надо сделать как-то чтобы изображения менялись с такой скорости, пока не закончится видео (длина видео = длине музыки), но они меняются быстро, и получается, что последнее изображение так и висит до конца видео..
пробовал играться с частотой кадров, но это ни к чему не приводило
ясно.
Для всех, кроме москолудов предложение остаётся открытым. Я готов платить анонам, а не дроволомам с пустошного скил фэктори
Я уже руками нашёл, но идея интересная, спасибо. Возьму на вооружение.
Короче сервис-обертка над яндекс маркетом (потенциально не только над ним). Пользователь выбирает услугу/магазин/что-то с большим кол-вом отзывов. Сервис парсит комментарии и с помощью машин лернинга пытается сделать вывод - какое примерно кол-во отзывов могло быть написано ботами/работниками магазина. Чисто лингвистическим анализом, всякие повторяющиеся паттерны в текстах и прочая залупа из этой области.
В качестве вротенда вью, бек джанга, как мл присобачить, пока не знаю.
Че думаете? оценит ли потенциальный даватель зряплаты мои потуги?
звучит круто и применимо (ток на ЯД есть блямба "проверенный покупатель", но даже такие покупатели могут быть ангажированными)
можешь на комментарии в ютубе расширить и вычислять ботов
Ага, не забудь подключить pytorch,tensorflow,мочу,говно,аллаха.
Ох уж эти однострочные машиннообучатели
Если это можно сделать без машиннообучателя, значит будет без него. Это просто, что первое пришло в голову. У меня пока мало познаний в ёба-алгоритмах, 3 курса шараги все-таки.
Говорю же, идея совершенно спонтанно родилась - смотрел какого-то обзорщика на утубе и он такой говорит "бля, не верю отзывам с высокими оценками, всегда все куплено!"
срочно, двач, дедлайн горит///
я закончил писать скрипт, билдю её в .exe через пакет pyinstaller, но после запуска .exe файла, выдается такая ошибка, с чем это может быть связано?
python 3.7
чел ты..
я бы не писал сюда, если бы не гуглил,, я уже столько сайтов перешёл, столько способов перепробовал
Наверное потому что питон не лучший выбор для этого.
Обмануть АИ с помобщью АИ легко. Твой анналоиз так же не будет вызывать доверия. Плюс всегда будет понимание что у тебя так же могут купить "анализ" как купили отзывы.
Как в Пистоне в датаклассе тайпингом обозначить поле, которое не обязательно? То есть при создании датакласса его может и не быть и это нормально
В тайпскрипте я бы написал:
someField: number,
someUselessField?: string
Optional
Так нельзя, можно лишь сделать Optional() - возвращает value или None. Шортханд для Union[T, None]
Есть точка в центре экрана, есть вторая рандомная в любом месте экрана, нужно построить вектор и на определенном расстоянии вычислить третью точку. То есть на вход подается зеленая и синяя точки + расстояние, на выходе получается красная.
Квадрат гипотенузы гугли
> и на определенном расстоянии вычислить третью точку
Если у нас не задано направление, то эта красная может находится на любой совершенно позиции на твоём заданном расстоянии, то есть, на окружности с радиусом, равным твоему расстоянию. Разберись для начала с задачей.
На рисунке у тебя они на одной. Прямой. Это тоже внезапное условие или нет?
отвлеку вас от питонячих проблем и задам вопрос (но сначала подводка)
Короче слушал я радио-т недавно, и Бобук, один из ведущих (и человек, к которому в целом у меня доверительное отношение в плане профф области) сказал, что, если ты не делаешь свои пет проекты в свободное время после работы, то ты не считаешься нормальным программистом и программистом вообще
отсюда вопрос: какие у вас пет проекты? и когда вы находите на них время? при условии, что рабочий день (ну лично у меня) никак не нормирован и может занимать от 10 до 16 часов работы в день
Pet-project'ы для белых людей, у которых рабочий день 4 часа, им платят в 5 раз больше, чем должны и 6 часов в день они на тваттере проводят.
Ты - негр. Куда ты к белым людям лезешь?
Так условие писал деградант какой-то
> нужно построить вектор и на определенном расстоянии вычислить третью точку
Вектор от чего к чему? Почему это именно вектор, а не прямая? Это важно для задачи? Вычислить точку? Может, координаты вычислить, малолетний дэбил? И на определённом расстоянии от чего?
Короче, либо пиши нормальное условие, либо пиздуй в начальную школу учиться выражать свои мысли.
В англоязычных источниках называют dunder методы, от __. Вряд ли есть нормальный переводной вариант.
Все хотят
ВОЛШЕБНАЯ ФУНКЦИЯ!
Пчел, если сложно понять, то знамени для себя слово Виктор словом направление. Хорош Донбасс бомбить
Внешний вид в любом случае будет говно говна. Частично может спасти бутстрап но это не точно .
Запуш в гит, перестанет быть красным. Ставь Линукс пока не поздно, иначе ебаться с виндой будешь больше чем с кодингом.
Челы, нужна книга по истории языка пайтона, для пополнения библиографического списка, есть ли такие? Просто хоть че-то вставить, наобум писать книгу не хочу, вдруг проверят.
Студенты
Так я и гуглил, даже в вике чекнул ссылки.
Создатели обычно такое пишут на своих сайтах, и в статье на Википедии такие моменты указываются. Чтобы знать наверняка, вот в опенсорсных продуктах прям лежит такой файл LICENSE, там все указанно, продукт распространяется вместе с этим файлом. Если проект лежит на гитхабе, то можно прямо там и посмотреть этот файл, без скачивания всего проекта, можно просто найти файл LICENSE и жмякнуть по нему, а можно на специальною кнопку нажать.Или вот если что-нибудь устанавливаешь, там бывает вылазит окошко, где надо согласится с условиями использования, чтобы продолжить, там и указываются эти условия.
Вот, например, файл LICENSE джанги:
https://github.com/django/django/blob/master/LICENSE
питон ваще изичный писать на нем сплошное удовольствие
советую прочитать книгу
A Byte of Python
там всего 100стр
Легко писать скрипты и автоматизацию, тот же ансибл на питоне, соответственно плагины писать нужно на питоне.
> крч как составители учебников это делают, особенно если примеров в книге 300 штук
Ну как бы специалисты в конкретном предмете учебники составляют. Люди десятилетиями наукой и образованием занимаются, примеры накапливаются.
А кто ты такой? Для которого всё "вышмат". Тебе по дифференциальной геометрии примеры нужны, по уравнениям в частных производных, по алгебре выссказываний или может ещё по чему-нибудь? Или всё вместе одновременно?
Я серьезно даже не для собеса а чисто для себя, прост каты на основные алгоритмы чтобы посидеть поразбираться ну и чтобы знать что есть такие алги.
Для этого ничего тренировать не нужно, а нужно читать книгу с теорией. Потом уже увидишь применения.
.Net тоже под линуксом работает.
Использовать глобальные переменные для таких целей очень дурной тон.
В питоне функция это объект. Объект имеет переменные = атрибуты, лучше их использовать для этих целей. Python-way всё обернуть в декоратор.
Пример декоратора, который пропускает первый вызов и потом делает последующие:
https://ideone.com/6OWqfM
Не нужно менять код функции, нет проблемы использовать подход для нескольких функций.
Альтернативный вариант, не добавлять атрибут, а завести отдельный глобальный словарь (либо хранить его в атрибутах функции-декоратора), где ты считаешь, сколько раз функцию вызвал. Декоратор будет регистрировать функцию в словаре и при каждом вызове увеличивать соответствующий счётчик.
Так в чём-то лучше, поскольку ты не меняешь атрибуты функции, функция уже совсем никак не может узнать, что ты её оборачиваешь, и ты можешь центральным образом мониторить, какие функции ты вызывал, а какие нет.
Мне как-то кинул книгу по алгоритмам, я начал читать, и знатно прихуел, и даже не то что читать я листать заебался. Там даже не код, а псевдокод, и даже не как примеры, а вообще все подряд, и еще при том что книга переводная. Ну полистал и бросил. И почему то все советуют ее, мб это троллинг такой как с боку но пику, хз.
В общем согласен, с этим товарищем. Очень странно на собесах наблюдать людей, с 5+ годами опыта, которые рассказывает про то, как классно они решали задачи на работе, при этом, на гитхабе у них лежат лабы из универа, максимум. И всё это ещё более странно выглядит, когда знаешь, что сам пилишь пет проекты и тебе это интересно, коллеги твои пилят их и узнают много нового, изучают технологии.
Low-IQ долбоебушка
Алгоритмы не привязаны к конкретному языку, Big O применимо к любом языку программирования.
Ты никогда не вкатишься, забей.
>при этом, на гитхабе у них лежат лабы из универа, максимум
А что у крутых пацанов лежит?
> когда знаешь, что сам пилишь пет проекты и тебе это интересно, коллеги твои пилят их и узнают много нового, изучают технологии.
И нахуя очередной бложик выкладывать в паблик? Щупанье технологий может быть и в рамках тривиальной задачи.
>А что у крутых пацанов лежит?
Чтобы далеко не ходить, можно у самого бобука и посмотреть https://github.com/bobuk
Анон я не понимаю. вот выполнил я
$ pip install пакет-нейм
дальше если пытаюсь выполнить
$ пакет-нейм действие-нейм
я получаю
пакент-нейм: command not found
ЧЯДНТ?
помогло, спасибо
> А что у крутых пацанов лежит?
Ролл-идей-тред лежит не так далеко, попробуй там.
> И нахуя очередной бложик выкладывать в паблик?
Сделай не очередной бложик. Сделай фреймворк для создания кроссплатформенных ботов, или зайди в идей тред и там выбери что интересное. Задач тысячи, старых либ, которым нужна поддержка, тоже тысячи, но вместо этого анон "не знает что делать" и только бложики пилить может.
> Щупанье технологий может быть и в рамках тривиальной задачи.
Да? Ну вот работаешь ты на галере, юзаете для сбора логов/метрик/визуализациий внутренний продукт <Залупа2000>, приходишь на собес и как тебе помогут знания внутренней хуни, если ты тот же Promtail/Loki/Prometheus/Grafana в глаз никогда не видел и только "читал що такое есть, да", а попробовать то и негде. Тру стори с недавнего собеса. И да, с этими технологиями я познакомился в пет проекте, как и с Sentry, к примеру, потом было приятно о них на собесе сказать и применить в работе.
>Ролл-идей-тред лежит не так далеко, попробуй там.
Там в основном алгоритмы, а не щупанье новых технологий, да и спиздить к себе проект перетерев гитового автора дело 5 минут.
>Задач тысячи, старых либ, которым нужна поддержка, тоже тысячи, но вместо этого анон "не знает что делать" и только бложики пилить может.
Ковыряние в легаси говне это "пощупать новые технологии", это ковыряние в легаси говне
>Да? Ну вот работаешь ты на галере, юзаете для сбора логов/метрик/визуализациий внутренний продукт <Залупа2000>, приходишь на собес и как тебе помогут знания внутренней хуни, если ты тот же Promtail/Loki/Prometheus/Grafana в глаз никогда не видел и только "читал що такое есть, да", а попробовать то и негде.
Да, для этого пет проекты и делаю. Только вот смысла их выкладывать в паблик не вижу, это никак не приумножает твою ценность как кодера, быстрее опрос по самой технологии сделать.
Да и вообще к гиту, как к показателю мастерства отношусь плохо, если там только говно для щупанья. Плюс уже выше говорил про пиздинг
https://stackoverflow.com/questions/750172/how-to-change-the-author-and-committer-name-and-e-mail-of-multiple-commits-in-gi
И про ценность при найме
https://habr.com/ru/post/350912/
https://www.benfrederickson.com/github-wont-help-with-hiring/
[handler_dev]
args=('%(logdir)s/dev_emulator.log', 'w+')
logging.config.fileConfig(p, defaults={'logdir': os.getenv('LOG_PATH')})
Пытается писать в /dev_emulator а не $PATH/dev_emulator.log
> спиздить к себе проект
> пиздинг
Вся суть.
> Ковыряние в легаси говне
Можно переписать заново или сделать по-своему у себя в репе, было бы желание.
Писал пару библиотек для АПИ сторонних сервисов, аналоги уже были, но не поддерживались и их подход совсем мне не нравился. Как результат - моя либа попала в доки этих сервисов, как пример работы на питоне.
> пет проекты и делаю
> Только вот смысла их выкладывать в паблик не вижу
> У меня все есть, только я вам это не покажу
Напомнило шуточку про "сосед говорит, что 8 раз за ночь может".
Открытый код на гите показывает твои навыки и умения писать код, наличие своих долгоиграющих проектов так же показывает твое умение в поддержку своей кодовой базы(и тут уже код и закрытым может быть, главное что б проект работал, и его можно было бы потыкать).
Твой проект\инструмент не обязаны быть популярными, не в счет твои звезды и подписчики, но если тебе есть что показать - огромный плюс.
Если нечего показать - ок, твой выбор, кому-то все равно, кому-то нет, каждый собеседующий сделает свои выводы.
Как я писал выше - очень смешно наблюдать за человеком с охуетькаким опытом, который с запалом рассказывает про свои успехи на работе, но при этом не имеет никаких пет-проектов, ни открытых, ни закрытых. Т.к. по опыту могу сказать, что бизнесс развивает проект не тем путем, которым бы развивал его разработчик и, если тебе интересно направление, неизбежно появляются свои идеи\предложения, которые трансформируются в пет-проекты\инстурменты.
>Вся суть.
Но доказать, что это твой код, если это не контрибьютинг в попенсорс ты не сможешь.
>Открытый код на гите показывает твои навыки и умения писать код, наличие своих долгоиграющих проектов так же показывает твое умение в поддержку своей кодовой базы(и тут уже код и закрытым может быть, главное что б проект работал, и его можно было бы потыкать).
Давай тестовое, увидишь как кандидат может писать код и будет гораздо большая вероянтность, что ты увидишь, именно его способности.
>Напомнило шуточку про "сосед говорит, что 8 раз за ночь может".
While he has written a ton of code at his work in the last year, he hasn't posted anything that can be viewed publicly: he has no public commits, he hasn't created any repositories of his own and he has an insignificant number of followers. Despite all that he's still the best developer I've ever had the pleasure of working with.
>Твой проект\инструмент не обязаны быть популярными, не в счет твои звезды и подписчики, но если тебе есть что показать - огромный плюс.
А статья выше говорит обратное, в подавляющем большинстве случаев его не смотрят.
И пока не предложишь способ определения является ли код действительно кодом кандидата, который он писал когда-то это не имеет смысл.
переназначение переменных, типо Development среда дохуя
ньюфаг в питоне, знаю только часть основ по видосикам на тыртубе, пришел сюда за информацией и ахуел: книг в шапке много и хуй знает с чего начать, глаза разбегаются. добрый анон, помоги, напиши название книги которая для этого подойдет больше всего и на русском.
>September 29, 2013
Anon pls, там количество изменения со 2-го на 3-ий коммунити нахуй разорвало в клочья, до такой степени тчо некоторые пердуны все еще на 2-ке сидят, ибо НИСОГЛАСНЫ.
Та книга вообще про 3 не знает
Оригинал от 2013, всего одно издания, согласно офф-page
КТо там дописывал руссКОЮ верСею - хуй знает
ну помоги мне вкатиться в неё
Я сам тупица, помогите плз, по биологии надо вытащить несколько столбцов из txt файла в строку. И записать их потом в другой файл.
https://dumpz.org/aCAadC743RQg получается вытащить столбец, но не знаю, как его перевести его в одну строку.
спасибо тебе, добрый анон
Присоединяюсь к благодарности, читаю с удовольствием
Там должны быть разделители же. Вот по ним отделяй один столбец от другого
Потом:
arr = []
for i in столбец:
arr.append(i)
string = 'твой разделитель'.join(arr)
макака съел табуляцию, забыл
Есть стринга, состоящая из столбцов чисел
20 154
51 543
85 351
и т.д.
и есть словарь, где каждому первому числу столбца соответствует стринга
id_to_word = {
20: 'raz',
51: 'dva',
84: 'tri'}
Задача в том, чтобы первое число каждого столбца поменять по словарю на какое-то слово, а потом выблевать такие же столбцы, например:
raz 154
dva 543
tri 85
и т.д.
Как это сделать? Не понимаю. При этом надо учитывать, что во втором столбце могут быть числа как в первом столбце, их переводить не надо. Числа в первом столбце не по порядку и не подряд.
Ищем ключи в начале строчек и заменяем на их же значения.
Схуя ли? r просто выключает слэш, на котором всякие спецсимволы и последовательности сидят.
Вот анон, в чем разница между
for i in spisok
for i in range(spisok)
for i in range(0, len(spisok))?
Я так понимаю, в первом случае я итерирую по объектам внутри списка. А во втором и третьем случае?
А если мне надо совершить в этом цикле какое-то действие с объектом списка (например добавить его в другой список), то это будет
spisok2.append(i) или
spisok2.append(spisok)?
> spisok2.append(spisok)?
Макаба съела квадратные скобки, на всякий случай вместе со скрином.
spisok2.append(spisok)
Ебанные self-ы блять!
Ко-ко-ко, мы хотим чтоб в методах были видны все аргументы, по этому селфы это круто. Но блять, нихуя непонятно как этот селф ПЕРЕДАЁТСЯ блять, сука, любой инстантс класса всегда чтоль методу себя передаёт в первый аргумент??? А если у меня там числа нахуй нужные?? Где посмотреть исходники этого говна!
self это просто соглашение, что бы вот так называть первый аргумент. В принципе его можно нарушить и назвать как-нибудь иначе, например this. Хотя настоятельно религия требует self.
Когда ты объявляешь метод класса, создаётся какая-то функция, которая даже не метод, а просто функция. Когда ты вызываешь метод объекта, тогда в эту функцию первым параметром передаётся сам объект, а остальными прочие параметры, с которыми ты этот метод вызвал. Вот и всё, никакой магии.
Всё просто же. Смотри https://ideone.com/Oyhu19
Строки 11 и 12 это одно и то же, и вот чтобы не носить этот self постоянно за собой, он передается автоматически.
Посоветуйте нужные статьи, видео и прочие ништяки пожалуйста.
Заранее благодарю!
Это как у всего раньше был твитор, так теперь должен быть телеграм, чтобы как у людей.
>Это как у всего раньше был твитор, так теперь должен быть телеграм, чтобы как у людей.
Пиздос. Все пишут ботов для телеграма, но реально их вообще кто-нибудь использует? Или это зумерские поделки, которые отваливаются еще на стадии идеи?
у меня есть два модуля: один не поддерживает питон 3.8, но поддерживает 3.7. Другой не поддерживает питон 3.7, но поддерживает 3.8
втф и что делать? на 3.6 пилить проект? это ж старье
Встаю, умываюсь, включаю пеку. Открываю трекер, читаю рабочую почту и смотрю сообщения об ошибках, прилетевшие с тестового стенда. Делаю чай/кофе. Могу сходить посрать. Вот сейчас релиз приближается, сижу собираю релизную ветку. Открываю включаю музыку и поехал. В перерывах читаю сосач, хабр, профильные каналы в телеге. Иногда переключаюсь на свои проекты.
Продуктивно 4-6 часов. Иногда, когда приходится больше 8 часов работать, то и продуктивность 8 и более часов.
Я на ремоуте сейчас
Встаю в 10, пишу в чатик, что собираюсь делать сегодня, до часу-двух пинаю хуи. Работаю до 4-5 часов и снова пинаю хуи
Пидр
Как мне сделать вызов print()? У меня нет принтера.
>
>
С 9(10) до 12 бездельничаю, обедаю и начинаю работать(удалённо), 4 часа работаю, час гуляю, потом ещё 3-4 часа работаю. В остальное время читаю книги или сайты всякие.
>for i in range(spisok)
И тут ты открываешь документацию и смотришь, какой тип первого параметра принимает метод range().
Объясните пожалуйста, максимально доступным языком: при создании каждого экземпляра класса, параметру object передаётся значение, например "Бобик".
При запуске этой программы, кроме прочего, через метод talk на экран выводиться текст и значение параметра name, который, по непонятым мне причинам имеет значение параметра object.Как так? Ему же не передавали это знание! Как он его получил?
удваиваю вопрос.
Гипотеза- он передаёт объект и пространство имён объекта присоединяется к методу? я вообще лох, лучше обоссыте.
Есть класс Critter. У него есть конструктор класса. Конструктор описывается в методе __init__(), который может принимать значения аргументов. Конструктор - это метод, который всегда вызывается при создании экземпляра класса: crit1 = Critter("Бобик"). Конструктора может и не быть.
В твоем случае конструктор требует указать обязательный аргумент name, таким образом при создании экземпляра класса ты пишешь Critter("Бобик"), после чего конструктор примет "Бобик" за name и будет с ним работать внутри себя.
Видишь магическое слово self? Все методы внутри одного класса должны содержать первым аргументом слово self, чтобы общаться друг с другом и передавать друг другу переменные, перед которыми тоже должны стоять self.
В твоем конструкторе создается переменная self.name, на языке ООП это называется полем класса. При создании экземпляра класса (т.е. вызове метода конструктора) ей присваивается значение "Бобик". Поскольку метод talk() находится в том же классе Critter, отныне он способен работать с полем класса self.name, читать его значение или менять.
Поэтому, когда ты создашь экземпляр crit1, то можешь использовать для него метод класса talk(), который выведет "Меня зовут Бобик".
И?
Пчел, че ты как этот?
У тебя есть spisok = [0, 1, 2]
Это готовый список, ты можешь пройтись по нему итератором, поскольку списки (а еще кортежи, словари, множества и даже единичные строки) итерируются.
Поэтому for i in spisok пройдется по каждому значению списка: 0, 1, 2 - и что-то с ним сделает.
Функция range() принимает на вход число и возвращает "типа" список целых чисел от нуля до указанного числа.
С точки зрения итератора, range(2) - это то же самое, что [0, 1, 2].
Поэтому ты либо используешь for i in range(2), либо for i in spisok.
Не надо spisok пихать в range(), последний будет ругаться.
Спасибо за развёрнутый ответ!
Перечитал несколько раз. Понял назначение self и дополнил представление о роли конструктора.
Единственное что осталось не понятным по этой теме:
роль параметра object, и почему он подсвечен как функция.
В скобках класса можно указать класс, от которого он будет наследоваться. Object - родительский класс Critter; последний наследуется от первого. Вот только в Пистоне все является объектом, поэтому указывать в скобках object не имеет никакого смысла, ньюфагов это только запутает, поскольку, если не указано иное, object по дефолту будет родителем любого класса. Удали его вместе со скобками и будет тебе счастье.
Python обильно используется для автоматизации тестирования. Без ООП в подобном проекте делать нехуй.
Тебе нужно подрочить PyQt5, вся его суть строится на ООП. К концу написания своего первого рабочего десктопного приложения ты освоишь ООП.
в пистоне самый классный ООП, чисто сокрытие данных, ведь наследия считай нет.
Ничего не понимаю. Я делал задачки на codingbat.com, и так среди них есть вот такая:
https://codingbat.com/prob/p119308
Правильный код под нее: https://ideone.com/Mfnkio
Почему здесь итерируется по рейнджу списка минус один? Что это вообще значит?
>в пистоне самый классный ООП
Такое мог сказать только отбитый питонист. ООП в питоне - кусок говна.
>чисто сокрытие данных
Сокрытие, обеспечивающееся не нормальным модификатором доступа типа private, а ублюдочными андерскорами, реализация 10/10.
>наследия считай нет
Ебанько?
Контракты можно через абстракные классы описывать
Тебе бы надо почитать базовую инфу по массивам данных и как они индексируются. Это общая информация comp sci, не конкретно питона.
https://www.geeksforgeeks.org/iterate-over-a-list-in-python/ а почему вот тут вторым примером приводится итерация по списку через range?
>>82844
Есть какой-нибудь хороший материал по этой теме? Русский/английский не важно.
> Есть какой-нибудь хороший материал по этой теме? Русский/английский не важно.
Информатика?
Можно поискать на ЮТ иностранный курс Computer Science basics
>почему вот тут вторым примером приводится итерация по списку через range?
Да не по списку, блять, а по ДЛИНЕ списка. Ты буквы читать умеешь?
length = len(list)
for i in range(length):
for i in range(spisok) - хуйня какая-то
for i in range(0, len(spisok)) - 0 можно не писать, а так это стандартный способ итерации по индексам коллекции, хотя проще с enumerate.
Что вообще такое range?
range(начало, конец, шаг) возвращает итератор на массиве целых чисел от начала(включительно) до конца(не включаем) с заданным шагом(если не указывать, то будет 1)
Что это значит:
Получим все значения из итератора через list
list(range(5)) -> [0, 1, 2, 3, 4]
list(range(5, 11)) -> [5, 6, 7, 8, 9, 10]
list(range(5, 11, 3)) -> [5, 8]
Можно задать отрицательный шаг, но тогда начало и конец тоже нужно менять местами.
list(range(11, 5, -1)) -> [11, 10, 9, 8, 7, 6]
Надо самостоятельно дрочить, пока на щелкнет это самое понимание.
Это же вообще начало начал.
Двачую. Сегодня циклы с ренжем, завтра он придет: "А как работает if else?"
>любой инстантс класса всегда чтоль методу себя передаёт в первый аргумент
Это так. Это и в C# и Java так же, просто происходит чуть менее явно
В книге написано: "Значение присваивается только ОДИН РАЗ, при ПЕРВОМ ОБЪЯВЛЕНИИ класса."
В этой программе, метод-конструктор __init__ при создании каждого объекта класса, повышает значение атрибута total на 1.
Мне кажется, что этот факт перечёркивает вышеупомянутое утверждение из книги.
В книге ошибка? Подскажите как это понимать.
А, я знаю! Атрибут КЛАССА, именно класса, а если атрибутом объекта класса- это каждый раз при инициализации нового объекта.
Передача self вовсе не невидимая.
Ты обращаешься к методу как
my_obj.foo()
или
self.foo(), если изнутри объекта
Вот фактически эта первая часть и переезжает в виде первого параметра в foo
В принципе ты можешь даже явный вызов сделать. Если у тебя класс MyClass и метод foo
class MyClass:
____def foo(self):
________print('foo')
my_obj = MyClass()
ты можешь вместо my_obj.foo()
делать
MyClass.foo(my_obj)
Логика такая, что питон, когда видит запуск метода с точкой, лезет в объект, берёт его класс, вызывает функцию из класса, подставив первым тот самый объект.
В принципе это типовой механизм реализации ООП, в разных языках примерно такая же схема и используется. Поэтому непривычной питон-магии тут нет на самом деле. Поведение более явное, чем во многих других языках программирования.
Тот же JS/php/c++ более запутанные, потому что там this используется, который как бы неизвестно откуда берётся.
Чтобы устроиться на работу.
Какую-то ты банальщину спрашиваешь.
ООП нужно для того, чтобы лучше организовать работу со сложными данными. Когда ты какой-то набор данных можешь выделить в некую сущность, вот тогда и получается объект.
Как иначе работать с кучей объектов одновременно?
Все эти принципы появились из чисто практических соображений.
Просто объект вообще выделяется очень много где, без этого никак. А уж в крудах, которые чаще всего делают на Джанго, ну совсем никак.
Принципы ООП, наследование-инкапсуляция-полимормизм, это уже нужно для организации большого кода.
Чтобы это прочувствовать, нужно просто попробовать что-то большое написать без ООП и с ООП. В конце концов ты сам это ООП и переизобретёшь, если думать над кодом будешь.
Вкатил себе за щеку.
Ну я чуть-чуть не представляю практики. Например есть бд для регистрирующихся людей на сайте. У пользователя есть выбор параметра пол и можно выбрать м или ж или боевой вертолёт и для боевого вертолёта будет создан необычный подкласс, которому выдача фильтрует только таких же людей из базы? Илл 50 прочих полов тоже своя сущность типа вертолёт заднеприводный, гирокоптер, субмарина с ракетами вода космос и тогда, возможно, мне понадобятся классы для взаимодействия между объектами по разному, чтобы не писать много if в регулярных выражениях? Я просто загуглил в чём смысл ООП или практическое применение, и вторая статья с критикой всех столпов- полиморфизма, потому что переносится всё равно очень много аргументов, наследуемость - в новый проект всё равно без редактора не потащишь, инеапсуляция- якобы прячет код от разработчика. Мне бы кто объяснил как дураку. Та же инеапсуляция- например обрезает пространство имён, нпследумость- для одного проекта будет работать и сэкономит время на код. Полиморфизм- ну это я наверное смешиваю его с наследуемостью, якобы для разных объектов можно использовать тот же код (вызов), если прописывать специфические функции, так? Скорее всего я просто сам ещё не лез во что-то крупнее скриптов, задачек для школьников или чат-бота просто, нужно глянуть примеры... Пойду.
Для мухосрани какой нибудь норм.
Тогда и словарь это ООП.
бамп
Как лучше оформлять необязательный аргумент в классе ниже и почему?
class A:
--def __init__(self, a=None):
----self.a = a or self.generate_val()
или
class A:
--def __init__(self, a=self.generate_val()):
----self.a = a
Бля, там у методов self стоит по ошибки, игнорируйте.
В 51 он только в свой манямирок вкатится.
Во втором случае generate_val() будет вызван только один раз, во время старта скрипта, а не создания экземпляра класса. В первом случае будет вызываться каждый раз, когда создаётся объект этого класса.
Скорее всего ожидается поведение такое, какое должно быть в случае (1).
Довольно известные грабли, когда агрумент по-умолчанию это список или словарь, там та же история, и на этом часто спотыкаются.
Однако в случае как здесь в каких-то извращённых случаях может требоваться поведение как в (2). Хотя в этом случае оформлять всё равно лучше иначе, например инициилизировать какую-нибудь переменную уровня класса таким образом, а внутри конструктора уже копировать её значение.
Это копия, сохраненная 26 апреля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.