Это копия, сохраненная 12 ноября 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
F.A.Q. https://github.com/TheKnightsWhoSayNi/info/wiki/Hat
Свой код кидайте через https://ideone.com/
Книги: https://yadi.sk/d/tArKKuQu3Kejuq
Прошлый тред: https://2ch.hk/pr/res/1063552.html (М)
бля ну бывает
Пиши демона.
Смотря какая структура и как ты всё это запускаешь.
У меня всё работает через supervisor и достаточно рестарт сделать для обновления.
Почему ты это пишешь здесь, а не в .net-мирке?
Я не из питоновской core team. Значит, ты не хочешь говорить об этом.
Что заставляет тебя говорить об этом несмотря на отсутствие твоего желания?
Глотаешь или спелеввываешь гвидосемя?
Нормально спроси, нормально отвечу, епта.
Типа livereload для sublimetext или других редакторов чтоли? Ничем не отличается.
>не сожрали лишнего
Что значит не сожрали лишнего? Итератор - это закладочка в итерируемом. Ничего она не жрет.
Второй итератор заведи,я не знаю.
Покажи , где Питон трогал тебя на вот этой библиотеке.
Что лучше юзать - Docker или Python3 virtualenv? У них одинаковый функционал? virtualenv позволяет устанавливать программы, не относящиеся к Python3?
Поясните кто-нибудь почему если поменять переменную BAD например на 123 (а такого в ответе сайта в status нет 100%) оно все равно в проверке if в цикле while status.find(BAD) идет по этому ветвлению, а не в else..
>Что лучше юзать - Docker или Python3 virtualenv?
Смотря для чего
>У них одинаковый функционал?
Нет, у докера обширнее
>virtualenv позволяет устанавливать программы, не относящиеся к Python3?
нет
>(а такого в ответе сайта в status нет 100%)
>>> help(str.find)
Help on method_descriptor:
find(...)
S.find(sub [,start [,end]]) -> int
Return the lowest index in S where substring sub is found,
such that sub is contained within S[start:end]. Optional
arguments start and end are interpreted as in slice notation.
Return -1 on failure.
ты неправильно проверяешь ответ
-1 это всегда True в булевом приведении
Traceback (most recent call last):
File "/Users/elodan/Desktop/TelegramBot/check.py", line 20, in <module>
if BAD in status:
KeyboardInterrupt
Оно просто замирает на этом месте пока не прерываю процесс.
Все, решил, просто записал результаты проверки в булеановские переменные и работал уже с ними. Всем спасибо, все свободны.
https://t.me/inmac
Это моноблок с предустановленной 8. 7 даже потяжелее, мне кажется, а с луниксом лень заморачиваться.
-
А есть интересные задачки на питоне, для новичков?
Грубо говоря есть список с аргументами, у каждого из которых есть id, как правильно будет их сгрупировать?
Думаю в список списков по id, но хз как и будет немного по монгольски.
Спасибо, сейчас почитаю.
Падает NameError, код даже не выполняется из-за того, что вторая функция объявлена позже её вызова.
Например такой код
def a(x=0):
if x== 0: b()
print ("a")
def b():
print ("b")
a(x=1)
a()
Даже не попытается выполняться.
Ок, есть две джанго модели со связью многие к многим, которые ссылаются друг на друга. В модели пользователя есть поле, содержащее всё ивенты, в которых он участвует а в модели ивента есть поле всех пользователей, участвовавших в ивенте
Все работает.
https://ideone.com/e5aLZq
>>1073549
Нормальная у него "архитектура", такое часто используется для обработки структур непонятной вложенности.
Ебать, как внезапно перескочил на джанговскую модель.
https://stackoverflow.com/questions/16574350/import-error-when-cross-importing-django-python
Может кто из знающих анонов проконсультировать?
Помогите анону с двача не обосраться и получить работу в картофельной респблике.
Телега @save_me_pr
Обещаю занять не более 10 минут и вечную благодарность.
>да кто-нибудь возьми да и напиши решение,
что за фантазии?
там наверняка задание не на один час
пиши давай
return x - y
def add(x, y):
return x + y
def mul(x, y):
return x * y
def div(x, y):
if y == 0:
return 0
else:
return x / y
str = input()
parsed = str.split(' ')
t = str[0:3]
val = int(str[4])
val2 = int(str[6])
ds = {"ADD": add, "SUB": sub, "MUL": mul, "DIV": div}
print(ds[t](val, val2))
Если брать не однозначное число выдает ошибку, как фиксить?
return x - y
def add(x, y):
return x + y
def mul(x, y):
return x * y
def div(x, y):
if y == 0:
return 0
else:
return x / y
str = input()
parsed = str.split(' ')
t = str[0:3]
val = int(str[4])
val2 = int(str[6])
ds = {"ADD": add, "SUB": sub, "MUL": mul, "DIV": div}
print(ds[t](val, val2))
Если брать не однозначное число выдает ошибку, как фиксить?
>как фиксить?
во-первых, четко сформулировать решаемую задачу, составить набор тестовых данных
во-вторых, не переопределять зарезервированные слова (Str)
в третьих, не харкодить индексы
если надо вычислить простое выражение (a+b,a-b,a*b,a/b) то сначала ищешь оператор, а затем слева и справа от него выделяешь операнды
Как мне один внутренний список поменять местами с другим, если проверка идёт внутри списка списков?
Выглядит как-то так
https://pastebin.com/Z9qAxgZJ
first_list[0] first_list[1] = first_list[1] first_list[0]
Индексы храни
прочел почти полностью (не стал смотреть 2 последние главы, кажется про метаклассы и еще что то)
как по мне, пиздец, наискучнейшее чтиво
почему её везде пихают и всем советуют как первую ?
потому что она длинная или что :S
пиздец, за тысячу с лишним страниц, я выудил полезной инфы наверное на 100-150 максимум
у него еще уебанская манера повторять все по тысяче раз в одном и том же абзаце
90% того, что он расписывал на 10-15 страницах, я обычно проверял за главу до этого двумя строчками в интерпретаторе
пиздец, чувство, как будто просто бездарно потерял время
>потому что она длинная
Да, чтобы очередной вкатывальщик подольше в тред не заглядывал, а в идеале забил на это дело.
>Да, чтобы очередной вкатывальщик подольше в тред не заглядывал, а в идеале забил на это дело.
но эту книжецию прям вообще везде пихают
она даже есть на python.org (хотя там дохуя книжек, что как бы намекает)
Поясните как это надо было сделать и как превратить этот говнокод в менее говнокод?
По ссылке список тредов с последними 3 постами, отсортированный по последнему посту (не точно)
https://pastebin.com/jaqqRVxd
Я понимаю, потому и спрашиваю, я пиздец как долго думал как написать, в итоге решил написать хоть как-то, а потом уже рефакторить.
выпиши на листочке, что тебе надо от треда (пример - число постов, последние три поста, число ответов с картинками), поста (оп или не оп, есть или нет картинки) и сделай это через методы или свойства (properties) модели
Что именно открыть?
>>1073734
Тоже об этом думал, тут я подсмотрел немного, что понял. Сейчас попробую добавить методы. Модели выглядят так.
https://pastebin.com/0P3hLbgh
то есть чтобы матчило либо по одному, либо по другому параметру?
например
print "текст %s" %(1.5,100,"dog")
for i in list
был именно иттератором, то есть 0,1,2,3
а не элементом списка?
чтоб я мог обращаться к элементу списка внутри
list???
Ну во-первых, for не порядку обходит
Во вторых хочу обращатьсятак list[index] , мне так удобнее
>Ну во-первых, for не порядку обходит
Нихуя себе новости.
>Во вторых хочу обращатьсятак list[index] , мне так удобнее
Ты какой-то странный.
прими грязные хаки в сердце свое
ты с сишки/паскаля вкатываешься?
for в случае упорядоченных контейнеров (список, кортеж, строка) обходит по порядку
обращаться по индексу в общем случае моветон
Ну блядь, ну возьми ты да запусти эту сраную одну строку кода, всё сразу очевидно станет!
>>1073899
>Во вторых хочу обращатьсятак list[index] , мне так удобнее
Предполагаю, что в таком случае питон у тебя не первый язык. Как бы ты такой обход массива сделал в другом языке, Кроме javascript'а, там действительно for i in array выдаст индексы, но ты же не оттуда, надеюсь? Вот затем это же на питоне напиши, раз уж так надо.
Воспринимай "for a in list" как forEach.
Django Q
Прочитал простую книжку по алгоритмам (грокаем алгоритмы), лутца, "python. к вершинам мастерства", "django by example" и веб-туториал по фласку
Сейчас работаю сижу и дрочу стек по мере надобности
Я просто искал что нибудь по пифону для тех, кто уже прочитал лутца, а то вокруг только книги для начинающих вкатывальщиков
Зачем тебе книги, если базу ты освоил? Для дальнейшего роста есть официальная документация к интересующим тебя модулям/фреймворкам, гугл, стековерфлоу, этого достаточно.
Надо было мозг включать когда язык выбирал, оценить рыночек и свои шансы на вкат.
Ой, да иди нахуй, ща подучу ещё носкл, торнадо нгингкс какой-то и буду 100к в секунду
Спасибо, анон, вроде бы, только я не могу понять как достать оттуда посты свои.
Вот у меня такого вида есть Q
<Q: (OR: <QuerySet [<Post: 1 1>]>, <QuerySet [<Post: 1>, <Post 1>, <Post: 1>]>)>
И как отсюда достать эти посты?
Проблема ещё в том, что посты достаю через фореин ки, пробовал так
Parent.objects.filter(post__in=a)
где а, собственно, Q object, но пишет ValueError: not enough values to unpack (expected 2, got 1)
Ну у лутца не все библиотеки описаны
А в вершинах и ассинхронность и itertools со всякими functools полностью используются и еще куча всего
И это не повторяется по пять раз как у лутца
Мне зашло
Большая часть того, что есть в книгах быстро забывается, если не применять на практике. А на практике там многое не применяется.
Главное, что я помню что это есть, где это найти и примерный способ использования, восстанавливать знания гораздо быстрее, чем получать новые
Всё, сам разобрался, спасибо ещё раз за Q
То есть ты просто читаешь это как справочник? Чтобы в случае, когда это понадобится ты мог не растеряться
Совершенно верно. Необязательно помнить абсолютно все методы наизусть и их правильное использование. Намного важней знать, что такой метод есть, а также где и как его найти в документации.
Пока нашёл только как это сделать самому ручками, то есть собрать свой велосипед.
p.s. Просто кинуть .pyc или подобное не пойдёт, нужно именно защитить сорцы по максимуму, но при этом что бы всё приложение работало.
Полистал вершины мастерства. Очень напоминает Поваренную книгу питон.
почему-то ждется выполнение треда для продолжения цикла, что я не так делаю?
в .run() нельзя передавать аргумент?
простите, все осознал, я тупой даун
Так а что не так?
Что там можно сделать, я получаю последние посты и оп пост с моделей методом.
Единственное что я вижу хуево это 2 раза итерировать по спискам, но это не джанго орм, а просто моё слабое знание питона.
Что там в орм переписать-то нужно?
Когда я писал имиджборду, то в самой модели делал сортировку по времени и просто получал несколько первых постов
Ну так я в модели же и сделал.
#models.py
def last_posts(self):
res = self.post_set.filter(Q(op=True) | Q(id__in=[a.id for a in self.post_set.all()[:3]]))
return res[::-1]
https://docs.djangoproject.com/en/1.11/ref/models/options/
class Meta:
____ordering=['-create_date']
Да блять, ты думаешь что я вообще даун что ли? Ты читал хотя бы что там написано. У меня всё что есть — это Post, нужно опа достать и 3 последних.
https://pastebin.com/rJbD9zRX
и метод locateOnScreen не всегда находит изображение на экране. Не нашел различий между частью пикрил1 и пикрил2.
Знает ли кто более-менее быстрый способ нахождения координат изображения? И еще, можно ли использовать png с прозрачностью
отклеился пик 1
там все отрисовано жабаскриптом на canvas, селениум ведь для html?
В общем есть структура bin с min и max параметрами, в гистограме таких бинов например 16, min max заполняются в цикле следующий образом:
width = max - min
bin_min = min
for i...
s = (i + 1) / size
f = log(width)
fi = exp(f s)
bin_max = min + (uint64_t)fi;
hist.bin.max = bin_max
hist.bin.min = bin_min;
bin_min = bin_max
...
Где min и max диапазон гистограммы.
В общем, проблема в том, что начальные бины получаются с очень маленьким шагом в пару нс, и я не понимаю как решить эту проблему.
Вот пример выхлопа такой гистограммы c min = 1500, max = 100 NS_IN_MICROSECOND, то есть диапазон от 1.5 до 100 микросекунд.
[00][1500 ns - 1502 ns]: 0
[01][1502 ns - 1504 ns]: 0
[02][1504 ns - 1508 ns]: 0
[03][1508 ns - 1517 ns]: 0
[04][1517 ns - 1536 ns]: 0
[05][1536 ns - 1574 ns]: 0
[06][1574 ns - 1652 ns]: 0
[07][1652 ns - 1813 ns]: 75
[08][1813 ns - 2143 ns]: 365
[09][2143 ns - 2820 ns]: 645
[10][2820 ns - 4210 ns]: 962
[11][4210 ns - 7060 ns]: 1898
[12][7060 ns - 0012 mc]: 8
[13][0012 mc - 0024 mc]: 4
[14][0024 mc - 0049 mc]: 2
[15][0049 mc - 0100 mc]: 0
Первая колонка номер бина, вторая диапазон, третья само значение гистограммы.
На примере видно, что шаг в первых бинах очень маленький в 2 нс, что мне бы хотелось исправить, и сделать шаг немного шире при таком же диапазоне, но я пока не понимаю как.
Заранее спасибо.
В общем есть структура bin с min и max параметрами, в гистограме таких бинов например 16, min max заполняются в цикле следующий образом:
width = max - min
bin_min = min
for i...
s = (i + 1) / size
f = log(width)
fi = exp(f s)
bin_max = min + (uint64_t)fi;
hist.bin.max = bin_max
hist.bin.min = bin_min;
bin_min = bin_max
...
Где min и max диапазон гистограммы.
В общем, проблема в том, что начальные бины получаются с очень маленьким шагом в пару нс, и я не понимаю как решить эту проблему.
Вот пример выхлопа такой гистограммы c min = 1500, max = 100 NS_IN_MICROSECOND, то есть диапазон от 1.5 до 100 микросекунд.
[00][1500 ns - 1502 ns]: 0
[01][1502 ns - 1504 ns]: 0
[02][1504 ns - 1508 ns]: 0
[03][1508 ns - 1517 ns]: 0
[04][1517 ns - 1536 ns]: 0
[05][1536 ns - 1574 ns]: 0
[06][1574 ns - 1652 ns]: 0
[07][1652 ns - 1813 ns]: 75
[08][1813 ns - 2143 ns]: 365
[09][2143 ns - 2820 ns]: 645
[10][2820 ns - 4210 ns]: 962
[11][4210 ns - 7060 ns]: 1898
[12][7060 ns - 0012 mc]: 8
[13][0012 mc - 0024 mc]: 4
[14][0024 mc - 0049 mc]: 2
[15][0049 mc - 0100 mc]: 0
Первая колонка номер бина, вторая диапазон, третья само значение гистограммы.
На примере видно, что шаг в первых бинах очень маленький в 2 нс, что мне бы хотелось исправить, и сделать шаг немного шире при таком же диапазоне, но я пока не понимаю как.
Заранее спасибо.
Лучше ковыряй протокол.
Неплохой шанс для новичков потренироваться и попоробовать себя в небольшой командной работе. Сроков жестких и каких-либо ограничений нет.
Если кого заинтересовало - заходите к нам, там всё будет расписано и ближе к выходным начнём, планируем по крайней мере.
Ссылка - https://t.me/joinchat/CD2EtQ5Pm0dmoSQQMTkVlw
А ты рассчитываешь, придумать что-то новое, или что на работе будет не очередной интернет магазин?
Я не думаю, а знаю, у меня на работе и так не "очередной интернет магазин", а сириос бизнес, лол. Да и на прошлой кстати тоже, был далеко не типичный интернет магазин, вернее даже не магазин.
Ничего придумывать не надо, все уже придумано до нас.
А то. Я же эту картинку и приволок сюда в июне. И архивчик мой. И три лайка сука на 3000 просмотров в диске.
Если тебе с подробностями, то так: интерпретатор пробует получить итератор из объекта который стоит после инструкции for эквивалент collection.__iter__() потом он у этого итератора получает следующий объект из коллекции эквивалент iterator.__next__()
Можешь тут подробнее поглядеть если тебе так интересно https://github.com/python/cpython/blob/master/Python/ceval.c#L2819-L2885
> три лайка сука на 3000 просмотров
Вот не надо ныть, хотя бы 3, а то пока я не поставил - вообще ничего не было.
p.s. Спасибо за книги, кстати.
>>1074240
Но тогда возникает вопрос, почему будет работать такой код:
for i in Squares(1, 5):
print(i, end=’ ‘)
Если вызвать методы __iter__ и __next__ объекта, стоящего после for, то бишь класса в данном случае, определенные в самом классе, то ничего же не должно произойти, потому что без предварительного присваивания i=Squares(1,5) не будет получен аргумент self. Вот реализация класса:
class Squares:
def __init__(self, start, stop):
self.value = start - 1
self.stop = stop
def __iter__(self):
return self
def __next__(self):
if self.value == self.stop:
raise StopIteration
self.value += 1
return self.value 2
Черт, пробелы пропали
>потому что без предварительного присваивания i=Squares(1,5) не будет получен аргумент self
Так ты вот этим: Squares(1,5) и создаешь экземпляр класса. Не обязательно его какой-то переменной присваивать. Как например в конструкции for i in range(10)
Понял, спасибо.
Вот у меня
class Pizza(models.Model):
____title = models.CharField(...)
class Toppings(models.Model):
____pizza = models.ManyToManyField(Pizza)
Я присваиваю экземпляру Toppings пиццу.
Как мне достать title из этого экземпляра?
top = Toppings.objects.get(id=1)
Как мне через top получить title?
Есть вариант сходить на оффлайн конференцию по питону, в частности джанги. Сам я отсносительно нуб, пару книженций прочитал, как думаете есть профит идти? Главный минус всё это дело стоит 500 хохлятских рублей ~1000 деревянных.
Обещают вот такую срань показать:
1 день
Идеи, лежащие в основе Django
Архитектура Django
Область применения, особенности и ограничения
Демострация: пишем простое ВЕБ приложение на Django
2 день
Что такое Continuous delivery
Сложности Continuous delivery
История Docker
Архитектура Docker
Демострация: Continuous delivery от разработки до Delpoy в среде Docker
3 день
Эволюция процесса деплоймента веб-приложений
Стек AWS Lambda для serverless/FaaS
Разработка под AWS Lambda на языке Python. Тестирование
Использование AWS Lambda + Python в production
Стоит идти, если я половину слов не знаю что там написано?
Наверное, я что-то не могу понять, через фореин ки я могу получить аргументы с обоих сторон, а через мени ту мени нет?
Доусон норм. Легко осваивается начинающими. Лутц для углубленного изучения, и он совсем уж точно не подходит тем, кто только начинает учиться программировать.
Ну всё ебать, говорил же что перепишу, теперь уже точно получше стало.
https://pastebin.com/sXSMtYFM
Ну сходи на первый день, может будет возможность хоть вопросы позадавать. Остальные 2 дня тебя я думаю пока без надобности, разве что так, для общего развития, чтобы знал.
Че, сексист шоле?
Да там биллет на 3 дня. Всё равно наверное схожу, думаю, полезно будет.
"Убедительная просьба закидывать свои проекты в виде /название проекта или фичи/virtualenv/папка с содержимым проекта/ , например, /Регистрация/virtualenv/Registation/. Зачем? Потому что это упрощает всё. Деплоясь в virtualenv вы избавляете большинство от проблем с не той версией питона/джанги или же отсутствия какой-то либы, которую вы нашли на задворках интернета." из шапки.
Означаел ли это, что если я запилю что-то в своем энве, ахривану его и выложу в доступ, то каждый смоежт юзать из коробки просто распаковав папку с виртуалэнвом?
>Означаел ли это, что если я запилю что-то в своем энве, ахривану его и выложу в доступ, то каждый смоежт юзать из коробки просто распаковав папку с виртуалэнвом?
Вообщето виртуаленв принято воссоздавать на новой тачке
Больше на докер похоже.
Виртулвенв юзер создает новое окружение у себя, из requirements.txt ставит пакеты с нужными версиями и запускает в этом окружении скрипт.
Все эти книги нужны больше для ознакомления. Чтоб ты пролистал одну-две такие книжки и получил представление о языке и его возможностях. Что-т там в них выучивать бестолку. Ты можешь сколько угодно вникать в книги, от обсеров во время твоих работ в редакторе это не спасет. Все равно будешь сидеть тупить, гуглить, лазить по справочникам. Как по мне, так книги только оттягивают нубов от начала настоящей практики.
> Т е более-менее валидный путь клонирования энвайронмента - это что-то вроде pip install -r requirements.txt ?
Выходит что так.
P.s. По факту я это ни разу нормально не юзал, только попробовал как-то и все. Но я ж у мамки хекка и не работаю в команде ни с кем и кучу различных проектов не имею.
Проорал. Ты ничего вменяемее hello world без книг не напишешь. Вася, даже гугл тебе не поможет. Хули толку от конструкции со стэковерфлоу, если это код и ты вообще не вкурсе, что это за шамбала и че она делает.
Чувствую себя неполноценным
изучать стандартную библиотеку
>если это код и ты вообще не вкурсе, что это за шамбала и че она делает.
А тут вступают в дело мозги, позволяя человеку-таки понять, что тот код делает. Но это не про тебя.
Для Foreigh key я просто пишу
foreign = get_object_or_404(Foreign, id=id)
post.foreign = foreign
Когда делаю для ManyToMany тоже самое пишет TypeError: 'Many' object is not iterable
Мне нужно что бы при завершении одного из потоков(завершается определённый процесс), завершались и остальные два, какие есть варианты?
Почему форма записи отличается?
>завершались и остальные два
Завершались в смысле принудительно убивались если ещё живы, или каким-то магическим образом все три синхронизировали свою работу и сами по себе завершались одновременно?
Если первое, то всё легко же — https://repl.it/M9XW
Если второе, то помочь ничем не могу.
Да, принудительно, спасибо, сейчас чекну твой вариант.
>>1074687
Прочитал, что неправильно в доках, пишут так
form.save_m2m()
Только я нихуя не понимаю как это работает. Как оно выбирает с каким именно объектом м2м ассоцироваться?
У себя я конкретно передавал. Вот поле в модели есть
many=models.ManyTomanyField(Many)
Потом выбирал нужный мне айдишник
many = get_object_or_404(Many, id=id)
и уже его присваивал новому посту в поле
post.many.add(many)
Поясните как оно работает?
print(a + b)
a1 + b1
a2 + b2
a3 + b3
Мне нужно сделать, чтобы вывод был таким:
........b1
a1 + b2
a2 + b3
a3
Как это провернуть?
Отлчино, антош, заработало.
P.s. А не могу бы ты пару коментов написать, что бы понятно было чому оно так работает? Интересует именно main_proc и как он связан с остальными.
Типа, введите пароль, если пароль соответствует, продолжаем выполнение, если нет, вернуться на строку, с предложением ввести пароль.
Используй цикл while.
Что-то типа:
while True:
____if not enter_password():
________continue
____else:
________break
Ну и в enter_password() запрашивай ввод пароля и проверяй его, и если всё ок - возвращай True, если же нет - False.
Нихуя не понял. Что-то похожее на это можно сделать?
passw = '123'
pass1 = input('Введите пароль:')
if passw == pass1:
print('Пароль корректен.')
else:
Вирнуца к строке 2.
Cпасибо.
Как это грамотно сделать? Потому что у меня постоянно либо сохраняется написанное в форме, либо я задаю пустую форму, но при перезагрузке оно всё равно спрашивает хочу ли я заново отправить форму.
Чтоблядь?!
1. Код сюда
2. Распиши нормально в чем проблема
3. redirect может заюзать попробуешь?
Неужели мне нужно знать синусы, тангенсы и прочие ряды-дифуры?
С помощью вики смог заебашить этот Ряд тейлора для вывода экспоненты. Но нахуя? Это так важно в погромировании?
Ну вот освоил я синтаксис, знаю что такое статический метод, абстрактный класс, что дальше?
Неужели только 1 желающий?
Или местным идея не понравилась? Или чат в ТГ? Или что?
P.s. Скоро начинаем.
> Либа чтобы дёргать api по http
> Неужели только 1 желающий?
> Либа чтобы дёргать api по http
> Неужели только 1 желающий?
https://www.youtube.com/watch?v=MGxAtO5n9SY
Есть предложение интересней и полезней? Готов тебя выслушать.
Только давай без борда на джанго.
Дать возможность новичкам попробовать свои силы, мне не жалко.
И нас там 2-3 всего.
Еще сайт надо бы допилить, его API.
Так пусть новички либу и сделают. Пиздец. Процесс простой срываю покровы:
1. Ищещь либу в гугле.
2. Если либа нашлась, то goto 4.
3. Пишешь либу.
4. Используешь либу.
> Еще сайт надо бы допилить, его API.
Какой, нахуй, сайт?
Что у вас конкретно делается, ты мне скажи, не понятно же нихуя.
Что вы капчу решаете, или что?
> Пишем библиотеку для работы с API anticaptcha
Что она делать-то будет?
Антикаптча это хуйня которая решает каптчу, правильно? А вы что будете делать?
Alex Martelli, Anna Ravenscroft, Steve Holden-Python in a Nutshell. A Desktop Quick Reference
Спасибо
Охуенное у тебя образование. Школьники справляются, а ты нет. Лучше бы учился, а не дотку гонял.
Что за хуйня? Рили, нужно в конторке накатить кое какой стафф, а инета там нет. А ставить библиотеки на питон без пайпа гемморой какой то.
Некорректное ТЗ. 6 единиц из 6 будет считаться успехом или нужно строго 1 единица из 6 и 2 из 12?
Парень, сделай пустой venv, установи всё, что надо, сделай freeze и скачай нужные колёса.
Поясню, на одной пека там стоит все нужное. USB заблочены злым сисадмином. Можно только по внутреннй сети передать файлы. Советы накатить линукс/водяры/колесики приберегите для...да нене бериге, нахуй они никому тне нужны.
Вкатываюсь в Питон для решения личных задач(до этого только быдлокодил в вузе на С, легко с методичками), какие подводные?
Компилятор не палит ошибки в синтаксисе/долго привыкать к синтаксису? Много ли уйдёт часов, после которых я буду писать хоть что-то внятное?(ну, условные те же вузовские задачи)
Ну и соси тогда, долбоёб.
Великолепно, что мне и нужно.
Ну блять, если хочешь заниматься машинным обучением — ебашь математику и вот это всё говно, сам не знаю, но говорят, без высшей математики никуда, а если сайты будешь делать, то нахуя?
Ну смотри, короче. В питоне нет смертоносного ромба смерти, потому что все атрибуты получаются справа налево из перечисленных родительских классов. А супер позволяет указать их какого родительского класса получать атрибут
Значит, super>rank, suit?
Бэлдеж
Это старая запись, так уже не пишут.
>>1075201
Слева направо, ёпту.
https://ru.wikipedia.org/wiki/C3-линеаризация
Спасибо за видас. Годный лектор.
vasya 7
ffg 7
tfgf 5
tolya 3
и выводить победителя с минимальным количеством попыток в игре.
Был написан "парсер", который преобразовывает все добро из файла в словарь.
d = {}
for line in open('/home/d7/first_game_log.txt'):
line = line.split('\n')
line = line[0]
line = line.split(' ')
line[1] = int(line[1])
d[line[0]] = line[1]
Не до конца понял что делает "line = line[0]", можете пояснить?
Чуть позже добрый анон подкинул эту строчку, которая находит и выводит победителя, а именно ключ с минимальным значением:
> best_result = (min(d.items(), key=lambda x: int(x[1])))
Но проблема в том, что я пока туповат и не понимаю как это сработало + меня не устраивал вывод этого значения в виде:
> ['tolya', 3]
Сегодня утром закинулся фенибутом, чутка прозрел и написал вот этот комбайн который выводит значение красиво
https://pastebin.com/iP6LJBXL
> tolya 3
Правда размер в 33 строчки кода на такую примитивную задачу меня не много пугает. Есть ли способ сделать это не так колхозно?
vasya 7
ffg 7
tfgf 5
tolya 3
и выводить победителя с минимальным количеством попыток в игре.
Был написан "парсер", который преобразовывает все добро из файла в словарь.
d = {}
for line in open('/home/d7/first_game_log.txt'):
line = line.split('\n')
line = line[0]
line = line.split(' ')
line[1] = int(line[1])
d[line[0]] = line[1]
Не до конца понял что делает "line = line[0]", можете пояснить?
Чуть позже добрый анон подкинул эту строчку, которая находит и выводит победителя, а именно ключ с минимальным значением:
> best_result = (min(d.items(), key=lambda x: int(x[1])))
Но проблема в том, что я пока туповат и не понимаю как это сработало + меня не устраивал вывод этого значения в виде:
> ['tolya', 3]
Сегодня утром закинулся фенибутом, чутка прозрел и написал вот этот комбайн который выводит значение красиво
https://pastebin.com/iP6LJBXL
> tolya 3
Правда размер в 33 строчки кода на такую примитивную задачу меня не много пугает. Есть ли способ сделать это не так колхозно?
>Интересует именно main_proc и как он связан с остальными.
Формально main_proc идентичен остальным, просто так как там нужно именно следить за его выполнением, я и вынес в отдельную переменную для наглядности (так-то можно было бы и proc[0] использовать)
.join() блокирует текущий (в данном случае главный) тред питона пока не процесс не закончит выполнение (другие треды/процессы продолжают работать). Соответственно, вызывая main_proc.join() я просто жду конца его выполнения.
Как только он завершается, пробегаюсь по списку созданных ранее процессов и убиваю те, что активны.
Если же нужно, чтобы все 3 процесса работали в фоне (т.е. основной поток не ждал выполнения main_proc'а), то всё будет сложнее, но это уже от твоей задачи зависит, события там или какие-то сигналы использовать или просто отдельный тред завести и т.д.
Ну держи — https://repl.it/MchN
4 строки, 36 скобок и оба варианта задачи (как указал >>1075113) решены.
Даже предполагаемое решение через моделирование процесса тоже можно в 7 строк включая импорт и вызов уместить. (Впрочем, не стоит, особенно массив дефолтным аргументом делать, но я хотел максимально уменьшить количество строк. Если кто может ещё решить короче — милости прошу.)
for i in range(сумма_цифр,-1)
print([m]i)
Я правильно делаю?
Но зачем? Вместо использования API антикапчи, люди будут использовать ваш API? Я на сайт к ним зашёл, там же всё до нельзя просто: два вида запросов, 3 типа ответов, всё. Или вы планируете сделать общедоступный интерфейс к оплаченному аккаунту?
И принтеры заправлять мастер, да и стартапе человек не последний
> Тебе что то такое надо?
Да, определенно оно. Достаточно будет про лямбду почитать что бы понять как это работает и самому такое мутить?
Лямбда, контекстный менеджер и открытие файлов в цикле
Ты выучил синтаксис, это не знание языка
Это так и должно быть из-за того, что я на локалхосте?
А какой ты айпи ожидал увидеть на локалхосте?
Спасибо антош, я тогда позже разобрался в принципе и адоптировал твою идею под свой код - спасибо за дополнительные пояснения.
Да для этого даже лутца не надо читать, достаточно по вкусу питона пробежаться.
Ну наверное гораздо проще человеку, при разработке чего-то большого, просто взять готовую библиотеку и использовать ее средства, чем писать методы самому.
P.s. Но я таки не настаиваю, это просто мое виденье и, в принципе, рукапчей оно подтверждается, людей библиотека интересует.
Так я просто не понимаю, что там может быть такого в библиотеке, что упростило бы работу, потому что и так проще некуда. Может я не на ту антикапчу зашёл?
Я смотрел вот этих — https://anti-captcha.com/apidoc/image . И всё, что тут можно сделать, по-моему, так это в функцию с именоваными аргументами запихнуть для простоты. Там работы-то на 10 минут и чужая либа, на мой взгляд, только ограничивать будет, особенно если захотите сделать как-то унифицированный интерфейс для всех трёх видов капч.
А можно ссылку на рукапчу? Хоть посмотрю, что из себя представляло, ведь вполне вероятно, что это я дурак.
Нет, с сервисом ты не ошибься, всё то.
Вот ссылка на бибилотеку для rucaptcha.
https://rucaptcha.com/software/view/python-rucaptcha
В принципе ты в основном прав, но:
1. не делаем ради денег
2. делается ради пракитики в написании чего-то конкретного в группе людей
3. раз пользуются - значит надо.
Ну и я, как уже писал выше, готов с радостью выслушать предложения по написанию софта/бибилиотек/скриптов и реализовать их, либо влиться в дружную или не очень группу с близкими целями.
> предложения по написанию софта/бибилиотек/скриптов
1. Либу для кроссбилда любого пифон проекта в бинарник без зависимостей (пижже, чем пуинсталлер).
> предложения по написанию софта/бибилиотек/скриптов
2. Либу для написания гуя под все оси (включая андроид и айос) без костылей, опять-таки с кросскомпиляцией
> предложения по написанию софта/бибилиотек/скриптов
4. sans io http либу, чтобы всё умела не хуже requests.
Может позже ещё чего допишу. Сделай хотя бы одно и о тебе заговорит весь пифон мир.
>Мне нужно чтобы в уже запущенную программу
Я так понимаю, программа сама никаких данных не запрашивает, так что input() отпадает, тебе нужно асинхронно всё, да?
В таком случае — https://repl.it/MdhU
хуйню в get_input можно на readline().strip() заменить, в принципе.
Нет. Программа как-раз таки запрашивает, ну епта. Хотя, смотря, что в твоем понимании значит "запрашивает". Короче, если без всяких мутных разъяснений, я делаю телеграмм-бота. Теперь понятно?
Посмотрел твой код, нихуя не понял.
Итак, петушки, почему я должен читать ебучего пиздобола Лутца на 1488 страниц и упражнениями для детей с задержками в развитии, вместо божественного Саммерфильда, который четко с вертушки поясняет за питон с охуенными упражнениями?
sans io, долбоёб.
Читай что хочешь, только сюда не пиши.
Мда, проблемы ты описываешь, конечно. Так бы и сказал, что текст обрабатывать не умеешь. И как ты только бота сумел написать, не зная о сплите?
Ожидаемо. Только забыл объяснить почему то, что работает у автора и скопированно без изменений - не работает у меня.
У тебя питон третий, а статья автора из пещерных времён, он использует второй.
В третьем питоне принт только функция, нужно вызывать print(malafya).
> Марк Саммерфилд — «Python на практике»
Спасибо, уже качаю. Там книженция за 2014 или 2009 год ?
не знаю зачем, но я уже скачал твоего саммерфильда. Впрочем, читаешь любую книгу за вечер, и идешь кодить, гуглишь по необходимости, а не зазубриваешь 16 способов сгенерировать случайное число, хотя я за 2 года кодинга не разу не использовал случайные числа. Учить надо избирательно, а не все подряд, а подходит в этих книгах именно такой, сесть на все стулья, и нихуя не уметь.Но я пробегусь по Саммеру, ибо у того же Лутца не нашел ничего, чего бы я не знал, не читая книг.
Ну просто взял и без задней мысли написал. Я думал, что сплит всегда разделяет посимвольно./spoiler]
Лел, я написал"*кот" а отформатировалось так.
Так я не умею. С чего начать-то? Именно парсинг откртой странички.
Может уже есть наработки готовые
beautiful soup
https://yadi.sk/d/tArKKuQu3Kejuq
Скрапинг веб-сайтов с помощью Python
Про вторую часть не знаю, но там наверняка что-то простое.
Слова с определенным префиксом - это уже к регулярным выражениям. Можно им онлайн попрактиковаться.
https://regexr.com/
https://regex101.com/
Кстати еще есть scrapy. Он вроде еще больше для этого подходит.
Советую лучше в сторону юзерскриптов на javascript'е смотреть, если именно в браузере что-то делать надо, а не скачивать странички в скрипте.
Мой личный опыт говорит, что лучшая книга по ЯП должна быть похожа на k&r не фанбойство и не синдром утенка, т.е. иметь следующую структуру:
1. Несколько коротких глав, которые поверхностно описывают синтаксис ЯП. Т.е. прочитав их ты можешь писать относительно простые, но, тем не менее, довольно полезные программки. Авторы, которые не делают такое введение сами ограничивают себя: поскольку читатель не знаком с основами языка, то и задачи он решать не может на нем, а значит ему и упражнения нельзя давать -- как он их решит, если условные операторы описываются на 370 странице, а циклы на 470? лутц-хуютц А если нет практики, то это не учебник, а хуита;
2. После каждой главы должны быть упражнения. Они не должны быть слишком легкими типа сложи два числа и выведи результат на stdout, но и не сильно сложными как в кнуте, где ты над ними можешь размышлять неделями. Они должны довольно быстро решаться после каждой главы за вечер не сильно подготовленным читателем, но чтобы была необходимость немного подумать;
3. Ну и в конце желательно кратко описать стандартную библиотеку;
Именно такова книжка Саммерфилда. К сожалению, она постепенно устаревает и он вроде бы не планирует ее обновлять. Лутц -- это ебаная хуетень. 1600 страниц по пистону без упражнений и там нет даже описания stdlib -- он же ебнутый! Книги по яве занимают меньше на самом деле хорстманн и корнелл описывают именно синтаксис явы страницах на 400, дальше там уже описание стандартной библиотеки и фреймворков Нет, серьезно, Лутц -- это хорошее пособие как не надо писать книги по языкам программирования. Если нет упражнений -- сразу закрывай эту книгу, она тебя ничему не научит. Просто не понимаю зачем эти люди пишут книги, если они не понимают таких базовых вещей. Причем этот ебанько же еще и преподаватель там какой-то!
Вот этот дело говорит. Я, честно говоря, начинал изучать пипидон с книги Доусана "Программируем на Python". Там все объяснялось на примерах простейших игр, но все было органично для человека, который вообще не умел программировать. То есть, там с азов (что такое переменная и т.д.) дошло до классов и распределенных ссылок, причем я даже змейка написал сходу (три дня писал).
Не могу найти этот самый инвалид кэректер.
>>1075812
Раз такое дело, двощ, помоги мне еще немного. Сразу напоминаю: я ньюфаг в программировании.
Как можно автоматизировать создание комманды? Типа, если принята такая-то команда(текст), выполнить такой-то код, без дохуища ифов на каждый случай. Что-то мне подсказывает, что для этого нужно использывать классы и всю вот эту вот хуйню, но я в этом не силен.
commands = {
'command1': do_hui,
'command2': do_pizda,
'commandN': do_n,
}
result = commands.get(command, command_not_found)()
бля, проглядел код
Бамп вопросу.
Не понял. А если у меня там больше 1 строки на команду? Напиши нормально, так, чтобы запустить можно было, буду благодарен.
>Напиши нормально, так, чтобы запустить можно было, буду благодарен.
Да ты охуел, сам пиши, епта.
>Саммерфилд
О, спасибо за наводку. Лутца бросил читать через страниц 100 из-за постоянного повторения всего, хаотичной системы написания и отсутствия каких-либо задач в конце глав. А после прочтения Укуса питона осталось много вопросов, которые хотелось бы, чтобы были более "разжеваны".
В связи с тем что я тупенький назрела небольшая проблема https://ideone.com/689ixQ
Первый вариант задачи с вайлами работает нормально, а через фор я не могу ее реализовать.
На выходе получаю список длинной 3,4,5 и не понимаю почему так, через вайлы получаю все 6 элеметов как и задумывалось.
for i in range(1,len(x)+1) и прочие штуки пробовал, поясните где я проебываюсь!
Ну анончик. Это всего пара строчек. Только тебя это займет 5 минут, а у меня - час.
Так качай скилл, что бы и у тебя занимало 5 минут, там ничего сложного нет.
Я тебя уверяю, что если ты в проблеме разберешься сам, это будет НА ПОРЯДОК да, именно в 10 раз полезней, чем спиздить решение из интернетов или у анона.
> А если нет практики, то это не учебник, а хуита;
> После каждой главы должны быть упражнения
Всегда бесили упражнения после глав. И так же всё понятно, нахуя ещё доёбывать читателя?!
Так я не просто, блджад, копирую и вставляю. Я представляю себе в голове как это все работает, что-то догугливаю, дочитываю, и использую потом это. На данный момент я даже что гуглить не знаю, как я могу что-то сам сделать?
ищи lxml для винды
Можно ли записать
if b in a[1:2] or a[12]: ?
Если да, то как правильно?
Сейчас выдаёт: IndexError: range object index out of range
>Саммерфильд
для типочка который только слегка вкатился (циклы, кортежики, словрики итд) пойдет ?
>range создает список
>python3
Nyet. range создаёт итерируемый объект типа range. Да, в какой-то степени можно как со списком обрщаться, но рано или поздно кто-то попытается в него что-то за-append'ить.
>>1076242
А самую главную ошибку и не исправил. Не, конечно, реалистично, что 12 месяцев зима, а остальное — лето, но всё же.
>>1076213
Пойду по порядку.
1. Про рендж выше прочти, прими к сведению.
2. Range содержит элементы до N не включительно, т.е. последий элементй range(12) — 11, и имеет он индекс 11, потому что у нас тут не lua индексация списков и прочего начинается с нуля.
2. Условие if x in a or b выполняется если либо x находится в a, либо если b, эм, Truthy (т.е. не 0, не False, не пустой список, не пустая строка и т.д.). То есть, эта строка не проверяет, содержится ли x в b.
3. Если ты берёшь один индекс, а не слайс списка (т.е. a[12]), то получаешь ты не список, который можно проверить на содержание чего-либо, а только один элемент, и проверять уже на равенство нужно.
Спасибо.
Попытка №2.
https://ideone.com/emuadE
И сразу 2 вопроса:
1) При значении 11 выдаётся неверный ответ.
2) Можно как-то оптимизировать код? А то elif'ов много.
А при 2, 5 и 8 верный, что ли? Последний индекс при слайсе не включается, т.е [1:2] даст список с одним элементом, под индексом 1.
Пройди ты хоть часовой курс для новичков какой-нибдуь, совсем ведь не понимаешь, что и как тут происходит.
>2) Можно как-то оптимизировать код? А то elif'ов много.
Потом, лучше пока с происходящим разберись. Так-то задачу в 1 строку решить можно.
Но декабрь 12-ый месяц же, не?
И я снова за помощью
Задача: Нужно упорядочить список.
Программа получает на вход число участников олимпиады N. Далее идет N строк, в каждой строке записана фамилия участника, затем, через пробел, набранное им количество баллов.
Пример входных данных:
3
Ivanov 15
Petrov 10
Sidorov 20
Выведите список участников (только фамилии) в порядке убывания набранных баллов
Sidorov
Ivanov
Petrov
Мой код:
#n = int(input())
#newList = []
#for i in range(n):
# myList = str(input())
# newList.append(myList)
#print(" ".join(map(str,newList)))
вопрос Как отсортировать по баллам?
Словарь
>Как отсортировать по баллам?
Разделить введённую строку на имя и баллы. Можешь обратиться за помощью к пишущему чуть выше бота в телеграм.
Ну а дальше сортируешь по баллам, читай доки к функции sort, конкретно об аргументе key. (https://docs.python.org/3.6/howto/sorting.html , там даже пример прям под тебя есть)
board[guess_col[guess_row]] = "X"
Два чая.
board[guess_col][guess_row] ="X"
Есть короче 3 функции, 2 из них написанны, одну надо самому напистаь.
Пример одной из написанных в идеоне f(s)
Нужно написать такую функция, чтобы изменяла начальный список по функции f(s). Сам список состоит из строк. Сама функция возвращает длину финального списка.
Последняя функция неизвестная, но по сути просто мапит моя написанную функцию с их тест кейсами (вроде бы)
Вроде бы всё просто и я это написал, но у них проходит только половину тест кейсов, что можно придумать?
https://ideone.com/2YAgvZ
Олсо, если очень хуево объяснил, то вот на инглише:
Assumes L is a list of strings
Assume function f is already defined for you and it maps a string to a Boolean
Mutates L such that it contains all of the strings, s, originally in L such
that f(s) returns True, and no other elements. Remaining elements in L
should be in the same order.
Returns the length of L after mutation
Чувак, ты не то качаешь
https://www.ozon.ru/context/detail/id/4562082/
Вот книга, о которой речь.
Не должен, писал же уже выше.
list(range(...)) делай, если так уж нужен именно список.
>проходит только половину тест кейсов
Ну там входные данные зафейленных или хоть что-нибудь есть?
Я первым делом читаю доки.
Но там во всех примерах списки в которых кортежи. Крч не получается =(
>родственному
А это какой? Родительский, ты имел в виду или что-то другое?
https://repl.it/MgeB В нормальном питоне super() фактически эквивалентен super(<ЭтотКласс>, self)
>>1076564
>списки в которых кортежи.
Ну так и ты сделай себе кортежи из своих строк, в чём проблема? >>1075812
#n = int(input())
#myList = []
#for i in range(n):
# a = tuple(input())
# myList.append(a)
#print(myList)
Он тогда по симыольно их читает и я хз как отедльно в каждом кортеже склеить слова и отделить цифры. К тому же это неизменяемый объект.
Крч я туплю.
Ну блядь, ну единственная упомянутая функция в посте же.
"ab cd ef 20 50".split(" ") # ["ab", "cd", "ef", "20", "50"].
Не забудь цифры из строк в числа перевести.
>немного
Увы, совсем не немного. Честно, я бы помог, но ты даже не пытаешься, какой толк ресурс клавиш на клаиватуре расходовать?
А не обосрался ли ты с () при создании словарика? Командочки-то выполнятся сразу!
>>1076651
Тебе потому что нужно до функций бы дойти, а то эти фразы о "код выполнить".
Есть команда, при её получении нужно что-то сделать. Хуярим это "что-то" в функцию, а затем при получении команды вызываем эту функцию (заодно и с аргументами играться можно будет).
Чтобы не хуярить ифы и упростить добавление/удаление команд, можно и воспользоваться словарём, в котором ключ — команда, а значение — функция.
Далее, получаем текст команды и делаем
>funkciya = slovar'_komand[komanda]
>funkciya()
(ну или в одну строку без переменной, как крутые поцики).
Ясно?
> А не обосрался ли ты с () при создании словарика? Командочки-то выполнятся сразу!
Ну-ка захуярь без них.
Ну вот же https://repl.it/Mh3t
Нет, у тебя код работает, да, потому что ты принтишь содержимое словаря, но толку от этого? Результат ведь был получен при запуске программы, то есть его можно было бы сразу вывести и всё, он ведь уже никогда не изменится.
>>1076696
Так, а если все это усложнить тем, что мне нужно в этих функциях для команд использовать отправку сообщения, в которую нужно подать ид чата, которое берется из отдельной функции, которая запускается каждый раз, когда приходит любое сообщение? Я блядь пиздец запутался уже. Видимо придется хуярить говнокод с кучей ифов.
Так откуда команда приходит? Из сообщения? Кто (где) вызывает?
У тебя приходит сообещние (с id) -> парсится команда -> вызывается функция, привязанная к этой команде -> она что-то делает и потом отсылает сообщение в чат, id которого был получает вместе с сообщением, так? Ну так и и передавай этот id в функцию, вызываемую на третьем шаге.
>говнокод с кучей ифов
Ну это не так уж и плохо, сам питон держится на более чем 2к-строчным switch'е.
>Ну это не так уж и плохо, сам питон держится на более чем 2к-строчным switch'е.
А еще он держится на словарях, так что нехуй городить забор из if-ов, а суй все в словарь, как тебе выше говорили. Да и Гвида так делать велел.
> Ну так и и передавай этот id в функцию, вызываемую на третьем шаге.
Получается я в каждой функции должен добавить параметр чат ид?
Короче, вот примерно так выглядит конструкция отправки сообщения на сообщение в моем апи для телеги:
https://pastebin.com/yEGRZdfi
суть такова - там нужен будет канвас, на котором можно будет как в пейнте рисовать по точечно простые фигуры. нужно чтобы можно было переопределить поведение правой кнопки мышки.
ну как-то так, короче.
post.image.path
'/home/user/PycharmProjects/imageboard/media/images/120.jpg'
post.image.url
'/media/images/120.jpg'
в темплейтах пишу
<img src="{{ post.image.url }}">
в консоли при загрузке страницы пишется
Not Found: /media/images/120.jpg
ЧЯДНТ?
>Получается я в каждой функции должен добавить параметр чат ид?
Ну да. Или вовсе весь message туда передавай, явно потом пригодится. Ник писавшего там вытащить, рейтинг его, статус и т.д.
Я не знаю, что там твои функции делают, но вот как-то так можно, например: https://pastebin.com/a5Pzfzi9
>почему допустим имя функции func_name может быть любым вообще, и почему она сразу выполняется
Потому что ты докоратором @bot.message_handler привязал именно эту функцию к событию получения сообщения.
Просто красивый и удобный способ, на деле получается, грубо говоря что-то такое:
>def func(): pass # твоя функция
>bot.on_message = func # декоратор делает вот это
># ... бот получает сообщение
>bot.on_message(message) # вызывается твоя функция
>но я не могу в левых функциях брать этот message
Потому что это локальная переменная только для этой функции, и после исполнения она удаляется.
>bot.on_message(message) # вызывается твоя функция
То есть, в коде псевдо-либы написано дословно "bot.on_message(message)", и что будет присвоено этому атрибуту, то и вызовется.
Естественно, на самом деле там всё сложнее и с кучей дополнительных вещей, но суть такая.
Ну поясните где я дебил-то?
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
#models.py
image = models.ImageField(blank=True, null=True, upload_to='images')
Not Found: /media/images/apps.png
[16/Oct/2017 19:35:03] "GET /media/images/apps.png HTTP/1.1" 404 2859
При том, что картинка загружается и находится там где и должна быть пикрил 2
Дебил ты там, где докментацию не читаешь.
https://docs.djangoproject.com/en/1.11/howto/static-files/
Даже понять не можешь, что в ссылке у тебя /media/... вместо http://localhost/media...
Вот теперь более менее понятно, но подожжи, разве в функциях наверху в send_message не должно быть message, вместо message.chat.id, а в хэндлере в ифе - message.chat.id вместо message?
Я ведь правильно понял, что в словаре - имена функций без скобок и параметров, а в хэндлере уже они вызываются и добавляются скобки с параметром? Крутая фича.
Нет, ты.
Либо этот мудак нормально прописывает директорию со статикой и сбирает URL на коленке, либо прописывает GET-обработчик для модели и дергает ссылку через дргой built-in: https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#url
Ещё здесь абсолютный путь вместо относительного:
> MEDIA_URL = '/media/'
из базы: инжынер асутп, норм уровень прогания в матлабе, понимание sql и отсутствие практике, знания в мат статистике (регрессии мнк монте карло)
заканчиваю магу по асутп.
https://docs.djangoproject.com/en/1.11/ref/settings/#media-root
Ты сам то открывал доки?
Всё что надо было сделать это добавить юрлы по типу
url(r'^media/(?P<path>.*)$', serve, {'document_root': MEDIA_ROOT})
или
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Я рассчитываю придумать что-то новое, например, управление голосом.
Pygame
С меня как всегда..
Спасибо.
А теперь подскажите сайт с задачками по python. Половину Лутца прочитал, думаю, что нужна практика, пока теорию не забыл. Вчера решил все отсюда: https://developers.google.com/edu/python/exercises/basic
в общем, нужны задачки от простых к более сложным. У Лутца заданий нет ну и фиг с ним
> или всё говно мамонта и нужно инсталяшить?
Ну как бэ проект без требуемых бибилотек не запустится. Если не хочешь засирать основу - просто установи его в виртуальном окружении.
Решил заюзать PyInstaller и параметр --key и охуел от результата - 770mb метров стал весить пакет, из 36kb.
Как можно снизить объём пакета в pyinstaller`e?
Или может чем другим воспользоваться для этой цели?
Вопросы в следующем:
Возможно ли это сделать исключительно на питоне?
Нужно ли это делать исключительно на питоне, или лучше идти и учить попутно жабаскрипт и аякс?
Какой веб-сервер лучше использовать, апач+wsgi или родной питоновский?
Или вообще воспользоваться джангой?
> Возможно ли это сделать исключительно на питоне?
Нет.
> Нужно ли это делать исключительно на питоне, или лучше идти и учить попутно жабаскрипт и аякс?
Если собираешься в веб, то необходимо.
> Какой веб-сервер лучше использовать, апач+wsgi или родной питоновский?
WSGI, да.
> Или вообще воспользоваться джангой?
Она не для этого. Есть фласк, торнадо, aiohttp.
О спасибо, через три дня будет фотошоп.
Не то, чтобы я прям собираюсь в веб, мне бэкенд милее, но некоторое представление о том, что происходит "по ту сторону" таки иметь нужно.
Спасибо за ответы.
>не должно быть
Ну, эм, как хочешь делай. Я передавал весь message, поэтому и .chat.id потом. Ты можешь только айди передавать. Странный вопрос.
>Я ведь правильно понял
Да.
Дописать в нем нужный код в исходники не проблема, но как это сделать, чтобы при деплое на сервер тоже работало?
имтортировать нужную модель в settings.py и в ней перезаписывать? или как еще можно кастомизировать сторонний пакет с учетом того, что мне потом это заказчику на сервак нужно заливать?
>но одна из моделей не поддерживает один из нужных мне параметров (byweekday: FR(+1)).
наследуйся и этот парамтер свойством запили или как там будет удобнее
>WSGI, да.
WSGI это не веб-сервер, это протокол сообщения между веб-сервером и приложением (Gateqay interface).
WSGI- серверы это Gunicorn и uwsgi, бери любой
А когда и где наследоваться? Этот метод используется во встроенной админке - мне надо перезаписать его сразу же после старта джанги. Я могу это сделать уже в одном из своих аппов в app.ready()?
Есть код: https://ideone.com/nWpUua
Всё работает, но хотелось бы сделать так, чтобы после идла в 5 секунд, открывался браузер (а точнее embed окно ютуба в браузере (обычная html страница, которая сделана через питон)).
Как пример прикрепил скрин.
webbrowser у меня работает (страница с этим скриптом открывает отдельно документ, где есть код html страницы)
https://ideone.com/IdL5Wv
В том, что он открывает в другом окне, а не уже на открытой странице embed окошко.
Ну тогда пиши вебсервер и жс клиент.
Куда пожелаешь, туда и пиши, чего ты.
Я б в json(ключ страница, а значения - линки писал или в БД(зависит от планов дальнейших).
Или ты о чем?
Ой все, ладно, удачи, няша.
Задача:
Даны два списка чисел, которые могут содержать до 100000 чисел каждый. Посчитайте, сколько чисел содержится одновременно как в первом списке, так и во втором.
Я знаю как ее решить.
НО как решить ее в 1 строчку?
Под психотропными вещами.
Будучи визуалом.
напиши плиз эту строчку чтобы до меня нашло
и будет тебе тонна добра
но это не точно
#print(len(set(input().split()) & set(input().split())))
Все свежим воздухом подышал
отпустило
спасибо
Видать не до конца отпустило то.
Мимо 33-lvl SQL прогер решил перекотиться на эти-ваши пайтоны.
Синтаксис освоил, пайтон челендж дошел до 15 задания.
Кодирую овер 10 лет, в ООП могу, но в веб технологиях не шарю дальше простых .Net сервисов.
Вопрос- куда копать, чтоб за разумное время (неск. месяцев) выйти на уровень пайтон джуниора?
[code]
def f1(i):
return i + i
[/code]
Хотелось бы это описать как-то типа:
[code]
def f1(i: Number) -> Number:
return i + i
[/code]
Потому что она имеет смысл для любого численного типа.
Счастливого пути!
https://ideone.com/vStM2l
>Ты дба что ли?
Я сеньор скуль кодер.
С каким таким опытом? Опыт как опыт, а главное меня этот скуль задолбал хуже горькой редьки.
Да и в скулях, к примеру, 150 000 потолок, а у питоноебов так, серединка.
И еще меня подкупает, что стильно, модно, молодежно, перспективно.
Возможно меня не так поняли.
Входные данные два числа, между которыми один из знаков +,-,,.
> Чему равен "abc".find("Z")? А чему "abc".rfind("Z")?
Допустим такие значения а="100110".find("")
b="100110".rfind("")
Т.к. "" один, то a==b, в данном примере это значение смешения - 4
>Возможно меня не так поняли.
Нет, это вы меня не так поняли.
>expr = "1 - 1";
Выполнится ли условие if expr.find("+") == exor.find("++")?
Привет. Подскажите пожалуйста какую-нибудь книгу/статью и так далее по архитектуре приложений. Все это время читал книжки, писал небольшие программки, но о мысли построить что-то более менее крупное (да тот же бложик или небольшое оконное приложение) обсираюсь. Не знаю с чего начать. Есть вообще литература по теме?
Я тут посмотрел, что выведет и немного не понял. Можете за это пояснить?
https://ideone.com/rLGeuz
Ага, особенно если учесть, что последний индекс у этой строки будет 5. Вообщем понятно, что Питончик найдет пустую строку везде, "" in "python" => True
>Вообщем понятно, что Питончик найдет пустую строку везде
Все найдут. Налито ли в стакане 0мл водки? а 0мл колы?
> str.find(sub[, start[, end]])
>Return the lowest index in the string where substring sub is found within the slice s[start:end].
find возвращает не индекс элемента (потому что можно искать и больше одного символа, то есть "abcd"["abcd".find("ab")] != "ab"), а индекс, начиная с которого будет найдена искомая строка. "" будет найдено, если начнёшь смотреть с первого элемента.
>"" будет найдено
Точнее, будет найдно сразу.
Иными словами, если подстрока найдена, то выполняется следующее условие:
string[string.find(substring):string.find(substring) + len(substirng)] == substring.
тут все верно, но пустая строка находится по тому же индексу, где и не пустой элемент, с rfind и вовсе вылазит за длину строки https://ideone.com/rLGeuz
Вообщем с js такая же фигня. Выглядит так, как будто поиск по пустой строке сдвигает все элементы, а в случае rfind, она втуливается за пределы длинны элемента. Хотелось бы посмотреть на внутреннюю реализацию этого механизма.
Через темплейт теги, или что там было?
Вот с find все боль мень понятно, по тому механизму, что ты описал, он ее сразу находит, ибо он везде найдет ее, и длина у нее нулевая, поэтому возвращает нулевой индекс. Но какого в rfind, она вылазит за длину, у пустой строки нулевая ведь длина.
Запили через контекст процессор, но процессор же передает во все темплейты, а мне по сути только в базовый добавить плюс тот что был.
Можно как-то сделать чтобы просто добавить в ещё один темплейт, а не во все?
>Но какого в rfind, она вылазит за длину
Ну, грубо говоря, последняя пустая строка — после 5-ого элемента. То есть, этот 5-ый элемент не должен входить в последний слайс строки, содержащий в себе пустую строку.
Просто представь, что пустая строка есть везде, перед и после каждого элемента. Затем замени её на какой-то конкретный элемент:
>"abc!".rfind("!") # 3
теперь заменяем "!" на пустую строку
>"abc".rfind("") # ??
последня пустая строка точно там же, где раньше был восклицательный знак, а значит и вернуть нужно 3.
>Хотелось бы посмотреть на внутреннюю реализацию этого механизма.
Прошу: https://github.com/python/cpython/blob/master/Objects/stringlib/fastsearch.h#L245
Обход начинается с индекса равного длине строки (т.е. 6 в твоём случае), как и заканчивается при прямом find'е там же (i <= w). Это если аргумент end не был указан, иначе начинается/заканчивется на нём.
Ну и
string[string.rfind(substring):string.rfind(substring) + len(substirng)] == substring
тоже остаётся справедливым, несмотря на как бы выходящий за рамки индекс.
Спасибо, Анон. Все подробно разобрал и ссылочку приложил. Добра тебе.
> expr = "1 - 1";
> То есть, expr.find("+") == expr.rfind("+")
То же что и -1==-1 => True
Т.к. "+" в приведенной строке и вовсе отсутствует.
Я не сердитый, просто не надо бояться, бери и делай, разбивай на подзадачи, гугли, рефакторь и т.д.
Don`t ссать, anon.
Ок!
Не знаю, зачем ты на это ответил (и кто именно ответил), но это было намёком тому анону (тебе?) на причины неработоспособности кода (любое выражение без минуса попадало в ту ветку).
работаю с nodejs, подумываю попробовать поковырять питона
>Чем API на джанго (или каком либо другом питоновом фреймворке) лучше APIя на express.js?
Ничем.
Анон, какова вероятность, что на собеседование python junior у меня будут просить написать сортировку петушком или обход какого-нибудь дерева?
А то я пока язык учил и мелкопроекты фрилансил всё забыл нахуй.
Вероятность большая. Как бэ все это не относится к языку, это основы программирования.
Ну конкретно об этом я и думал. Спасибо, пойду вспоминать.
zlib.decompress(data)? Ты б хоть что-то о проблеме сказал, или вообще файлик скинул.
Это тебе только по началу так кажется.
Я запилил эту форму, чтобы отправляла без перезагрузки коменты, но чтобы их увидеть теперь надо перезагрузить страницу.
Не отправляйте в жс тред плиз, подскажите лучше где прочитать об этом.
Вот, попробуй пожалуйста распаковать, а то у меня видимо zlib наебнулся или вроде того.
http://rgho.st/7SXMtwytn
>подскажите лучше где прочитать об этом.
В гугле, очевидно. Без JS'а ты никакой ajax не сделаешь.
Да я не знаю что гуглить.
пишу how to reload page with ajax
предлагает location.reload() а это просто перезагрузка как через ф5
Я ж правильно понимаю, что там где блок success нужно что-то дописать и всё будет обновляться? Только что ?
https://pastebin.com/06BzcV8p
>how to reload page with ajax
Зачем reload? Вся суть ajaч'а отсутствии необходимости перезагружать.
https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started
>>1078333
>Я ж правильно понимаю
Да.
>Только что ?
Ну, а что тебе надо? Создать новые html элементы с полученными данными, полагаю.
> Ну, а что тебе надо? Создать новые html элементы с полученными данными, полагаю.
Спасибо, я так и подумал, написал:
success: function (data) {
$("#post").html(data);
},
Теперь всё работает, но только форма почему-то дублируется.
При том, что форма не входит в этот айдишник.
Ну это уже в жс треде тебе кто-нибудь (возможно и я, лел) поможет.
Как посчитать количество неповторяющихся слов в тесте?
И посоветуй литературу/манула по обработке тестовой инофрмации.
Добра тебе.
Офигеть ты тупой. Или школьник?
Читаешь слово из текста
Проверяешь, что такого слова нет в массиве отсеянного
Кладешь слово в массив отсеянного
Читаешь слово из текста...
Длина твоего массива - твой ответ.
Это если прям в тупую.
len(set(text.split())) перед этим текст от всякого пунктуационного говна и чисел сам почистишь.
set делает дистинкт.
#import sys
#b = set()
#for line in sys.stdin.readlines():
# for word in line:
# if word not in b:
# b.add(word)
#print(len(b))
Я такую дичь придумал.
Но ответ не тот.
Как очистить текст от знаков препинания?
Регулярочкой.
Ну ты бы хоть гуглить начал, а то не серьёзно.
from collections import Counter
c = Counter()
text_to_parse = 'Саб двач есть одна тян...'
for i in text_to_parse.split(' '):
c += 1
non_repeated = [w for w, n in c.items() if n == 1]
python3.6 возвращается кортеж со словарём:
> ({'ru': 'Настройки', 'ua': 'Налаштування'},)
очевидно, что я хочу в контексте выставить сразу язык и обращаться к атрибутам с ним. т.е. если пользователь выбрал 'ru', то всё меню на русском (menu.settings, а не menu.settings['ru'].
> ({'ru': 'Настройки', 'ua': 'Налаштування'},)
Посмотри внимательно на мой код и убери ненужную запятую.
> сли пользователь выбрал 'ru', то всё меню на русском
Надо подумать
Ну вот хуй знает, у меня только такое:
1. либо метод пиши который тебе из словаря вернёт русские элементы
2. либо пили конфиг с элементами и дёргай нужный тебе, типа with open('ru_elem.json') и отпавляй данные в приложение.
я функционально запилил, но не очень нравится. но да, можно меню хранить в няшном джейсоне https://hastebin.com/ogetiseyow.py
> menu[item][lang]
Ну бля, по факту - тоже самое, только ты в функцию всё унёс.
Но вообще люди, обычно, всякую такую инфу в конфиг выносят и всё, что бы отделить.
p.s. Что пилишь?
сраный бот для телеги. попросили 2 языка. можно банально словарём, но захотелось эстетики
Я молю тебя анон о помощи
Очень долго сижу над задачей
расписал подробнее
https://ideone.com/QihelG
>print(len(set(text.split()) & set(text.split())))
Интересен ход твоей мысли, как ты дошел до такого?
>выдает 20. Почему?
Пикрл.
>>1078721
>set(text.split()) & set(text.split())
?? Ты ищешь пересечения множества с самим собой??
>#выдает 20. Почему?
Очевидно, потому что значение переменной text на 16-ой строке совсем не равно тому. чему ты думаешь. Ну запринти ж ты его, чёрт возьми! Посмотри, что readlines() вообще возвращает (спойлер: хуй тебе, самостоятельный уже.).
>книги по отлаживаю
Ну или хотя бы книги, которые начинаются со слов: "Если что-то работает не так, но очевидных мыслей нет: вставь print() между каждой строкой кода."
Попробуй это, там после каждой главы идёт отладка типичных ошибок + задания.
>>1078728
#import sys
#text = sys.stdin.readlines()
#myString = ''.join(text)
#print(len(set(myString.split()) & #set(myString.split())))
Всем спасибо за наставления.
Я справился.
Насчет пересечения множетсва с самим собой то
я такое нарыл в гугле и оно работает.
Как можно было написать иначе?
Если вам несложно. Ради интереса.
> Я справился
> Насчет пересечения множетсва с самим собой то
я такое нарыл в гугле и оно работает
> написать иначе?
Лол, кинь ссылку что ты в гугле нарыл, молю!
>ВАЖНО
ИТАК, имеется База Пастухова(txt файл с ключевыми словами яндекса , около 1 миллиарда строк). Как средствами питона или библиотек, эфективно читать файл и делать выборку нужных фраз?
>Но работало же. лол.
Потому и работало, потому что ничего не делалось.
>>1078733
>Я бы с удовольствием почитал вменяемую литературу.
Вот тебе тут посоветовали -> >>1078731 (Я ж не для себя спрашивал, лол).
>Ответ 20 потому что там пустая строка в конце \n ?
Нет. Потому что
>Посмотри, что readlines() вообще возвращает
Дурак. Но не совсем :D
Просто, я подкопил денег работая в аду. Думаю уволиться и поизучать питон и может потом найти нормальную работу...
Это копия, сохраненная 12 ноября 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.