Автогенерация определенного количества полей ввода
Недавно начал учить питон. Встала следующая задача: необходимо на основе введенной переменной, создать несколько полей ввода (вводится количество слоев материала, а должны вывестись поля, куда можно вписать характеристики каждого слоя). Реально ли это каким-то образом сделать с помощью Tkinter? Заранее благодарен за ответ:)

import tkinter as tk

some_variable = 5

root = tk.Tk()

for n in range(some_variable):
    tk.Label(root, text='Автоматически созданное поле №' + str(n)).grid(row=n, column=0)
    tk.Entry(root).grid(row=n, column=1)

root.mainloop()


Как в django избежать зависания на функции mail.send_mail
Когда я пользуюсь функцией send_mail() из djanog.core.mail, приложение останавливается и ожидает пока ответит указанный сервер почты. Мне это не нравиться и я могу позволить себе не ждать результатов выполнения.
<code>
def index(request):
    send_mail('subj','mes','[email protected]',[request.GET.get('email_to')])
    return render(request,'index.html')
</code>
Как мне избежать зависания на функции send_mail?

Короткий ответ: в теории то что Вы хотите возможно, но есть более правильный вариант.

Наиболее верный вариант.
Django синхронный framework. Для того что бы выполнять почтовые рассылки вы должны использовать очередь (RabbitMQ или аналоги) которая гарантирует сохранность события и smtp сервер для отправки письма.
Threading.
В питоне есть модуль для многопоточного программирования. В теории через него Вы сможете отправлять письма без задержек. Но это довольно опасная дорога, ведь при больших нагрузках на вашем сервере будут создаваться новые потоки для каждого отправления, к тому же в случае аварийного выключения сервера, вы потеряете всю очередь отправки писем.


неудовлетворяющий вывод при использовании цикла for со списками на Python
окей, если я записываю

s= ["a", "b", "c"]
f=["aa","bb","cc"]
all_thing=[]
for s in s:
    s=s.upper()
    all_thing.append(s)
for f in f:
    all_thing.append(f)
    print(all_thing)

то мне выдает:

['A', 'B', 'C', 'aa']
['A', 'B', 'C', 'aa', 'bb']
['A', 'B', 'C', 'aa', 'bb', 'cc']

а по сути должно быть
['A', 'B', 'C', 'aa', 'bb', 'cc']
подскажите пожалуйста, что я делаю не так.

s= ["a", "b", "c"]
f=["aa","bb","cc"]
all_thing=[]
for s in s:
    s=s.upper()
    all_thing.append(s)
for f in f:
    all_thing.append(f)
print(all_thing) # отступ в этой строке надо убрать

У вас просто
print три раза выполняется


Проверка текущей даты на <=
Допустим у нас есть дата разблокировки игрока:

date_unban = "2023-03-03 15:15:25.501796"

Как мне проверить если текущая дата меньше или равняется дате разблокировки?
Что то по типу:

if datetime.datetime.now() <= date_unban

In [7]: import datetime

In [8]: date_unban = "2023-03-03 15:15:25.501796"

In [9]: py_date = datetime.datetime.strptime(date_unban, '%Y-%m-%d %X.%f')

In [10]: py_date
Out[10]: datetime.datetime(2023, 3, 3, 15, 15, 25, 501796)

In [11]: datetime.datetime.today() <= py_date
Out[11]: True

datetime.datetime.strptime
Или:

In [4]: from dateutil.parser import parse  # pip install python-dateutil

In [5]: parse(date_unban)
Out[5]: datetime.datetime(2023, 3, 3, 15, 15, 25, 501796)


Подсчет частоты вхождения пар значений в строках DataFrame
Всем привет!
Интересует как правильно и красиво написать python code.
Возможно ли для решения ниже приведенной задачи использовать только функции pandas или другие библиотеки и не использовать циклы for/while?
Как написать с помощью for я знаю, но решение мне кажется громозким.
Задача - для всех возможных комбинаций букв AB, AC, ..., XY, XZ, YZ подсчитать в скольких строках встречалась каждая комбинация букв. Буквы в строках предварительно надо отсортировать по возрастанию и по условию задачи буквы в строке не могут повторяться.
Из результата нужно выбрать 10 наиболее часто встречаемых пар букв.
Входные данные

A, B, J, K
B, E, P, A
R, Z, A, B
K, L, M, A
X, A, J, K

Результата запроса

A,B,3
A,J,2
A,K,3
B,J,1
B,K,1

и т.д.

Сначала нам понадобятся все комбинации пар столбцов:

import numpy as np
import pandas as pd
from itertools import combinations

cc = list(combinations(df.columns,2))

получилось:

In [39]: cc
Out[39]: [(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)]

теперь можно найти все встречающиеся пары букв:

t = np.concatenate([np.sort(df.loc[:, c], axis=1).sum(1) for c in cc])

получилось:

In [43]: t
Out[43]:
array(['AB', 'BE', 'RZ', 'KL', 'AX', 'AJ', 'BP', 'AR', 'KM', 'JX', 'AK', 'AB', 'BR', 'AK', 'KX', 'BJ', 'EP', 'AZ', 'LM', 'AJ', 'BK', 'AE', 'BZ', 'AL', 'AK', 'JK', 'AP', 'AB', 'AM', 'JK'],
      dtype=object)

теперь можно воспользоваться
collections.Counter:

from collections import Counter

res = Counter(t).most_common(10)

результат:

In [46]: res
Out[46]:
[('AB', 3),
 ('AK', 3),
 ('AJ', 2),
 ('JK', 2),
 ('BE', 1),
 ('RZ', 1),
 ('KL', 1),
 ('AX', 1),
 ('BP', 1),
 ('AR', 1)]

Также можно создать Series из
t и воспользоваться стандартными методами Pandas вместо испольования
collections.Counter:

s = pd.Series(t)
res = s.groupby(s).size().nlargest(10)

результат:

In [49]: res
Out[49]:
AB    3
AK    3
AJ    2
JK    2
AE    1
AL    1
AM    1
AP    1
AR    1
AX    1
dtype: int64

Исходный DataFrame:

In [51]: df
Out[51]:
   0  1  2  3
0  A  B  J  K
1  B  E  P  A
2  R  Z  A  B
3  K  L  M  A
4  X  A  J  K


Как исправить Command "python setup.py egg_info" failed?
Когда пытаюсь запушить на heroku то выдает такую ошибку:
<code>
Complete output from command python setup.py egg_info:
remote:            This backport is for Python 2.7 only.
remote:
remote:            ----------------------------------------
remote:        Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-7w4exzcs/functools32/
remote:  !     Push rejected, failed to compile Python app.
remote:
remote:  !     Push failed
</code>

Либо перенести код на Python 3, либо создать окружение на втором питоне.
Вы же видите:
<code>
This backport is for Python 2.7 only
</code>
На heroku в файле runtime.txt указывается версия питона, насколько мне известно.


Python. Подзначение словаря
Я получаю словарь с информацией. Вот отрывок кода:

{
"id": 241623849,
"first_name": "Екатерина",
"last_name": "Миглан",
"is_closed": false,
"can_access_closed": true,
"city": {
"id": 244,
"title": "Витебск"
}

Вот таким образом я получаю параметр город(по фамилии):

dv = {item.get('last_name'): item.get('city') for item in ju['profiles']}

Это работает, но выдаёт 2 значения: id и title, подскажите как заставить выудить именно title, без id.

Использовать метод
get возвращёнyого словаря

{item.get('last_name'): item.get('city').get('title') for item in ju['profiles'] if 'city' in item}


Что означает item? [дубликат]

На этот вопрос уже даны ответы здесь:

Объясните как работает цикл for

                                (2 ответа)

Закрыт 4 года назад.

<code>
chars = [ 'A' ,'B' , 'C' ]

print('\nElements:\t' , end = ' ' )
for item in chars :
    print( item , end = ' ' )
</code>
Объясните, пожалуйста, как это работает.
Я вообще не понимаю, что значит "item", и откуда оно вообще взялось, этого элемента ведь нет в списке. Эта какая-то функция языка?

item - это переменная, в которой на каждой итерации оказывается элемент списка (
list)
chars.

for item in chars - цикл по элементам массива
chars (1-ая итерация -
item='A', 2-ая итерация -
item='B' и тд. )

print - функция вывода на экран, которая на каждой итерации будет выводить один элемент списка (
item) и пробел за ним (тут указан
end=' ', по умолчанию
end='\n')
В результате выполнения кода будет выведено:

Elements: A B C


Можно создать словарь с фамилиями в качестве ключей и со значениями
is_closed:

ds = {item.get('last_name'): item.get('is_closed') for item in ju['profiles']}

Теперь можем получать из словаря значение
is_closed по фамилии:

print(ds[fam])


Почему не показывает нужную кодировку из csv? Python 3
Загружаю csv файл в кодировке utf-8 (кодировку поставил через notepad++).
При открытии файла csv и  вывода строки показывает это:
Р”Р»РёРЅР°:РЎС‚Р°РЅРґР°СЂС‚РЅС‹Р№ (L)
а должен это:
Длина:Удлиненный (L)
<code>
with open("./xls/mainCSV_utf.csv") as f_obj:
   read_csv(f_obj)

def read_csv(f_obj)
  reader = csv.DictReader(file_obj, delimiter=';')
  for line in reader:
    print(line["value"])
</code>

Нужно указать кодировку файла при его открытии
<code>
with open("./xls/mainCSV_utf.csv", encoding='utf-8') as f_obj:
</code>
или будет использована системная. В случае несовпадения системной с фактической, получите кракозябры.


Суммирование значений столбца для каждой группы и вывод группы с максимальным значением
Бьюсь с одной проблемой уже не первый час. У меня есть признак
hour часы(его я создал в скрипте в коде это есть) и есть признак
views просмотры. Мне необходимо определить действительно ли опубликованные статьи в 12 часов дня набирают больше всего просмотров? Всего часов у меня в признаке
hour от 0 до 23.
Выполняю следующие действия:

df[(df['hour'] == 12)]['views'].value_counts().max()

и мне выдаёт ответ 94.
Далее выполняю:

df[(df['hour'] == 13)]['views'].value_counts().max()

и вижу что уже 99.
Таким образом задачу я решил))) ответил на вопрос что статьи опубликованные в 12 часов дня не набирают больше всего просмотров. Но решил я путем того что вручную менял значение времени в скрипте. Подскажите пожалуйста как можно это выполнить без этого ручного перегона?
Вот весь исполняемый скрипт:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.read_csv('howpop_train.csv')
#Избавимся сразу от переменных, названия которых заканчиваются на _lognorm
df.drop(filter(lambda c: c.endswith('_lognorm'), df.columns),
    axis = 1,       # axis = 1: столбцы
    inplace = True) # избавляет от необходимости сохранять датасет
#Создадим несколько столбцов на основе данных о времени публикации:
df['published'] = pd.to_datetime(df.published, yearfirst = True)
df['year'] = [d.year for d in df.published]
df['month'] = [d.month for d in df.published]
df['dayofweek'] = [d.isoweekday() for d in df.published]
df['hour'] = [d.hour for d in df.published]

#СТРОКА КОДА КОТОРАЯ РЕШАЕТ ПОСТАВЛЕННЫЙ ВОПРОС
df_mode_public = df[(df['hour'] == 12)]['views'].value_counts().max()
print(df_mode_public)

value_counts() считает не сумму значений, а количество элементов - например, можно посчитать количество троек.
У меня получилось, что статьи опубликованные в 12 часов дня имеют больше всего просмотров. Я использовал ваш код и дальше сгруппировал датафрейм по часам и просуммировал просмотры в каждой группе.

views = df.groupby('hour')['views'].sum()

Результат:

hour
0      71574141
1      55793066
2      39370785
3      28620488
4      22746228
5      14653279
6      22379317
7      27457105
8      40356336
9      82958032
10    128170279
11    160061962
12    177152709
13    171944260
14    165019258
15    151460266
16    156445444
17    136846168
18    124982145
19    105027594
20     95351805
21     83486794
22     86409148
23     82567593
Name: views, dtype: int64

И нахождение максимального значения:

views.nlargest(1)

Результат:

hour
12    177152709
Name: views, dtype: int64


Как написать периодически выполняемую функцию для бота?
Хочу добавить в telegram бота функцию, с помощью которой он сможет в определенное время раз в сутки отправлять пользователю какой-то текст, вот пример:
<code>
now = datetime.datetime.now()
today = now.day
hour = round(now.hour, 2)

while True:
    if today == now.day and (hour > 22.00 and hour < 23.00):
        bot.send_message(CHAT_ID, random.choice(welcomes))
        today += 1
    else:
        time.sleep(3600)
</code>
Этот код не работает, он полностью перекрывает весь остальной функционал. Подскажите , как можно реализовать такую цикличную функцию,или же исправить эту?

Создайте отдельный поток и в нем выполняйте ваш цикличный код:
<code>
from threading import Thread
import datetime
import time
import random

WELCOMES = [...]
CHAT_ID = ...

def schedule_loop(bot):
    now = datetime.datetime.now()
    hour = now.hour
    print('hour:', hour)

    while True:
        if hour in [22, 23]:
            bot.send_message(CHAT_ID, random.choice(WELCOMES))

        time.sleep(3600)

bot = ...

# Создаем новый поток и в нем запускаем нашу функцию:
Thread(target=schedule_loop, args=(bot,)).start()
</code>


Как указать в Python чтобы аргументом функции был именно список
Когда я передаю аргумент в функцию, как я понимаю, функция не понимает с каким именно типом данных я хочу работать. Суть вопроса в том, могу ли я указать явно, чтобы в функцию в качестве аргумента передавался именно список/словарь/кортеж... и в теле функции я работал именно со списком/словарем/кортежем...?
Вот что у меня получается:
<code>
def print_magicians (magicians):
    for magician in magicians:
        print(magician)

def great_magicians (magicians):
    for i in range(len(magicians)):
        temp = magicians[i]
        magicians[i] = "Great " + temp

magicians_list = ["Гудини", "Коперфильд", "Блейн"]
print_magicians(magicians_list)

great_magicians(magicians_list)
print_magicians(magicians_list)
</code>
Функции def great_magicians (magicians) я в качестве аргумента принимает или ожидает любой тип данных (не знаю как правильно выразиться) и в итоге не могу с ним работать как со списком (вызывать его методы). А если, допустим, туда передадут не в качестве аргумента не список, а строку или число, то что получиться ? После Си подобных языков в которых была строгая типизация не очень все понятно.

Вам нужен @functools.singledispatch

from functools import singledispatch

@singledispatch
def main(args):
    raise TypeError("Unacceptable data type")

@main.register(dict)
def _(args):
    print("That\'s dict!", args)

@main.register(list)
def _(args):
    print("That\'s list!", args)

main({1: 2})
main([1, 2])
main(10)

Вывод:

That's dict! {1: 2}
Traceback (most recent call last):
That's list! [1, 2]
  File "C:/Users/ypank/py_proj/main.py", line 21, in <module>
    main(10)
  File "C:\Users\ypank\AppData\Local\Programs\Python\Python36\lib\functools.py", line 803, in wrapper
    return dispatch(args[0].__class__)(*args, **kw)
  File "C:/Users/ypank/py_proj/main.py", line 6, in main
    raise TypeError("Unacceptable data type")
TypeError: Unacceptable data type


Python Tornado не могу понять как правильно оформить coroutine в новом стиле (async/await). По новому не работает
Добрый день господа программисты прошу помощи. Сам что то не могу разобраться. Честно пробовал это сделать, поратил полдня и не получилось.
У меня есть код socket-клиента и он работает так как я хочу, но в нем я использую (from tornado import gen    и    @gen.coroutine). А это не рекомендуется введите сюда описание ссылки

Native coroutines are the recommended form whenever possible. Only use decoratedcoroutines when compatibility with older versions of Python is required.

Вот код моего клиента:

from tornado.ioloop import IOLoop, PeriodicCallback
from tornado import gen
from tornado.websocket import websocket_connect
import time

class Client(object):
    def __init__(self, url, timeout):
        self.url = url
        self.timeout = timeout
        self.ioloop = IOLoop.instance()
        self.ws = None
        self.connect()
        PeriodicCallback(self.keep_alive,1000).start()
        #PeriodicCallback(self.keep_alive, 20000, io_loop=self.ioloop).start()
        self.ioloop.start()

    @gen.coroutine
    def connect(self):
        print ("trying to connect")
        try:
            self.ws = yield websocket_connect(self.url)
        except Exception:
            print ("connection error")
        else:
            print ("connected")
            self.run()

    @gen.coroutine
    def run(self):
        while True:
            msg = yield self.ws.read_message()
            if msg is None:
                print ("connection closed")
                self.ws = None
                break
            print("from server: {}".format(msg))

    def keep_alive(self):
        if self.ws is None:
            self.connect()
        else:
            self.ws.write_message("Hello")

def report():
    try:
       if time.time() - report.T > 2:
        report.T = time.time()
        print (round(report.T-report.start_value))
    except AttributeError:
        report.T = time.time()
        report.start_value = time.time()

if __name__ == "__main__":
    PeriodicCallback(report,100).start()
    client = Client("ws://localhost:8881", 5)

И теперь я захотел модифицировать код клиента согласно новым правилам принятым в Python 3.7.
У меня получилось вот что:

from tornado.ioloop import IOLoop, PeriodicCallback
from tornado.websocket import websocket_connect
import time

class Client(object):
    def __init__(self, url, timeout):
        self.url = url
        self.timeout = timeout
        self.ioloop = IOLoop.instance()
        self.ws = None
        self.connect()
        PeriodicCallback(self.keep_alive,1000).start()
        #PeriodicCallback(self.keep_alive, 20000, io_loop=self.ioloop).start()
        self.ioloop.start()

    async def connect(self):
        print ("trying to connect")
        try:
            self.ws = await websocket_connect(self.url)
            return self.ws
        except Exception:
            print ("connection error")
        else:
            print ("connected")
            self.run()

    async def run(self):
        while True:
            msg = await self.ws.read_message()
            if msg is None:
                print ("connection closed")
                self.ws = None
                break
            print("from server: {}".format(msg))

    def keep_alive(self):
        if self.ws is None:
            self.connect()
        else:
            self.ws.write_message("Hello")

def report():
    try:
    if time.time() - report.T > 2:
        report.T = time.time()
        print (round(report.T-report.start_value))
    except AttributeError:
        report.T = time.time()
        report.start_value = time.time()

if __name__ == "__main__":
    PeriodicCallback(report,100).start()
    client = Client("ws://localhost:8881", 5)

Но, вот, после такой модификации мой код перестал работать.
И вот что я вижу в консоле.

    PS C:\workspace_ilya\polyna> cd 'c:\workspace_ilya\polyna'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:\Users\BenisovichIS\AppData\Local\Programs\Python\Python37\python.exe' 'c:\Users\BenisovichIS\.vscode-insiders\extensions\ms-python.python-2019.1.0\pythonFiles\ptvsd_launcher.py' '--default' '--client' '--host' 'localhost' '--port' '52425' 'C:\workspace_ilya\sandbox\tornado_client_1.py'
C:\workspace_ilya\sandbox\tornado_client_1.py:15: RuntimeWarning: coroutine 'Client.connect' was never awaited
  self.connect()
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
C:\workspace_ilya\sandbox\tornado_client_1.py:43: RuntimeWarning: coroutine 'Client.connect' was never awaited
  self.connect()
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
2
4
6
8

Под дебаггером я вижу, что программа в мою ф-цию  connect() вообще не заходит.
Странно почему так происходит.
Ребята объясните мне пожалуйста почему так происходит, если вам не сложно?

Запуск клиента при инициализации - не очень хорошая идея. Эту часть я бы перенес в конец файла.
Выполнение async функции создает объект, который ещё не исполнен, который можно передать разным исполнителям или запустить на главной очереди (тут asyncio_loop, ioloop - это обертка). Выражение create_task ставит выполнение функции на следующую итерацию loop. Потом self.ioloop.start() начинает крутить очередь и корутина выполнится.
Можно попробовать так ( loop.run_until_complete не подойдет так как блокирует):

self.ioloop.asyncio_loop.create_task(self.connect())

Можно ещё запустить connect через
asyncio.ensure_future(self.connect()).add_done_callback(fu), но не уверен что это легально в торнадо.
Посмотрите ещё IOLoop.add_future()
И вызов корутины из корутины должен выполняться через await.

await self.run()

await прерывает выполнение текущей корутины, ставит в очередь новую корутину. Как только она выполнится выполнение текущей возобновится.


Как подать массив данных Y из обучающей выборки на вход классифирующей модели?
Есть модель, нужно подать данные (массив входных и выходных значений) так, чтобы модель классифицировала данные, и указать нужную функцию активации на последнем слое и функцию потерь. То же самое сделать для Унитарно кодированного вектора на выходном массиве данных.
(
[0,0,1] первое значение,
[0,1,0] второе значение,
[1,0,0] третье значение)
Во всех статьях и книгах данные загружаются уже готовые из репозиториев, но если создавать собственные данные то возникает проблема.

    import tensorflow as tf
import numpy as np
from keras.models import Sequential
from keras.layers import Input, Dense, Activation
from sklearn import preprocessing
model=Sequential()
X = np.array([[40, 80, 30, 60], [100, 40, 20, 80], [90, 190, 10, 15]])
Y = np.array([[0], [1], [2]])

model = Sequential()
model.add(Dense(16, input_shape=(X.shape[1],)))
model.add(Activation('relu'))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(3))
model.compile(loss='mean_squared_error', optimizer='Adamax', metrics=['mae'])

model.fit(X,Y,batch_size=3,epochs=1000,
          verbose=1)
a=np.array([40, 80, 30, 60]);
   reshy =a.reshape((1,- 1))
print("test")
print(reshy)
prediction = model.predict(reshy)
print('prediction')
print(prediction)

То что вы пытаетесь сделать называется
Multilabel Classification. В этом случае массив
Y необходимо преобразовать к
One-Hot-Encoded виду:

from keras.utils import to_categorical

Y = to_categorical(Y)

чтобы получилось:

In [76]: Y
Out[76]:
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]], dtype=float32)

Кроме этого надо будет изменить архитектуру НС:

model = Sequential()
model.add(Dense(4, input_shape=(X.shape[1],), activation='relu'))
model.add(BatchNormalization())
model.add(Dense(20, activation='relu'))
model.add(Dense(3, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='Adamax', metrics=['acc'])

NOTE: обратите внимание на
loss-function:
loss='categorical_crossentropy' и функцию активации на последнем слое:
activation='softmax'.
Вывод:

...
Epoch 47/50
3/3 [==============================] - 0s 0us/step - loss: 0.3294 - acc: 1.0000
Epoch 48/50
3/3 [==============================] - 0s 0us/step - loss: 0.3226 - acc: 1.0000
Epoch 49/50
3/3 [==============================] - 0s 2ms/step - loss: 0.3158 - acc: 1.0000
Epoch 50/50
3/3 [==============================] - 0s 0us/step - loss: 0.3091 - acc: 1.0000
test
[[40 80 30 60]]
prediction
[[0.5021875  0.297052   0.20076045]]

Весь код:

import tensorflow as tf
import numpy as np
from keras.utils import to_categorical
from keras.models import Sequential
from keras.layers import Input, Dense, Activation, BatchNormalization
from sklearn import preprocessing
model=Sequential()
X = np.array([[40, 80, 30, 60], [100, 40, 20, 80], [90, 190, 10, 15]])
Y = np.array([[0], [1], [2]])

Y = to_categorical(Y)

model = Sequential()
model.add(Dense(4, input_shape=(X.shape[1],), activation='relu'))
model.add(BatchNormalization())
model.add(Dense(20, activation='relu'))
model.add(Dense(3, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='Adamax', metrics=['acc'])

model.fit(X,Y,batch_size=3,epochs=100,
          verbose=1)
a=np.array([40, 80, 30, 60]);
reshy =a.reshape((1,- 1))
print("test")
print(reshy)
prediction = model.predict(reshy)
print('prediction')
print(prediction)


Создать DataFrame с десятью столбцами из списка с 1150 элементами
Имеется список из 1150 элементов и готовый датафрейм с 10 столбцами. Необходимо вбить 1-ый, 11-ый, 21-ый, и так далее элемент в первый столбец датафрейма; 2-ой, 12-ый и тд во второй столбец, аналогично с остальными элементами.
<code>
data = pd.DataFrame(columns = ['0','1','2','3','4','5','6','7','8','9']) #готовый датафрейм

resultlist = ['71', '45', '18', '77', '64', 'Moy', '12', '92', '21' ...] #список
</code>


Python. Выуживание числа из списка [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

 Учебные задания допустимы в качестве вопросов только при условии, что вы пытались решить их самостоятельно перед тем, как задать вопрос. Пожалуйста, отредактируйте вопрос и укажите, что именно вызвало у вас трудности при решении задачи. Например, приведите код, который вы написали, пытаясь решить задачу

Закрыт 4 года назад.

                        Улучшить вопрос

Я совсем зелёный.
Мне нужно вытянуть конкретные
member_id из списка и вписать их в переменную, создав свой список из подряд идущих
member_id.
Вот что я получаю, а из этого мне нужны только числа из
member_id:

{
  "response": {
    "items": [{
      "member_id": 489569031,
      "join_date": 1544905304,
      "invited_by": 489569031,
      "is_owner": true,
      "is_admin": true
    }, {
      "member_id": 344648652,
      "join_date": 1531169722,
      "invited_by": 489569031,
      "can_kick": true
    }, {
      "member_id": 381682064,
      "join_date": 1532985294,
      "invited_by": 489569031,
      "can_kick": true
    }, {
      "member_id": 419089414,
      "join_date": 1535742950,
      "invited_by": 489569031,
      "can_kick": true
    },

То есть, что бы из этого вышло вроде:

489569031,344648652,381682064,419089414

src = {
  'response': {
    'items': [
      { 'member_id': 123456 },
      { 'member_id': 123457 },
    ]
  }
}
ids = [item['member_id'] for item in src['response']['items']]


как оставить в одном из полей dataframe только числовые значения больше нуля?
<code>
df[df[cols] > 0]
</code>
выдает ошибку

'>' not supported between instances of 'str' and 'int'

Попробуйта так:

df[pd.to_numeric(df[cols], errors='coerce') > 0]

Пример:

In [25]: df
Out[25]:
   id            col
0   1             12
1   2  blah-blah_123
2   3              0
3   4              7

In [26]: df[pd.to_numeric(df['col'], errors='coerce') > 0]
Out[26]:
   id col
0   1  12
3   4   7


Как заполнить массив числами от 1 до Н?
Я изучаю Python. К примеру я вожу число '5', мне должен вывести ответ '1 2 3 4 5', или вожу 3, тогда ответ '1 2 3'. Так так сделать?

<code>
n = input('Введите число: ')
nums = list(range(1, int(n) + 1))
print(*nums)
</code>
Крайне рекомендую изучать по учебнику, так как для новичка очень важна правильная и систематизированная подача материала.


бесконечный запуск двух функций через разный интервал python
Есть функция main() которая запускается каждые 15 сек. и есть функция main2 которая должна запускаться раз в 600 сек, подскажите как реализовать независимую и параллельную работу двух этих функций, пробовал через
<code>
while True:
time.sleep(30)
main()
</code>
но если добавить вторую функцию, то работа будет последовательнй

from functools import wraps
from threading import Timer

def periodic(delay):
    def decorator(f):
        @wraps(f)
        def wrapper(*args, **kwargs):
            f(*args, **kwargs)
            Timer(delay, wrapper, args=args, kwargs=kwargs).start()
        return wrapper
    return decorator

@periodic(15)
def f1(msg):
    print(msg)

@periodic(600)
def f2(msg):
    print(msg.upper())

f1('test')
f2('proverka')


Pandas дописывание в конец CSV файла
Есть вот такой csv файл

,Date,Model,Mark
0,2019-02-15,Q2612X,HP
1,2019-02-15,TK-1150,Kyocera
2,2019-02-15,MP2000,Ricoh
3,2019-02-26,CE255X,HP

Дописываю в конец файла

import pandas as pd

columns = ['Date', 'Model', 'Mark']

data = [
['2019-02-28', 'Q2612X', 'HP']
]
df = pd.DataFrame(data, columns=columns)
df.to_csv(r'cart.csv', mode='a', header=False)

Строка дописывается

,Date,Model,Mark
0,2019-02-15,Q2612X,HP
1,2019-02-15,TK-1150,Kyocera
2,2019-02-15,MP2000,Ricoh
3,2019-02-26,CE255X,HP
0,2019-02-28,Q2612X,HP

Но индекс принимает нулевое значение. Подскажите как реализовать продолжение индекса.

Проще всего отказаться от записи индекса вообще:
<code>
df.to_csv(..., index=False)
</code>
При чтении такого CSV файла Pandas автоматически создаст индекс, начинающийся с нуля.


Перестали работать миграции Django
Каким то макаром очистилась папка migrations в моём Django приложении и теперь
manage.py makemigrations пишет что изменений нет, хотя они есть... Как починить это дело?
Django 2.1 версия

Сделать бэкап БД.
Удалить БД
Сделать makemigrations
Применить миграции
Сделать бэкап таблицы django_migrations
Восстановить БД
Восстановить таблицу django_migrations


События пользовательского QGraphicsRectItem в PyQt5
Создал свой QGraphicsRectItem, но проблема в том, что у него не срабатают методы на события с наведением мыши.
Код:
<code>
import sys

from PyQt5.QtCore import Qt, QRectF
from PyQt5.QtWidgets import \
    QGraphicsScene, QGraphicsRectItem, QGraphicsView, QMainWindow, QApplication

class CustomRectItem(QGraphicsRectItem):

    def mousePressEvent(self, event):
        print('mousePressEvent')

    def mouseReleaseEvent(self, event):
        print('mouseReleaseEvent')

    def hoverMoveEvent(self, event):
        print('hoverMoveEvent')

    def hoverLeaveEvent(self, event):
        print('hoverLeaveEvent')

    def hoverEnterEvent(self, event):
        print('hoverEnterEvent')

class CustomScene(QGraphicsScene):
    def __init__(self, parent=None):
        super(CustomScene, self).__init__(QRectF(-500, -500, 500, 200), parent)
        rect = CustomRectItem()
        rect.setRect(50, 50, 50, 50)
        rect.setBrush(Qt.green)
        self.addItem(rect)

class Window(QMainWindow):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.scene = CustomScene(self)
        view = QGraphicsView(self.scene, self)
        view.setSceneRect(0, 0, 500, 200)
        view.setGeometry(0, 0, 600, 300)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = Window()
    mainWindow.setWindowTitle('App')
    mainWindow.setGeometry(50, 50, 800, 500)
    mainWindow.show()

    sys.exit(app.exec_())
</code>

Вызовите у элемента метод setAcceptHoverEvents, тогда события hover будут обрабатываться:
<code>
class CustomRectItem(QGraphicsRectItem):
    def __init__(self):
        super().__init__()

        self.setAcceptHoverEvents(True)

    def mousePressEvent(self, event):
        print('mousePressEvent')

    def mouseReleaseEvent(self, event):
        print('mouseReleaseEvent')

    def hoverMoveEvent(self, event):
        print('hoverMoveEvent')

    def hoverLeaveEvent(self, event):
        print('hoverLeaveEvent')

    def hoverEnterEvent(self, event):
        print('hoverEnterEvent')
</code>


Python создание csv файла
Создаю
csv файл для учета картриджей

import csv

with open('cartridge_accounting.csv', 'w') as csvfile:
    filewriter = csv.writer(csvfile, delimiter=',',
    quotechar='|', quoting=csv.QUOTE_MINIMAL)
    filewriter.writerow(['Date', 'Model', 'Mark'])
    filewriter.writerow(['2019-02-26', 'CE255X', 'nv print'])
    filewriter.writerow(['2019-02-26', 'CE255X', 'nv print'])

в итоге файл записывается с пропуском через одну строку

['Date', 'Model', 'Mark']
[]
['2019-02-26', 'CE255X', 'nv print']
[]
['2019-02-26', 'CE255X', 'nv print']
[]

Подскажите как от этого избавиться. И как добавить индексный ряд, чтобы файл выглядел вот так:

['Date', 'Model', 'Mark']
[0,'2019-02-26', 'CE255X', 'nv print']
[1,'2019-02-26', 'CE255X', 'nv print']
[2,'2019-02-26', 'CE255X', 'nv print']
[3,'2019-02-26', 'CE255X', 'nv print']

В документации советуют решать это так
<code>
with open('cartridge_accounting.csv', 'w', newline='') as csvfile:
</code>


Выводит SyntaxError: invalid syntax и не могу понять почему [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

 Вопрос вызван проблемой, которая больше не воспроизводится, или опечаткой. Хотя похожие вопросы могут быть уместны на этом сайте, решение для этого вопроса вряд ли поможет будущим посетителям. Обычно можно избежать подобных вопросов написанием и исследованием минимальной программы для воспроизведения проблемы до публикации вопроса.

Закрыт 4 года назад.

                        Улучшить вопрос

Предистория: Я только начал изучать Python и учусь по книге от Зед А. Шоу "Легкий способ выучить Python". Так вот, там есть задание, которое нужно написать и выполнить в Терминале(я работаю на Маке)
Вот код:
<code>
# -*- coding: utf-8 -*-

import codecs, sys

outf = codecs.getwriter('cp866') (sys.stdout, errors = 'replace')
sys.stdout = outf

age = raw_input("Сколько тебе лет? ")
height = raw_input("Каков твой рост? ")
weight = raw_input("Сколько ты весишь? ")

print "Итак, тебе %r лет, в тебе %r см роста и %r кг веса."  % (age, height, weight)

# Выдает SyntaxError: invalid syntax и стрелка, указывающая на ошибку,
#где-то впереди, где пусто
</code>
Не ругайте строго, если Вам не понравилось, что учусь по этой книге.

Скорее всего, у вас третья версия питона.
Чтобы это проверить, последнюю строчку нужно изменить вот так:
<code>
print("Итак, тебе %r лет, в тебе %r см роста и %r кг веса."  % (age, height, weight))
</code>
Если заработает, то я прав, и вам нужно будет либо поставить себе вторую версию питона, либо заниматься по более современной книжке.


Ограничить количество записей в БД
Как в джанго можно ограничить количество записей, которые могут быть в базе данных? Чтобы, к примеру, если количество записей максимальное, через админку (именно через неё) нельзя было добавить ещё записи.

class SomeModel:
    ...

    def save(self, *args, **kwargs):
        if SomeModel.objects.count() < settings.MAX_SOMEMODEL_COUNT:
            super().save(*args, **kwargs)
        raise ValidationError('Слишком много записей типа SomeModel!')


Decimal/float/int - деление больших чисел
Нужна помощь в решении проблемы больших чисел в Python, а именно деление больших степеней и факториалов. Т.е. при попытке делить условные

(4 ** 512) / (5.5 ** 300)

я получаю

int too large to convert to float

Я пробовал применять decimal, но проблема осталась:

decimal.InvalidOperation: [<class 'decimal.DivisionImpossible'>]

Похожие проблемы при попытке деления больших факториалов:

integer division result too large for a float

Попробуйте использовать Decimal:
<code>
from decimal import Decimal

print(Decimal(4 ** 512) / Decimal(5.5 ** 300))
# 1.399293161342312549090562061E+86
</code>


Получить данные из xml
Есть xml:

<record>
<FIELD.700>
<SUBFIELD.3>10005847</SUBFIELD.3><SUBFIELD.A>Мартыненко</SUBFIELD.A><SUBFIELD.B>А. В.</SUBFIELD.B>
</FIELD.700>
<FIELD.1105>
Статья в журнале
</FIELD.1105>
</record>
<record>
<FIELD.700>
<SUBFIELD.3>10005016</SUBFIELD.3><SUBFIELD.A>Яценко</SUBFIELD.A><SUBFIELD.B>А. С.</SUBFIELD.B>
</FIELD.700>
<FIELD.1105>
Статья в журнале
</FIELD.1105>
</record>

Я пытаюсь получить данные:

def get_statuses(record) -> str:
    statuses = record.find_all("FIELD.1105")
    return statuses

def get_write():
    from bs4 import BeautifulSoup
    root = BeautifulSoup(text, 'html.parser')

    for record in root.select('record'):
        statuses = get_statuses(record)
        print(statuses)

a = get_write()
print(a)

Но почему-то получаю только
None. Подскажите, пожалуйста, в чём моя ошибка?
Желаемый результат:

Статья в журнале
Статья в журнале

Измените функцию так:
<code>
def get_statuses(record) -> str:
    statuses = record.find("field.1105")
    return statuses.text.strip()
</code>


Как вывести изображение в VS Code?
У меня есть небольшой код:
<code>
import pandas as pd
import matplotlib.pyplot as plt

mnist_train = pd.read_csv("mnist_train.csv", header=None)
cols = ["label"]
for i in range(784):
    cols.append(f"px_{i}")

mnist_train.columns = cols
image_size = 28
matrix = mnist_train.values
digit = matrix[0, :]
digit = digit[1:]
digit.shape
image = digit.reshape(28 ,28)
image.shape
plt.imshow(image)
</code>
При запуске программы никакое изображение не появляется. Что необходимо сделать для его вывода?

Добавить
plt.show() в самом конце.


Как сгруппировать по дню и посчитать среднее значение столбца?
Есть документ Excel, в котором присутствуют 2 столбца, 1 = дата и время, 2 = проценты.
Необходимо чтобы считалось среднее значение столбца N для каждого дня (у каждого дня есть несколько строк со временем когда эти значения N были получены),
т.е. в конце работы нужен просто массив со значениями пример:
N=(70, 20, 60,...).
В начале я открываю файл и делаю парс:

import pandas as pd

df = pd.ExcelFile("облака1.xlsx")
df1=df.parse(df.sheet_names[0])

Далее, я хотел делать циклы которые будут пробегать по строкам и смотреть если значения даты из 1 столбца совпадают то мы берём первые 2 цифры из 2 столбца и кидаем в массив, а после как только значение даты меняется мы вычисляем среднее, перекидываем это число в конечный массив N, а наш текущий очищаем и делам всё сначала для текущей новой даты.
В правильном ли я иду направлении или всё это можно сделать гораздо проще?
Файл прикреплён: Файл Excel


Как упростить и уменьшить код?
Начал обучение python и при решение одной задачи, получается очень многострочный код. Какими способами его можно уменьшить или что необходимо использовать, что бы не писать многострочные условия с if'ами?
Сам код:
<code>
print('Заказывайте: шаурма-1, самсы-2, пирожки-3')
    a = int(input())
    if a == 1:
      print('Хорошо, с чем вам шаурму: мясо-1, курица-2')
      eat = int(input())
      if eat == 1:
        first = 'Шаурма с мясом'
      if eat == 2:
        first = "Шаурма с курицей"
        print('Что вы будите пить:чай-1, кофе-2, колу-3, минералку-4 ')
        drink = int(input())
        if drink == 1:
          second = 'Чай'
          print("Вы заказали: %s and %s" % (first, second))
        if drink == 2:
          second = 'кофе'
          print("Вы заказали: %s and %s" % (first, second))
        if drink == 3:
          second = 'кола'
          print("Вы заказали: %s and %s" % (first, second))
        if drink == 4:
          second = 'минералка'
          print("Вы заказали: %s and %s" % (first, second))
</code>

Можно вынести в отдельные функции:
<code>
def choose_meat():
    print('Хорошо, с чем вам шаурму: мясо-1, курица-2')
    return {1: 'Шаурма с мясом', 2: "Шаурма с курицей"}.get(int(input()))

def choose_drink():
    print('Что вы будете пить: чай-1, кофе-2, колу-3, минералку-4')
    return {1: 'Чай', 2: 'кофе', 3: 'кола', 4: 'минералка'}.get(int(input()))

print('Заказывайте: шаурма-1, самсы-2, пирожки-3')
if int(input()) == 1:
    first = choose_meat()
    second = choose_drink()

# elif ...

print("Вы заказали: %s и %s" % (first, second))
</code>


Удалить группы с неполным циклом
Итак, есть исходный DF.
Первый столбец показывает этап , полный цикл 1-5 . Если вдруг в выборке не полный цикл, то удаляются все наблюдения неполного цикла.
То есть на входе есть:

Time    X1  X2
1   5   5
2   6   6
3   4   4
4   6   5
5   5   5
1   5   6
2   6   5
3   5   6
1   4   6
2   6   5
3   5   5
4   6   5
5   5   5

Второй цикл неполный: 1-3, поэтому удаляются все их наблюдения. А на выходе получается:

Time    X1  X2
1   5   5
2   6   6
3   4   4
4   6   5
5   5   5
1   4   6
2   6   5
3   5   5
4   6   5
5   5   5

In [13]: res = df.groupby(df['Time'].diff().fillna(1).lt(1).cumsum()).filter(lambda x: len(x)>=5)

In [14]: res
Out[14]:
    Time  X1  X2
0      1   5   5
1      2   6   6
2      3   4   4
3      4   6   5
4      5   5   5
8      1   4   6
9      2   6   5
10     3   5   5
11     4   6   5
12     5   5   5

Пошагово:

In [16]: df['Time'].diff().fillna(1)
Out[16]:
0     1.0
1     1.0
2     1.0
3     1.0
4     1.0
5    -4.0
6     1.0
7     1.0
8    -2.0
9     1.0
10    1.0
11    1.0
12    1.0
Name: Time, dtype: float64

In [17]: df['Time'].diff().fillna(1).lt(1)
Out[17]:
0     False
1     False
2     False
3     False
4     False
5      True
6     False
7     False
8      True
9     False
10    False
11    False
12    False
Name: Time, dtype: bool

In [18]: df['Time'].diff().fillna(1).lt(1).cumsum()
Out[18]:
0     0
1     0
2     0
3     0
4     0
5     1
6     1
7     1
8     2
9     2
10    2
11    2
12    2
Name: Time, dtype: int32

далее мы можем группировать DataFrame по результату предыдущих манипуляций...


Обработка разных форм Django
Подскажите пожалуйста способ, как мне правильно обрабатывать формы.
То есть у меня в шаблоне есть две разные формы, одна из которых заполняется и данные записываются в БД. Как мне определить, какая форма была заполнена и обработать именно эту форму?

Каждому
submit назначить свое
name (имя), а во
view получать этот
name через POST/GET, в зависимости от того через какой метод у вас отправляется форма, и обрабатывать нужную. Например:

<form>
  ...
  <input type="submit" name="form1" ... >
</form>

<form>
  ...
  <input type="submit" name="form2" ... >
</form>

Затем во
views.py делаем как-то так (напр., форма отправлена через POST):

if 'form1' in request.POST:
    form1 = FormOne(request.POST)
    # ...
else:
    form1 = FormOne()

if 'form2' in request.POST:
    form2 = FormTwo(request.POST)
    # ...
else:
    form2 = FormTwo()

ctx['form1'] = form1
ctx['form2'] = form2

return render_to_response('example/template.html', ctx)


Посчитать среднее по значениям в столбце в python
Итак, есть исходный DF:

Time   x1  x2
0   5   6
1   4   5
2   6   6
3   6   5
0   9   8
1   4   6
2   6   5
3   4   6

Нужно посчитать среднее для x1 и x2 для каждого из значений в Time.
То есть на выходе хочу получить:

Time   x1  x2
0   7   7
1   4   5,5
2   6   5,5
3   5   5,5

Так:
<code>
df.groupby('Time').mean()
</code>


Разница между «<>» и «!=» в Python
Чем они отличаются или же они идентичны? Если различные, то приведите примеры, пожалуйста

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

In [2]: import dis

In [3]: dis.dis("1 != 2")
          0 <49>
          1 SLICE+2
          2 SLICE+3          #  <-----
          3 DELETE_SUBSCR    #  <-----
          4 SLICE+2
          5 DELETE_SLICE+0

In [4]: dis.dis("1 <> 2")
          0 <49>
          1 SLICE+2
          2 STORE_SUBSCR     #  <-----
          3 BINARY_LSHIFT    #  <-----
          4 SLICE+2
          5 DELETE_SLICE+0

В
Python 3.x оператор
<> не определен:

In [39]: 1 <> 1
  File "<ipython-input-39-c52e0c69590a>", line 1
    1 <> 1
       ^
SyntaxError: invalid syntax

но если очень хочется то можно это ограничение обойти:

In [40]: from __future__ import barry_as_FLUFL

In [41]: 1 <> 1
Out[41]: False


Python. Нужно реализовать ввод пользователем своих оценок по предметам с проверкой ввода [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

 Учебные задания допустимы в качестве вопросов только при условии, что вы пытались решить их самостоятельно перед тем, как задать вопрос. Пожалуйста, отредактируйте вопрос и укажите, что именно вызвало у вас трудности при решении задачи. Например, приведите код, который вы написали, пытаясь решить задачу

Закрыт 4 года назад.

                        Улучшить вопрос

Нужно реализовать ввод пользователем своих оценок по предметам с проверкой ввода, что бы в случае, если оценка меньше 2 или больше 5, программа требовала повторить ввод, но только для того предмета , на котором произошла эта самая ошибка. Как это можно сделать?

marks = {}
for subject in ('математика', 'русский', 'химия', 'биология', 'физика'):
    while True:
        try:
            mark = int(input('Введите оценку за предмет {}: '.format(subject)))
            if 2 <= mark < 6:
                marks[subject] = mark
                break
            else:
                print('Ошибка: Число должно быть не меньше 2 и не больше 5!')
        except ValueError:
            print('Ошибка: Введено не число!')


В чем разница между %r и %s в Python?
Объясните, пожалуйста, в чем разница между ними. Я лишь знаю, что %r выводит "сырое" значение. Но можете показать на примере, что он делает?

Вы можете прочитать о различиях тут и здесь. Основной посыл таков:

%r использует функцию
repr для встроенных типов включает в себя кавычки и все специальные символы экранируются

%s использует функцию
str (симметрично
%r)

Пример:

s = "spam"
print(repr(s))
# 'spam'
print(str(s))
# spam

Иными словами,
%s красиво форматирует объект (делает beautify). Чуть более сложный пример для кастомных типов:

import datetime
d = datetime.date.today()
print(str(d))
# '2011-05-14'
print(repr(d))
# 'datetime.date(2011, 5, 14)'


Изменение полей Django flatpages
Могу ли я в админке в форму создания flatpage добавить какие то свои поля? Например мне нужно заместо поля content несколько других текстовых полей. Как это можно сделать? Документацию читал, но допереть всё равно не могу как это работает... Спасибо.

Можно просто унаследовать собственную модель от
FlatPage:

class ExtendedFlatPage(FlatPage):
    additional_field = models.CharField('Дополнительное поле', max_length=100)

@admin.register(FlatPage)
class ExtendedFlatPageAdmin(FlatPageAdmin):
    fieldsets = (
        (None, {'fields': ('url', 'title', 'content', 'additional_field', 'sites')}),
        (_('Advanced options'), {
            'classes': ('collapse',),
            'fields': (
                'registration_required',
                'template_name',
            ),
        }),
    )


django.core.exceptions.FieldDoesNotExist
После выполнения команды
python manage.py makemigrations в папке migrations   создается файл с новой миграцией, однако при выполнении какой либо миграции django выдает ошибку django.core.exceptions.FieldDoesNotExist: CPU has no field named 'series'? Я даже пробовал полностью закомментировать файл models.py и admin.py, потом выполнил команду
python manage.py makemigrationsи в консоли появилось следующее:

(djangoprojects) E:\djangoprojects\djangoshop>python manage.py makemigrations
Migrations for 'computerapp':
  computerapp\migrations\0038_auto_20190224_1506.py
    - Alter unique_together for cpu (0 constraint(s))
    - Remove field category from cpu
    - Remove field core from cpu
    - Remove field series from cpu
    - Remove field socket from cpu
    - Remove field product from gallery
    - Delete model Category
    - Delete model Core
    - Delete model CPU
    - Delete model Gallery
    - Delete model Series
    - Delete model Socket

в папке migrations появился файл с миграцией. Но после команды
python manage.py migrate всё равно появляется та же ошибка. Я также попробовал выполнить
python manage.py migrate <app_name> <migration_name>, но все равно получается тот же результат. Как избавиться от данной проблемы?
Полное содержание ошибки:

Operations to perform:
  Apply all migrations: admin, auth, computerapp, contenttypes, sessions
Running migrations:
  Applying computerapp.0032_auto_20190224_1159... OK
  Applying computerapp.0033_auto_20190224_1240...Traceback (most recent call last):
  File "E:\djangoprojects\lib\site-packages\django\db\models\options.py", line 564, in get_field
    return self.fields_map[field_name]
KeyError: 'series'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "E:\djangoprojects\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "E:\djangoprojects\lib\site-packages\django\core\management\__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "E:\djangoprojects\lib\site-packages\django\core\management\base.py", line 316, in run_from_argv
    self.execute(*args, **cmd_options)
  File "E:\djangoprojects\lib\site-packages\django\core\management\base.py", line 353, in execute
    output = self.handle(*args, **options)
  File "E:\djangoprojects\lib\site-packages\django\core\management\base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "E:\djangoprojects\lib\site-packages\django\core\management\commands\migrate.py", line 203, in handle
    fake_initial=fake_initial,
  File "E:\djangoprojects\lib\site-packages\django\db\migrations\executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "E:\djangoprojects\lib\site-packages\django\db\migrations\executor.py", line 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "E:\djangoprojects\lib\site-packages\django\db\migrations\executor.py", line 244, in apply_migration
    state = migration.apply(state, schema_editor)
  File "E:\djangoprojects\lib\site-packages\django\db\migrations\migration.py", line 124, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "E:\djangoprojects\lib\site-packages\django\db\migrations\operations\fields.py", line 150, in database_forwards
    schema_editor.remove_field(from_model, from_model._meta.get_field(self.name))
  File "E:\djangoprojects\lib\site-packages\django\db\backends\sqlite3\schema.py", line 327, in remove_field
    self._remake_table(model, delete_field=field)
  File "E:\djangoprojects\lib\site-packages\django\db\backends\sqlite3\schema.py", line 266, in _remake_table
    self.create_model(temp_model)
  File "E:\djangoprojects\lib\site-packages\django\db\backends\base\schema.py", line 300, in create_model
    columns = [model._meta.get_field(field).column for field in fields]
  File "E:\djangoprojects\lib\site-packages\django\db\backends\base\schema.py", line 300, in <listcomp>
    columns = [model._meta.get_field(field).column for field in fields]
  File "E:\djangoprojects\lib\site-packages\django\db\models\options.py", line 566, in get_field
    raise FieldDoesNotExist("%s has no field named '%s'" % (self.object_name, field_name))
django.core.exceptions.FieldDoesNotExist: CPU has no field named 'series'

Увы, но проблема решилась только путем удаления всех файлов, кроме файла init.py из папки migrations, а также удаления файла db.sqlite3. После всего этого, заново выполнил команды
python manage.py makemigrations и
python manage.py migrate и только потом заново создал модели, точнее сказать раскоментировал файлы: models.py и admin.py и все заработоло, новые миграции снова начали применяться.


Method Not Allowed: /blog/tag/django
Сайт работает, но при попытке вывести tag_detail и post_detail выдаёт

Method Not Allowed

views.py:

    from django.shortcuts import render
    from django.shortcuts import get_object_or_404
    from django.views.generic import View
    from .models import Post, Tag
    from .utils import ObjectDetailMixin

    def posts_list(request):
        posts = Post.objects.all()
        return render(request, 'blog/index.html', context={'posts': posts})

    class PostDetail(ObjectDetailMixin, View):
        model = Post
        template = 'blog/post_detail.html'
    #   def get(self, request, slug):
    #       post = get_object_or_404(Post, slug__iexact=slug)
    #       return render(request, 'blog/post_detail.html', context={'post': post})

    class TagDetail(ObjectDetailMixin, View):
        model = Tag
        template = 'blog/tag_detail.html'
    #   def get(self, request, slug):
    #       tag = get_object_or_404(Tag, slug__iexact=slug)
    #       return render(request, 'blog/tag_detail.html', context={'tag': tag})

    def tags_list(request):
        tags = Tag.objects.all()
        return render(request, 'blog/tags_list.html', context={'tags': tags})

utils.py:

    from django.shortcuts import render
    from django.shortcuts import get_object_or_404
    from .models import *

    class ObjectDetailMixin:
        model = None
        template = None

    def get(self, request, slug):
            obj = get_object_or_404(self.model, slug__iexact=slug)
            return render(request, self.template, context={self.model.__name__.lower(): obj})

urls.py:

    from django.urls import path
    from .views import *

    urlpatterns = [
        path('', posts_list, name='posts_list_url'),
        path('post/<str:slug>/', PostDetail.as_view(), name='post_detail_url'),
        path('tags/', tags_list, name='tags_list_url'),
        path('tag/<str:slug>', TagDetail.as_view(), name='tag_detail_url')
    ]

models.py:

    from django.db import models
    from django.shortcuts import reverse

    class Post(models.Model):
        title = models.CharField(max_length=150, db_index=True)
        slug = models.SlugField(max_length=150, unique=True)
        body = models.TextField(blank=True, db_index=True)
        tags = models.ManyToManyField('Tag', blank=True, related_name='posts')
        date_pub = models.DateTimeField(auto_now_add=True)

        def get_absolute_url(self):
            return reverse('post_detail_url', kwargs={'slug': self.slug})

        def __str__(self):
            return '{}'.format(self.title)

    class Tag(models.Model):
        title = models.CharField(max_length=50)
        slug = models.SlugField(max_length=50, unique=True)

        def get_absolute_url(self):
            return reverse('tag_detail_url', kwargs={'slug': self.slug})

        def __str__(self):
            return '{}'.format(self.title)

Нужно было поставить tab в utils.py на 9, 10, 11 строке.


низкоуровневое программирование на Python: статус аккумулятора ноутбука [закрыт]

Закрыт. Данный вопрос необходимо конкретизировать. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.

Закрыт 4 года назад.

                        Улучшить вопрос

Я как-то загорелся желанием написать простую программульку на Python. Которая например узнавала статус аккумулятора ноутбука и т. п. Но вот незадача. Python это высокоуровневый язык. Может где-нибудь есть модуль написанный на C который поможет мне с этой задачей. Посоветуйте пожалуйста такие модули, чем больше - тем лучше!

Переносимый код для получения информации о статусе батареи и много другого можно получить с помощью psutil модуля:
<code>
>>> import psutil
>>> battery = psutil.sensors_battery()
>>> battery
sbattery(percent=93, secsleft=16628, power_plugged=False)
</code>


Извлечь текст субтитров из видеофайла
Передо мной стоит задача: извлечь из большого числа видеофайлов субтитры.
Насколько я понимаю, субтитры где-то внутри видеофайла хранятся тупо текстом. Есть ли какие-то библиотеки для питона, которые позволяют извлечь текст субтитров из видеофайла?
Хотелось бы универсального решения для всех популярных видеоформатов (avi, mkv, mp4 итп). Но если посоветуете разные библиотеки для разных форматов, то это тоже поможет мне.

Для подобных целей хорошо подходит FFmpeg. Он поддерживает большую часть современных видеоформатов, с которыми можно ознакомиться тут.
Вызов FFmpeg производится из командной строки или терминала. Для этого достаточно ввести следующую команду:

ffmpeg -i SampleFile.SampleExtension -map 0:s:0 SubtitleName.srt

Также есть готовое решение для MKV.
P.S. Вызов команды в Python осуществляется так:

os.system('Your Command')`


tags = Tag.objects.all() выдаёт ошибку: NameError: name 'Tag' is not defined
Выдаёт ошибку

NameError: name 'Tag' is not defined

у файла views.py на 13 строке.
views.py:

    from django.shortcuts import render
    from .models import Post

    def posts_list(request):
        posts = Post.objects.all()
        return render(request, 'blog/index.html', context={'posts': posts})

    def post_detail(request, slug):
        post = Post.objects.get(slug__iexact=slug)
        return render(request, 'blog/post_detail.html', context={'post': post})

    def tags_list(request):
        tags = Tag.objects.all()
        return render(request, 'blog/tags_list.html', context={'tags': tags})

models.py:

    from django.db import models
    from django.shortcuts import reverse

    class Post(models.Model):
        title = models.CharField(max_length=150, db_index=True)
        slug = models.SlugField(max_length=150, unique=True)
        body = models.TextField(blank=True, db_index=True)
        tags = models.ManyToManyField('Tag', blank=True, related_name='posts')
        date_pub = models.DateTimeField(auto_now_add=True)

        def get_absolute_url(self):
            return reverse('post_detail_url', kwargs={'slug': self.slug})

        def __str__(self):
            return '{}'.format(self.title)

    class Tag(models.Model):
        title = models.CharField(max_length=50)
        slug = models.SlugField(max_length=50, unique=True)

        def __str__(self):
            return '{}'.format(self.title)

urls.py:

    from django.urls import path
    from .views import *

    urlpatterns = [
        path('', posts_list, name='posts_list_url'),
        path('post/<str:slug>/', post_detail, name='post_detail_url'),
        path('tags/', tags_list, name='tags_list_url')
    ]

Добавьте в views.py:
<code>
from .models import Post, Tag
</code>


Почему Python обнуляет срез если индекс среза имеет отрицательное значение?
Подскажите почему обнуляется срез когда я беру отрицательный индекс. И можно ли как то обойти ограничение. Пробовал вместо среза брать числа по индексу и прогонять итерацией - тоже не получается.

c = [1, 2, 3, 4, 5]
x = [c[z-2:z+3] for z in range(len(c))]
print(x)

получается:

[[], [], [1, 2, 3, 4, 5], [2, 3, 4, 5], [3, 4, 5]]

а хотелось бы:

[[1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5], [2, 3, 4, 5], [3, 4, 5]]

Отрицательные индексы считаются индексами с конца списка.

                    0      1      2      3      4    <----- Полоажительные индексы
                +------+------+------+------+------+
 Список ------> |      |      |      |      |      |
                +------+------+------+------+------+
                   -5     -4     -3     -2     -1    <----- Отрицательные  индексы

Например для вашего списка
c и для
z == 0 будет
c[z-2:z+3] == c[-2:3] == c[3:3] == [], потому что индекс
-2 (второй элемент с конца 5-элементного списка) есть его третьим элементом (считая от нуля).
Надо запретить отрицательные индексы:

x = [c[z-2:z+3] if z - 2 >= 0 else c[0: z+3]  for z in range(len(c))]
print(x)

Вывод:

[[1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5], [2, 3, 4, 5], [3, 4, 5]]


Почему в Django обновления в БД не отображаются на сайте при использовании функции get_list_or_404() в контроллере?
После создания, удаления или изменения данных в базе при обновлении станицы никаких изменений не происходит, пока не перезагрузишь серевер. Проблема как я пронял в функции "get_list_or_404()", значение которой я передал в "queryset" контроллера. Если в queryset передать "models.Product.objects.all()", то все изменения сразу видны на сайте после обновления страницы. Версия Django 2.1.7, сервер запущен на локалке.
Может кто подскажет в чем причина?
Код контроллера:

from django.shortcuts import render, get_list_or_404, get_object_or_404, redirect
from django.views.generic import ListView, DetailView
from . import models, forms

class ProductList(ListView):

    context_object_name = 'query'

    template_name = 'products/index.html'

    queryset = get_list_or_404(models.Product)

Код url.py:

urlpatterns = [

    path('', views.ProductList.as_view(), name='list'),

    path('create/', views.ProductCreate.as_view(), name='create'),

    path('<int:pk>/', views.product_detail, name='detail'),]

Шаблон:

{% extends 'master.html' %}

{% load static %}

{% block page_title %}Title{% endblock %}

{% block page_static %}
    <link rel="stylesheet" href="{% static 'products/style.css' %}">
{% endblock %}

{% block page_content %}
    {% for item in query %}
        <div class="item">
            <img src="/media/{{ item.image }}" alt="{{ item.name }}">
            <a href="{% url 'products:detail'  item.id %}">
                <h2>{{ item.name }}</h2>
            </a>
            <h3>{{ item.cost }}</h3>

        </div>
    {% endfor %}
{% endblock %}

В ListView есть атрибут
allow_empty. Если присвоить ему значение
False, то будет вызываться 404 при пустом списке. Попробуйте так:

class ProductList(ListView):
    context_object_name = 'query'
    template_name = 'products/index.html'
    model = models.Product
    allow_empty = False  # Показывать 404, если queryset пустой


Нужно посчитать количество подотрезков массива, у которых количество различных чисел не больше K
Нужно посчитать количество подотрезков массива, у которых количество различных чисел не больше K. У меня есть две функции, первая - возвращает лист всех возможный подотрезков из данного массива, вторая - считает количество различных чисел в подотрезке. Я принимаю на вход N, K, массив N чисел и "склеиваю" все числа массива в одну строку и от нее получаю все сабстринги. А после, считаю такие сабстринги, различность чисел которая не превышает K.
Здесь есть ошибка, но я долблюсь в глаза. Есть ли способ получше решить эту задачу? Спасибо!
<code>
def get_all_substrings(input_string):
    length = len(input_string)
    return [input_string[i:j+1] for i in range(length) for j in range(i, length)]

def count_unique(substring):
    return len(set(substring))

my_input = input().split()
n = my_input()[0]
k = int(my_input[1])
l = [int(x) for x in input().split()]
s = ''
cnt = 0

for el in l:
    s += str(el)

subs = get_all_substrings(s)
for ss in subs:
    c = count_unique(ss)
    if c <= k:
        cnt += 1

print(cnt)
</code>

Используем метод окна с двумя индексами. Создадим структуру для хранения словаря со счётчиками элементов - в Python есть
collections.Counter.
Установим оба индекса в ноль. Двигаем правый индекс, для каждого нового элемента, входящего в окно, обновляем его счётчик в
Counter, проверяем размер
Counter (количество разных элементов с ненулевым счётчиком, назовём его
Distinct). На каждом шаге этого этапа существует
WinLen = right-left+1 хороших подмассивов, заканчивающихся в
right, добавляем
WinLen к результату. Как только
Distinct превысил
K - стоп.
Двигаем левый индекс. Для каждого элемента, уходящего из окна, уменьшаем счётчик. Как только
Distinct (за счёт удаления элементов с нулевым счётчиком) стал меньше
K - стоп.
Повторяем (чередуем) два предыдущих этапа до конца списка/массива.
Алгоритм линейный, т.к. оба индекса движутся только вперёд (+ затраты на Counter)


Маппинг значений списка по DataFrame
Вопрос-следствие: Есть список списков с IP-адресами и сопутствующей информацией, при этом сам ip-адрес всегда стоит под индексом [0], а остальная информация идет после, причем ее количество различно:

lst= [['188.234.164.151',
  'ADDRESS:        STR. SHOSSE KOSMONAVTOV, 111, BLDG. 43, OFFICE 527',
  'ADDRESS:        CJSC "ER-TELECOM HOLDING" TOMSK BRANCH',
  "ADDRESS:        614099 PERM'",
  'ADDRESS:        RUSSIAN FEDERATION',
  'ADDRESS:        SHOSSE KOSMONAVTOV, 111'],
 ['93.91.166.42',
  'PERSON:         NOC OF AVANTEL',
  'ADDRESS:        RUSSIA, 630132, NOVOSIBIRSK',
  'PERSON:         VLADISLAV SHASHKOV',
  'ADDRESS:        NARYMSKAYA STR. 27',
  'ADDRESS:        JSC AVANTEL',
  'PERSON:         LOZHNIKOV ALEXEY'],
 ['194.85.126.48',
  'ADDRESS:        CENTER OF FINANCIAL TECHNOLOGIES INC.',
  'ADDRESS:        630055 NOVOSIBIRSK',
  'PERSON:         ALEXANDR LOPATIN',
  'ADDRESS:        2 SHATURSKAYA STR.']]

Есть
DataFrame, в котором тоже есть поле
ip.
Нужно создать столбец с контактной информацией по ip-адресам так, чтобы например строке со значением
ip:

 '188.234.164.151'

соответствовала ячейка с информацией:

  STR. SHOSSE KOSMONAVTOV, 111, BLDG. 43, OFFICE 527,
  CJSC "ER-TELECOM HOLDING" TOMSK BRANCH,
  614099 PERM', RUSSIAN FEDERATION, SHOSSE KOSMONAVTOV, 111

Пробовал
np.where(), увы, не рабочее решение.

import re

def parse_addr(l):
    pat = r'^\w+:\s*(.*)$'
    return ', '.join([re.sub(pat, r'\1', x) for x in l])

df = pd.DataFrame([[x[0], parse_addr(x[1:])] for x in lst], columns=['ip','address'])

Результат:

In [9]: df
Out[9]:
                ip                                                                                address
0  188.234.164.151  STR. SHOSSE KOSMONAVTOV, 111, BLDG. 43, OFFICE 527, CJSC "ER-TELECOM HOLDING" TOMSK BRANCH, 614099 PERM', RUSSIAN FEDERATION, SHOSSE KOSMONAVTOV, 111
1     93.91.166.42                                     NOC OF AVANTEL, RUSSIA, 630132, NOVOSIBIRSK, VLADISLAV SHASHKOV, NARYMSKAYA STR. 27, JSC AVANTEL, LOZHNIKOV ALEXEY
2    194.85.126.48                                                        CENTER OF FINANCIAL TECHNOLOGIES INC., 630055 NOVOSIBIRSK, ALEXANDR LOPATIN, 2 SHATURSKAYA STR.


Передача переменной сквозь модули в Python
main.py

import module1
x = 0
module1.func(x)

module1.py

import module2
def func(x):
    module2.func(x)

module2.py

import module3
def func(x):
    module3.func(x)

module3.py

def func(x):
    y = x

Приходится передавать из модуля в модуль переменные, которые будут нужны только в самом последнем. Хотелось бы не тянуть
x через модули 1 и 2, чтобы единожды использовать в модуле 3.
Можно это как-то обойти? Или я что-то неправильно делаю с самой архитектурой программы?

1. Есть ли проблема?
Нет ничего неправильного в передаче значения через параметры функций, неважно в каком количестве модулей эти функции объявлены.
2. Контейнеры
Если кол-во значений становится большим - используют контейнер какого угодно рода: начиная от
dict, кончая инстансами специально созданных для этого классов.
Вообще, композиция значений и методов - это и есть основная мотивация в ООП.
(Прошу не комментировать и не пытаться вызывать на дискуссию по этому утверждению)
3. globals()
И, в конце концов, если Вы хотите прославиться среди коллег, Вы не опасаетесь косых взглядов и считаете, что "тесты - для слабаков" - можно вспомнить факт, что:

модуль в python - это фактически синглтон

import модуля - это запуск "конструктора" синглтона
пространство глобальных имен - всегда открыто для манипуляции (в питоне вообще нет "полноценного" read-only)

EDITED. P.S.
Проблема данного вопроса в том, что путаются понятия: "имени" и "значения".
Переменная - это совокупность "имя"-"значения" в некоем пространстве имен.
В
python мы имеем пространства имен:
globals(),
locals(),
vars() и контекст
with.
"Передача переменной" как таковая - возможна, при прямой манипуляции с пространствами имен.
Что
python - позволяет.
Но делать это, если вы не пишете, скажем, фреймворк для тестирования - врядли целесообразно.
Помните, что с мощью приходит ответственность.
Не плодите код, который никто после Вас (и Вы сами спустя пару недель) "без поллитры" не поймет.


Django. Создание нового приложения из файла
Необходимо из views.py создавать новое приложение. Вижу два варианта решения, но ни к одному не могу подступиться:
1) Через os или subprocess вызвать команду python manage.py startapp {projName}. Но в таком случае вылетает ошибка.
2) Возможно, даже наверняка, в Django есть встроенная функция для создания нового приложения из файла, но отыскать я её пока не могу...
Для более глубокого понимания:
Есть форма, с которой считываются какие-то данные и добавляются в БД. Одно из полей этой формы и будет являться названием нового приложения (странички).
Заранее благодарю за помощь!

from django.core.management import call_command

app_name = 'someapp'
call_command('startapp', app_name, interactive=False)


Повторение операции Python
В общем, вот мой код:
<code>
person = {'name' : {'last_name': 'Иванов', 'first_name': 'Иван', 'middle_name': 'Иванович'}, 'address': ['г. Москва', 'ул. Пушкина д. 1337', 'кв.228'], 'phone': {'home_phone': '14-48', 'mobile_phone': 'None'}}
choose = int(input('Выберите пункт из списка: \n 1. Имя \n 2. Фамилия \n 3. Отчество \n 4. Адресс \n 5. Домашний телефон \n 6. Мобильный телефон \n 7. Завершить \n'))
if choose == 1:
    print(person['name']['first_name'])
elif choose == 2:
    print(person['name']['last_name'])
elif choose == 3:
    print(person['name']['middle_name'])
elif choose == 4:
    print(person['address'])
elif choose == 5:
    print(person['phone']['home_phone'])
elif choose == 6:
    print(person['phone']['mobile_phone'])
elif choose == 7:
    print('Вы успешно завершили операцию!')
else:
    print('Вы ввели неверное значение, повторите процедуру ещё раз')
</code>
Мне нужно сделать так, чтобы код повторился один раз, пока choose !=7
То есть, если я ввожу любое значение кроме 7, код срабатывал и выводил нужную мне информацию (это все уже есть в коде) и код повторялся ещё раз, а если я задал значение 7, то код завершался.

Поместите условия в бесконечный цикл и добавьте возможность выхода из цикла при нажатии 7 с помощью
break

person = {'name' : {'last_name': 'Кругликов', 'first_name': 'Андрей', 'middle_name': 'Андреевич'}, 'address': ['г. Андрюшки', 'ул. Пушкина д. 1337', 'кв.228'], 'phone': {'home_phone': '14-48', 'mobile_phone': 'None'}}

while True:
    choose = int(input('Выберите пункт из списка: \n 1. Имя \n 2. Фамилия \n 3. Отчество \n 4. Адресс \n 5. Домашний телефон \n 6. Мобильный телефон \n 7. Завершить \n'))

    if choose == 1:
        print(person['name']['first_name'])
    elif choose == 2:
        print(person['name']['last_name'])
    elif choose == 3:
        print(person['name']['middle_name'])
    elif choose == 4:
        print(person['address'])
    elif choose == 5:
        print(person['phone']['home_phone'])
    elif choose == 6:
        print(person['phone']['mobile_phone'])
    elif choose == 7:
        print('Вы успешно завершили операцию!')
        break
    else:
        print('Вы ввели неверное значение, повторите процедуру ещё раз')


flask как скрыть список получателей в рассылке
Есть скрипт, который отправляет файл всем пользователям из бд.
Но получатели видят всех остальных реципиентов. Как их скрыть?

from flask import Flask, render_template, make_response
from flask_celery import make_celery
from flask_sqlalchemy import SQLAlchemy
from flask_mail import Mail, Message
import os

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///subscribe.db'
app.config['MAIL_SERVER'] = 'mail.post.com'
app.config['MAIL_PORT'] = 25
app.config['MAIL_USERNAME'] = 'UserName'
app.config['MAIL_PASSWORD'] = 'Secret'

db = SQLAlchemy(app)
celery = make_celery(app)
mail = Mail(app)

class Subscribe(db.Model):
    id = db.Column('id', db.Integer, primary_key=True)
    email = db.Column('email', db.String(50), unique=True, nullable=False)
    company = db.Column(db.String(50), nullable=False)

    def __repr__(self):
        return f"Subscribe('{self.company}', '{self.email}')"

@app.route('/sendmail', methods=['GET', 'POST'])
def index():
    with app.app_context():
        theuser = Subscribe.query.filter(Subscribe.id).all()
        msg = Message('Hello', sender='[email protected]', recipients=[theuser.email for theuser in Subscribe.query.all()])

        msg.body = "testing"
        msg.html = "testing"

        with app.open_resource(r"C:\dir\worry_cat.jpg") as fp:
            msg.attach("image.png", "image/png", fp.read())

        for theuser in Subscribe.query.all():
            mail.send(msg)

        return 'Message sent!'

Обойти пользователей в цикле и отправить письмо каждому отдельно:

with app.open_resource(r"C:\dir\worry_cat.jpg") as fp:
    img = fp.read()

    for theuser in Subscribe.query.all():
        msg = Message('Hello', sender='[email protected]', recipients=[theuser.email])

        msg.body = "testing"
        msg.html = "testing"

        msg.attach("image.png", "image/png", img)

        mail.send(msg)


Сделать функцию аккумулирующую значения которые принимает (при неоднократном вызове)
Суть состоит в том чтобы получить функцию, которая сохраняет свое значение и значения переменных в своей области. Она принимает их и добавляет в список, затем при необходимости все накопленные данные возвращаются . Хотел реализовать с помощью генератора, но не получилось :
<code>
def acc(item=0,stop=0):
    buffer = []
    while item !=stop:
        buffer.append(item)
        yield "+"
    return buffer
</code>

Использование функции-генератора немного отличается от использования обычной функции. За основами можно обратиться к 20-й главе учебника "Изучаем Python" Марка Лутца. За просветлением к презентациям Дэвида Бизли - "Generator Tricks for Systems Programmers", "A Curious Course on Coroutines and Concurrency" и "Generators: The Final Frontier". Первый пример:

def acc():
    buf = []
    while True:
        # Получаем отправленные в генератор значения
        value, command = yield
        buf.append(value)
        if command:
            break
    yield buf

# Получаем генератор
g = acc()
# Инициализируем генератор
next(g)
# Отправляем в генератор значения
g.send((1, False))
g.send((2, False))
g.send((3, False))
# Получаем накопленные значения из генератора
items = g.send((4, True))

Избавимся от шага инициализации с помощью декоратора, а заодно от необходимости отправлять в генератор кортежи:

def coroutine(func):
    def init(*args, **kwargs):
        cr = func(*args, **kwargs)
        next(cr)
        return cr
    return init

@coroutine
def acc():
    buf = []
    while True:
        value = yield
        if value is StopIteration:
            break
        buf.append(value)
    yield buf

g = acc()
g.send(1)
g.send(2)
g.send(3)
items = g.send(StopIteration)

Теперь попробуем избавить от необходимости вызывать
send:

def coroutine(func):
    def init(*args, **kwargs):
        cr = func(*args, **kwargs)
        next(cr)
        return lambda x: cr.send(x)
    return init

@coroutine
def acc():
    ...

g = acc()
g(1)
g(2)
g(3)
items = g(StopIteration)

Такого же эффекта можно добиться с помощью замыкания:

def acc():
    buf = []
    def f(item):
        if item is None:
            return buf
        buf.append(item)
    return f

a = acc()
a(1)
a(2)
a(3)
items = a(None)

Или с помощью атрибутов функции (только в образовательных целях!):

def acc(item):
    if not hasattr(acc, '_buf'):
        acc._buf = []
    if item is None:
        items, acc._buf = acc._buf, []
        return items
    acc._buf.append(item)

acc(1)
acc(2)
acc(3)
items = acc(None)


Почему вылетает ошибка "no such tablel"? [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

 Вопрос вызван проблемой, которая больше не воспроизводится, или опечаткой. Хотя похожие вопросы могут быть уместны на этом сайте, решение для этого вопроса вряд ли поможет будущим посетителям. Обычно можно избежать подобных вопросов написанием и исследованием минимальной программы для воспроизведения проблемы до публикации вопроса.

Закрыт 4 года назад.

                        Улучшить вопрос

При попытке сохранения модели вылетает ошибка no such table: account_character_model, бд - sqlLite код:
<code>
character_form = forms.Character_form(request.POST,request.FILES)
    if not character_form:
        print("not form")
        return redirect('/createChar')
    if not character_form.is_valid():
        print('not valid')
        return redirect('/createChar')

    character = character_form.save(commit=False)
    for field in character.__dict__.keys():
        if field in character_form.cleaned_data:
            setattr(character,field,character_form.cleaned_data[field])
    character.user = request.user
    if 'character_image' in request.FILES:
        character.character_image = request.FILES['character_image']
    else:
        character.character_image = "personages/personages_picts/standart.jpg"
    character.save()
</code>

Я действительно забыл сделать повторную миграцию ^_^


У вас в значениях строки, а не вещественные числа, попробуйте сортировать так:
<code>
sred1 = sorted(dic1.items(), key=lambda value: float(value[1]))
</code>


PySide2 удалить виджет
Как удалить виджет на PySide2?
На C++ это делается так (насколько я понял и туториалов) (например удаление кнопки):

delete button;

На Python похожая конструкция:

del self.next_btn;

Выдаёт ошибку:

Traceback (most recent call last):
  File "*******.py", line 94, in dell
    del self.next_btn;
AttributeError: next_btn

Попробуйте через deleteLater:
<code>
self.next_btn.hide()
self.next_btn.deleteLater()
</code>


Как получить класс, который вызвал метод другого класса?
У меня есть 2 класса:

class Logger:
    def __init__(self, name):
        self.name = name

    def log(self, log):  # Этот класс должен перехватить имя класса, который его вызовет
        with open(self.name, "a+") as log_file:
            log_file.write(log)

        return log

class SomeClass:
    def __init__(self):
        self.logger = Logger("log.txt")

    def log_some(self, message):
        print(message)
        self.logger.log(message)

        return message

И мне необходимо, чтобы класс
Logger при вызове из другого класса метода
log() смог получить имя класса, вызвавшего метод.
Есть путь получения имени класса, в котором метод определён

self.__class__.__name__

Но он в данном случае будет мне бесполезен. Если ещё варианты?

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

import inspect

def get_caller_name():
    frames = inspect.getouterframes(inspect.currentframe(), 3)
    if len(frames) > 1:
        info = frames[1]
        args, _, _, values = inspect.getargvalues(info.frame)
        obj = values.get('self')
        if obj is not None:
            return '{}.{}'.format(obj.__class__.__name__, info.function)
        return info.function


Подсчет операци в определенный период времени
Коллеги, помогите сформировать DataFrame исходя из заданного условия.
Имеется исходный DataFrame:

ID   №Policy   Request     Request date     Decision
123   23ff      10000     2018-01-28 11:36    0
123   23ff      10000     2018-01-29 10:00    5000
123   42rd      25000     2018-06-18 15:10    25000
123   42rd      30000     2018-08-18 18:00    30000
345   23ff      15000     2018-01-28 12:00    10000
345   27fg      50000     2018-09-30 17:35     0
345   81er      30000     2018-09-30 10:15    10000
345   81er      30000     2018-10-20 11:30    10000
678   12rt      55000     2018-12-01 09:25    0
678   12rt      55000     2018-12-15 12:00    45000

Нужно подсчитать кол-во решений (Decisions), принятых по каждому ID в рамка №Policy, однако со следующим ограничением - если решение по ID в рамках одинакового №Policy было принято в течение одного месяца нескольок кол-во раз то такое решение равно 1 (т.е. в течение месяца на одного ID в рамках одного №Policy может приходиться несколько решений 2, 3 или более - если все сделано в рамках одного месяца то независимо от кол-во запросов нужно считать, что это 1 решение).
Результат примерно должен получиться следующим

ID   №Policy   Request     Request date     Decision       count
    123   23ff      10000     2018-01-28 11:36    0          0
    123   23ff      10000     2018-01-29 10:00    5000       1
    123   42rd      25000     2018-06-18 15:10    25000      1
    123   42rd      30000     2018-08-18 18:00    30000      1
    345   23ff      15000     2018-01-28 12:00    10000      1
    345   27fg      50000     2018-09-30 17:35     0         1
    345   81er      30000     2018-09-30 10:15    10000      0
    345   81er      30000     2018-10-20 11:30    10000      1
    678   12rt      55000     2018-12-01 09:25    0          0
    678   12rt      55000     2018-12-15 12:00    45000      1

Какой алгоритм тут прописать ума не приложу :(


Ошибка при вызове python скрипта из Runtime
Необходимо по команде выполнить запуск python скрипта. Не использовал jython т.к. скрипт содержит библиотеку todoist-api. Запуск скрипта выполняется по команде:

try {
        String cmd = "/home/kiryushin/projects/python/stm/venv/lib/stmtest1.py";
        Process p = Runtime.getRuntime().exec(cmd);
    }
    catch (IOException e){e.printStackTrace();}

на что получаю исключение -

" java.io.IOException: Cannot run program "/home/kiryushin/projects/python/stm/venv/lib/stmtest1.py": error=13, Отказано в доступе"

Менял параметры доступа в том числе через chmod -r 777.
OC Ubuntu 18.04 lts.

По комментариям стало ясно, что проблема запуска - не найден интерпретатор python.
Одного
chmod +x [имя скрипта] недостаточно, чтобы сделать файл исполняемым. Точнее сказать: правильно исполняемым.
Варианты решения
1.
chmod +x  и  "shebang"
По классике, надо добавить первой строкой в скрипте "shebang":
#!python или
#!/usr/bin/python или
#!//usr/bin/env python или даже
#p!ipenv run
Главноe - надо помнить, что окружение созданное
Runtime.getRuntime() может отличаться от того, что может создаваться в
bash/
zsh/
fish/etc и проверять
$PATH,
$PYTHONPATH и прочее.
2. Указать интепретатор в
cmd напрямую
Изменить команду запуска скрипта, не полагаясь на "shebang" и указать интерпретатор напрямую:

String cmd = "python /home/kiryushin/projects/python/stm/venv/lib/stmtest1.py";

Проверять опять же переменные окружения созданные Runtime.getRuntime.
Интерпретатор:

для простых случаев - просто
python
для случаев сложнее - создать virtualenv и запускать с командой инициализации окружения. Моя рекомендация - использовать
pipenv и запускать c
pipenv run [имя скрипта]


Какую сложность выбрать?
Есть алгоритм, который находит уникальный элемент в списке:
<code>
#!/usr/bin/env python3

def find_uniq_1(arr):
    a, b = set(arr) # O(len(arr))
    return a if arr.count(a) == 1 else b # O(n)

print(find_uniq_1([ 1, 1, 1, 2, 1, 1 ]))
</code>
Он состоит всего из двух строк кода. Сложность каждой строки я определил, но затрудняюсь выбрать из них ту, которая больше влияет на итоговую сложность алгоритма. Помогите пожалуйста.
Я пробовал увеличивать количество аргументов и при измерять время исполнения. В результате вижу, что график растёт почти линейно. То есть O(n) скорее всего это то, что мне нужно. Но я не понимаю почему O(n) нужно было предпочесть O(len(arr)).
Есть на этот счёт какие-нибудь правила?

Линейная сложность - это когда количество вычислительных итераций находится в линейной зависимости от КОЛИЧЕСТВА ЭЛЕМЕНТОВ ВО ВХОДНЫХ ДАННЫХ.
Длинна входного массива - это и есть количество элементов на входе.
То есть ваше
O(len(arr)) - это просто нестандартный способ записи для
O(n).


Как отсортировать значение массива по значению из словаря
У меня есть массив:

[{"name": "123", "age": 10}, {"name": "321", "age": 15}, {"name": "213", "age": 6}]

И надо сделать так чтобы вывелось значение
name того, у кого самое большое значение
age


Передача объекта при нажатии на виджет
Пример создал для простоты и понимания, на деле, конечно, передаются не объекты кнопок.
Нужно вот что, при нажатии на виджет (в примере это кнопки), объект виджета передавался бы в другой "принимающий" виджет, и он показывал некоторую информацию которая хранилась в объекте (в примере это текст кнопки).
Проблема в чём (буду описывать на примере): когда коннектишь кнопки вручную то работает всё как надо - в "принимающем" виджете показывается текст той кнопки, которую нажал.  Но кнопок "много", нужен цикл, и тут всё работает не так как ожидалось, при нажатии ЛЮЮБОЙ кнопки в "принимающем" виджете показывается текст только последней кнопки (которая коннектилась в последней итерации).
В чём может быть проблема?
Может есть какие-то другие способы передачи объекта в "принимающий" виджет?
Пример кода:
<code>
import sys

from PySide2.QtWidgets import *
from PySide2.QtGui import *
from PySide2.QtCore import *

class Main_window(QMainWindow):
    def __init__(self, parent = None):
        super(Main_window, self).__init__();

        self.main_wgt = QWidget();
        self.setCentralWidget(self.main_wgt);

        left_grid = QVBoxLayout();
        btn = [];
        for i in range(3):
            btn.append(QPushButton(str(i)));
            left_grid.addWidget(btn[i]);

        right_wgt = Right_wgt();

        main_grid = QHBoxLayout();
        main_grid.addLayout(left_grid);
        main_grid.addWidget(right_wgt);

        self.main_wgt.setLayout(main_grid);

        # Если вручную добавлять всё работает как надо
        # btn[0].clicked.connect(lambda: right_wgt.slot(btn[0]))
        # btn[1].clicked.connect(lambda: right_wgt.slot(btn[1]))
        # btn[2].clicked.connect(lambda: right_wgt.slot(btn[2]))

        # Если циклом то передаётся только последнее значение
        for i in range(len(btn)):
            btn[i].clicked.connect(lambda: right_wgt.slot(btn[i]))

class Right_wgt(QWidget):
    def __init__(self, parent = None):
        super(Right_wgt, self).__init__();

        self.setFixedSize(100, 100);
        self.setStyleSheet("background:#ddd");

        self.label = QLabel("default");
        grid = QGridLayout()
        grid.addWidget(self.label);

        self.setLayout(grid);

    def slot(self, item):
        self.label.setText(item.text())
        print(item);

if ( __name__ == "__main__" ):
    app = QApplication(sys.argv);
    window = Main_window();
    window.show();
    sys.exit(app.exec_());
</code>

А если так:
<code>
btn[i].clicked.connect(lambda state, idx=i: right_wgt.slot(btn[idx]))
</code>


при несоблюдении условий, вопрос не повторяется, не понимаю, как исправить
<code>
x=['1. Я суетлив и неусидчив.',
'2. Я несдержан и вспыльчив.',
'3. Я нетерпелив.',
'4. Я резок и прямолинеен в общении.',
'5. Я часто являюсь инициатором всевозможных мероприятий.']
i=0
j=0
for j in x:
    response=""
    n=0
    while True:
        response=input(x[n],\n)
        if response.lower() not in ("да","нет"):
            print("Отвечайте только да или нет")
        elif response.lower()=="да":
            i+=1
        elif response.lower()=="нет":
            i+=0
        n+=1
print(i)
</code>

Во-первых,
n+=1 должно выполняться только если выбрано
да или
нет. У вас же оно выполняется в любом случае.
Во-вторых, даже если устранить эту проблему, код не будет нормально работать. Так как у вас не предусмотрено условие выхода из цикла.
while True будет работать бесконечно. Его нужно заменить например на
while n<5.
В-третьих, у вас зачем-то вложены друг в друга два цикла, каждый из которых итерируется по
x. Если вы оставите это как есть, то ваш скрипт вам пять раз задаст весь набор вопросов.
Нужно оставить либо только внешний цикл, либо только внутренний.


Помогите с сортировкой вставкой
Захотел попробовать сделать сортировку вставкой,лишь смотря на одну гифку,и пришел к примерно к такому варианту:
а - массив случайных чисел
<code>
for i in range(len(a)):
    if i == 0:
        continue
    j = i
    x = i - 1
    if a[j] < a[x]:
        while a[j] <= a[x]:
            a[j], a[x] = a[x], a[j]
</code>
Подскажите,почему выходя из while,он сразу берет следующий i, а не проверяет if, который стоит выше

Потому что и if и  while у вас проверяют практически одно и то-же условие. А индексы не изменяются в цикле.
Сортировка вставкой в принципе выглядит примерно так:
<code>
for i in range(len(a)):
    v = a [i]
    j = i;
    while (a [j-1] > v) and (j > 0):
        a [j] = a [j-1]
        j = j - 1
    a [j] = v
</code>
А ваш код сильно смахивает на сортировку "пузырьком" :-) Но -  недописанным. Ну, и с отступами у вас - беда.


Как вернуть значение AUTOINCREMENT id после вставки строки?

INSERT INTO clicks (user_id) VALUES ("305383784") returning click_id into i
Хочу реализовать похожую команду в SQLite, взаимодйствую с бд при помощи Python, но не могу разобраться как вернуть
click_id в переменную Python. Может команда
returning вообще не поддерживается?
click_id это
primary key и
AUTOINCREMENT

conn = sqlite3.connect('clicks.db')
cursor = conn.cursor()
sql = r'INSERT INTO clicks (user_id) VALUES ("305383784") returning click_id into i '
cursor.execute(sql)
conn.commit()
conn.close()

Используйте атрибут
cursor.lastrowid:

cursor.execute(sql)
last_id = cursor.lastrowid
conn.commit()
...


Замена значений в столбце df по логическому условию в Pandas. (Категоризация числовых данных)
Есть столбец со значениями в df:

df.cumsum
0       17.61
1       23.01
2       26.53
3       29.82
4       32.64
5       34.52
6       36.16
7       37.80
8       38.97
9       40.14
10      41.31
11      42.25
12      43.19
13      44.13
14      45.07
15      46.01
16      46.95
17      47.65
18      48.35
19      49.05
20      49.75
21      50.45
22      51.15
23      51.85
24      52.55
25      53.25
26      53.95
27      54.42
28      54.89
29      55.36
        ...
4401    99.37
4402    99.37
4403    99.37

Как на основе значений в этом столбце, создать новый столбец с буквами 'A', 'B','C' при условии:
если значения <= 50 то 'A', от 50 до 80 - 'B' все остальное - 'C'
Пытался так

out_eihri.ABC.loc[out_eihri.ABC <= 50] = 'A'
out_eihri.ABC.loc[(out_eihri.ABC > 50) & (out_eihri.ABC < 80)] = 'B'

и так

out_eihri['ABC'] = out_eihri.Vklad.mask(out_eihri.Vklad <= 50, 'A')
out_eihri['ABC'] = out_eihri.Vklad.mask((out_eihri.Vklad > 50) & (out_eihri.Vklad < 80), 'B')

не работает как надо.

Воспользуйтесь pd.cut().
Исходный DF:

In [85]: df
Out[85]:
   col
0   10
1   20
2   50
3   51
4   60
5   80
6   81
7  100

Решение:

import numpy as np
import pandas as pd

bins = [-np.inf, 50, 80, np.inf]
labels = ['A','B','C']
df['new'] = pd.cut(df['col'], bins=bins, labels=labels)

Результат:

In [87]: df
Out[87]:
   col new
0   10   A
1   20   A
2   50   A
3   51   B
4   60   B
5   80   B
6   81   C
7  100   C


Может ли быть ключом нехэшируемый объект?
В учебниках пишут, что ключами словаря могут быть только неизменяемые объекты (кортежи, строки, числа и т.д.), неизменяемые типы имеют хеш.
В отличие от встроенных типов, пользовательские типы (то есть классы) изменяемы, поэтому они не имеют хеша. Но можно в них реализовать методы
__hash__() и
__eq__(). После этого они станут хешируемыми. Я думаю, что в этом случае их можно будет использовать в качестве ключей в словаре.
Вот пример:

#!/usr/local/lib/python3

class w():
  def __init__(self, x):
    self.x = x

  def __hash__(self):
    return True

  def __eq__(self, y):
    return False

ww = w(12)

print(ww)
print(hash(ww))

q = {
  ww: 333,
  1: 'qwe',
  'qqq': 'asd',
  (1, 2): 'zxc'
}

print(q['qqq'])
print(q[ww])

В результате я в выводе получаю хеш:

<__main__.w object at 0x7f01fb162b38>
-9223363308949511501
asd
333

Проблема в том, что если закомментировать методы
__hash__() и
__eq__(), то экземпляр всё равно подходит для использования в качестве ключа:

class w():
  def __init__(self, x):
    self.x = x

  # def __hash__(self):
  #   return True

  # def __eq__(self, y):
  #   return False

ww = w(12)

print(ww)
print(hash(ww))

q = {
  ww: 333,
  1: 'qwe',
  'qqq': 'asd',
  (1, 2): 'zxc'
}

print(q['qqq'])
print(q[ww])

Потому, что вывод в консоль остаётся таким же.
LIVE DEMO здесь

В отличие от встроенных типов, пользовательские типы (то есть классы) изменяемы, поэтому они не имеют хеша.

Это не так. В третьем питоне все пользовательские классы неявно наследуются от типа object, для которого хэширование и эквивалентность реализованы. Соответственно, для любого пользовательского класса хэширование и эквивалентность тоже будут реализованы, даже если не определены явно.
При использовании пользовательских классов в качестве ключа нужно просто очень ясно понимать, что в данном случае является хэшом и эквивалентностью.
Например, для экземпляра класса с унаследованной от object эквивалентностью, для экземпляра эквивалентным будет считаться только сам этот экземпляр. Если вы создадите другой экземпляр, передав в конструктор точно такие же аргументы, то этот новый экземпляр всё равно не будет считаться эквивалентным.


Какое основное преимущество кортежа?
Скажите пожалуйста, правильно ли я понимаю, что основное преимущество кортежа перед списком заключается в размере и скорости доступа?
<code>
#!/usr/local/lib/python3

q = (1,2,3)
w = [1,2,3]

print(q.__sizeof__())  # 48
print(w.__sizeof__())  # 64
</code>
Остальные отличия типа возможности использовать кортеж в виде ключа для словаря довольно экзотические и применяются редко

Размер
Скорость
Неизменяемость
Кортеж можно использовать в качестве ключа словаря из-за неизменяемости
Различные разрешённые операции

aaa=(1,2)
aaa[0]=0 # TypeError
bbb=[1,2]
bbb[0]=2
bbb # [2,2]
Кортеж хешируемый объект, а список - нет

hash(aaa) # 1278979879
hash(bbb) # TypeError: unhashable type: 'list'

Защита от дурака
Использование там где одно значение не имеет смысла без другого


You need vim compiled with Python 2.6, 2.7 or 3.2 and later support for Powerline to work
При запуске vim вылетает сообщение You need vim compiled with Python 2.6, 2.7 or 3.2 and later support for Powerline to work. Vim version 8.0.707. Debian.
vim --version показывает
<code>
-python
-python3
</code>
Подскажите, где активировать нужную версию python!

Поставить
vim-nox или
vim-gtk (если нужен
gvim).
По умолчанию в debian стоит минимальный
vim-tiny.


Кириллица в Python
Есть ли в python аналог для
string.ascii_letters, только для кириллицы?

>>> import string
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>>

Не думаю, что для кириллицы это есть.
Так что, вот:
<code>
cyrillic_lower_letters = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
cyrillic_letters = cyrillic_lower_letters + cyrillic_lower_letters.upper()
</code>


Поиск при помощи регулярных выражений
Как найти в строке слова, у которых последняя буква гласная, а предпоследняя согласная при помощи регулярных выражений?

Попробуйте:

import re

text = 'Как найти в строке слова, у которых последняя буква гласная, а предпоследняя согласная при помощи регулярных выражений?'

vowels = 'аоиеёэыуюя'
consonants = 'бвгджзйклмнпрстфхцчшщьъ'
pattern = r'\b[{0}{1}]+[{0}][{1}]\b'.format(consonants, vowels)

words = re.findall(pattern, text, flags=re.IGNORECASE)
print(words)  # ['найти', 'строке', 'слова', 'буква', 'при', 'помощи']

Значение в
pattern:

\b[бвгджзйклмнпрстфхцчшщьъаоиеёэыуюя]+[бвгджзйклмнпрстфхцчшщьъ][аоиеёэыуюя]\b


Подключение pip
Ребят, подскажите как в pycharm установить pip, для подключения модулей

Пакетный менеджер уже установлен в PyCharm в разделе Settings - Project: - Project Interpreter, нажми там плюсик и введи остальные пакеты или скачай pip, если отсутствует


Последовательность в строке [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

 Учебные задания допустимы в качестве вопросов только при условии, что вы пытались решить их самостоятельно перед тем, как задать вопрос. Пожалуйста, отредактируйте вопрос и укажите, что именно вызвало у вас трудности при решении задачи. Например, приведите код, который вы написали, пытаясь решить задачу

Закрыт 4 года назад.

                        Улучшить вопрос

Есть строка. Нужно посчитать самую длинную последовательность определенных символов, например буквы 'а'
Подскажите как справиться

с использованием регулярных выражений:

In [126]: import re

In [127]: s = "aabbbaaabbbcccaaaaaaadddaa"

In [128]: res = max(re.findall(r'(a{2,})', s))

In [129]: res
Out[129]: 'aaaaaaa'

In [130]: len(res)
Out[130]: 7

с использованием itertools.groupby:

In [138]: from itertools import groupby

In [139]: max(len(list(g)) for c,g in groupby(s) if c=='a')
Out[139]: 7


Определение слов в строке с условием
Есть строка, нужно определить в ней те слова, которые начинаются и оканчиваются на одну и ту же букву.
Подскажите как быть.

s = '...'
words = [i for i in s.split() if i[0] == i[-1]]


Сравнение списка с несколькими на вхождение значений
Даны список

lst_1 = [114170, 113970]

и список с вложенными массивами

lst_2 = [(array([114250, 114240, 114230, 114220, 114210, 114200, 114190, 114180,
         114170, 114160, 114150, 114140, 114130, 114120, 114110, 114100,
         114090]),
  array([114080, 114070, 114060, 114050]),
  array([114040, 114030, 114020, 114010, 114000, 113990, 113980, 113970,
         113960, 113950, 113940, 113930, 113920, 113910, 113900, 113890,
         113880]))]

Подскажите как найти вхождение значений из lst_1 в каждом подмассиве lst_2. Если значение содержится например в подмассиве lst_2[0], то вывести номер массива. Если значения содержаться в разных подмассивах, то аналогично вывести номера массивов. Количество значений в lst_1 и lst_2 могут быть разными, но количество подмассивов в lst_2 всегда одинаково.

Если я правильно понял вопрос, т.е. если:

lst_2 состоит из единственного
tuple, который содержит
numpy arrays

Решение:

In [79]: res = [i for i,x in enumerate(lst_2[0]) if np.intersect1d(x, lst_1).size > 0]

Результат:

In [80]: res
Out[80]: [0, 2]


Узнать message_id в Telegram API
Бот отправляет сообщение через bot.send_message() и потом для его изменения нужен chat_id и message_id. С chat_id проблем нет, но не могу понять где и как взять message_id отправленного ботом сообщения

Используйте
<code>
message.message_id
</code>
Должно сработать


Как заставить работа style в js скрипте на Python'e
Есть код

 {% load staticfiles %}
    <!DOCTYPE html>

    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'main.css' %}"/>

        <form id="accessForm" action="access/" method="post">
            {% csrf_token %}
            <input type="text" required placeholder="Title" name="title">
            <input type="text" required placeholder="Service" name="service">
            <input type="text" required placeholder="Login" name="login">
            <input type="password" required placeholder="Password"
             name="password">
            <input type="text" required placeholder="Comment" name="comment">
            <input type="text" required placeholder="Owner" name="owner">
            <input id="submit" type="submit" value="Add access">
        </form>

Accesses

            {% for access in Accesses %}
                {{ access.service }}

{{ access.title }}

{{ access.login }}

{{ access.password }}

{{ access.comment }}

{{ access.owner }}

            {% endfor %}

Я читал на форумах о том, что стили "мигающих" элементов js не ловит.
Как мне сделать, чтобы он начал видеть style property

element = document.getElementById('n')

Поменяй на

element = document.getElementById(n)


Как посчитать сложность цикла?
Скажите пожалуйста правильно ли я посчитал сложность алгоритма?
<code>
#!/usr/bin/env python3

a = [3, 2, 6, 34, 5]    # O(n)
for item in a:          # O(n)
    print(item)         # O(1)
</code>
Ход моих рассуждений выглядит так:
O(n) + O(n) = O(n + n) = O(2n) -> константу убираем -> O(n)
O(n) + O(1) = O(n + 1) -> константу убираем -> O(n)
Итоговая сложность всего алгоритма O(n)

Итоговую сложность O(n) вы правильно определили.
Но сами вычисления ошибочны.
Во-первых, наивное сложение сложностей - это достаточно бессмысленная операция. Букву 'n' внутри О не следует рассматривать как какую-то алгебраическую величину. Нельзя взять одно O(n), сложить его с другим O(n) и получить O(2n).
'n' - это не какая-то конкретная величина, это условное обозначение линейной зависимости количества вычислительных итераций от количества входных данных. Наивные арифметические действия над 'n' в общем случае не отображают какую-то связь с какими бы то ни было величинами из реального мира.
Это как в анекдоте о прапорщике:

- Допустим, число танков равно "М". Нет "М" мало, возьмем "N".
Иными словами, анализ сложности - это скорее практическая инженерная дисциплина, нежели строгая математика. Хотя эта дисциплина и опирается на знания о поведении функций, взятые из матанализа.
Во-вторых, даже если для общих прикидок допустить использование арифметических операций над O, то для вложенных блоков кода выражения внутри O нужно перемножать, а не складывать.
То есть если внутри цикла сложностью O(n) выполняется операция сложностью O(1), то итоговую сложность следует оценивать вовсе не как O(n+1), а как O(n*1).
Для данного случая результат в итоге тот же получится, но вот если бы вы для вложенных циклов начали бы считать сложность, то сложение давало бы неправильный результат.