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

while 1:
print("""
        Choose an option:
        1 - view contacts
        2 - add new contact
        3 - exit the application
    """)
menu = int(input("Your choice:"))
menu
contacts = {
    "Andrew Warrick": {"Andrew Warrick": '','Primary phone:': '123456789',"Phone 2:":'123456789',"E-mail":'@mail.com','telegram':'@telega'},
    "Sofia Kalinina": {"Sofia Kalinina": '','Primary phone:': '175674529',"Phone 2:":'154663452',"E-mail":'[email protected]','telegram':'@sofa'}
}
if menu == 1:
    print("Your contacts:\n")
    for i in contacts.keys():
        print(i)
    print('enter contacts\n')
    contact = input('Your contact:')
    if contact in contacts:
        for i in contacts[contact]:
            print(i)

Когда я добавил условия, мне стал выводиться весь список, когда мне нужно, чтобы  выводился
Ключ:Значение:

 while 1:
            print("""
                    Choose an option:
                    1 - view contacts
                    2 - add new contact
                    3 - exit the application
                """)
            menu = int(input("Your choice:"))
            contacts = {
                "Andrew Warrick": {"Andrew Warrick": '',
                    'Primary phone:': '123456789',
                    "Phone 2:":'123456789',
                    "E-mail":'@mail.com',
                    'telegram':'@telega'},
                "Sofia Kalinina": {"Sofia Kalinina": '',
                    'Primary phone:': '175674529',
                    "Phone 2:":'154663452',
                    "E-mail":'[email protected]',
                    'telegram':'@sofa'}
            }
            if menu == 1:
                print("Your contacts:\n")
                for i in contacts.keys():
                    print(i)
                print('enter contacts\n')
                contact = input('Your contact:')
                if contact in contacts:
                    for i in contacts[contact]:
                        if i in contacts:
                            print(contacts[i])

что я делаю не так ?

Если в цикле проверять наличие каждой записи в словаре на её наличие в этом словаре, то каждая запись и выведется. Нужно сразу печатать то, что нужно, и все
<code>
contact = input('Your contact:')
if contact in contacts:
    print(contacts[contact])
</code>


Как внутренняя функция декоратора получает *args и **kwargs
Вот для примера функция с декоратором

from datetime import datetime

def add_log_info(func):
    def wrapper(*args, **kwargs):
        print(f'{datetime.now()}: Вызвана функция {func.__name__}')
        result = func(*args, **kwargs)
        return result
    return wrapper

@add_log_info
def say_my_name(name):
    print(f'Your name in {name}')

say_my_name('Вася')

Я не могу понять как функция
wrapper получает аргументы
*args и
**kwargs. В момент когда функция
say_my_name передается в декоратор, она ведь еще не вызвана, насколько я понимаю мы как бы передаем саму функцию туда, само ее определение. Но тогда как вместе с ней передаются аргументы, которые в итоге передаются транзитом в вызов
func из
wrapper? Надеюсь, что мой вопрос понятен :)

Если говорить в терминах вашего примера, то после декорирования имя
say_my_name обозначает уже не саму эту функцию, а
wrapper. А сама эта функция теперь лежит внутри
wrapper под именем
func.
То есть когда вы делаете вызов этой функции, происходит следующее:

Вы вызываете
say_my_name('Вася')
Так как теперь под этим именем уже не сама функция, а обертка вокруг неё, то происходит вызов этой обёртки (
wrapper), а аргументы (в данном случае один аргумент
Вася) передаются во
wrapper.
Так как
wrapper принимает
*args, **kwargs, то у вас
args становится списком
['Вася'], а на
kwargs уже никаких аргументов не осталось, это просто пустой словарь.
Внутри обёртки у вас дёргается функция
func, которая является просто псевдонимом для того, что было первоначальной функцией
say_my_name, но потеряло право так называться после декорирования.
В эту
func передаются аргументы
*['Вася'], **{} - то есть просто один позиционный аргумент
'Вася'. А у нас
func как раз и принимает один аргумент
name. (Так как
func - это же бывшая
say_my_name)
Ну и в итоге этот аргумент у вас просто печатается на экран.


Пересылка сообщения Python Telegram Bot
Необходимо реализовать следующее - когда пользователь пишет боту сообщение, бот пересылает его пользователю который указан  в
to_chat_id
Пример кода который кажется мне более-менее верным

@bot_message_handler(content_types=['text'])
def ResendMessage(to_chat_id, from_chat_id):
    bot.forward_message(to_chat_id, from_chat_id, message_id)

Использую pyTelegramBotAPI

Пример:
<code>
from telebot import TeleBot

bot = TeleBot('[token]')  # Не забудьте подставить свой токен!
TO_CHAT_ID = ...          # Не забудьте подставить нужный id!

@bot.message_handler(content_types=['text'])
def all_messages(message):
    bot.forward_message(TO_CHAT_ID, message.chat.id, message.message_id)

if __name__ == '__main__':
    bot.polling(none_stop=True)
</code>


Из .txt в словарь, python
Есть .txt файл:

Around the new position a circle, somewhat larger than in the former instance, was now described, and we again set to work with the spades. I was dreadfully weary, but, scarcely understanding what had occasioned the change in my thoughts, I felt no longer any great aversion from the labor imposed. I had become most unaccountably interested nay, even excited.

Каким образом его можно закинуть в словарь, чтобы ключами были слова, а значениями - частота их появления?

Если надо игнорировать знаки препинания, то:

import re

text = "Around the new position a circle, somewhat larger than in the former instance, was now described, and we again set to work with the spades. I was dreadfully weary, but, scarcely understanding what had occasioned the change in my thoughts, I felt no longer any great aversion from the labor imposed. I had become most unaccountably interested nay, even excited."

matches = re.findall(r"\b\w+\b", text) # Находим все слова
freqs = {word: matches.count(word) for word in set(matches)} # Составляем требуемый словарь

import json # Фишки для красивого вывода
print(json.dumps(freqs, indent=4))

Вывод:

{
    "larger": 1,
    "new": 1,
    "great": 1,
    "labor": 1,
    "longer": 1,
    "dreadfully": 1,
    "scarcely": 1,
    "set": 1,
    "spades": 1,
    "to": 1,
    "understanding": 1,
    "from": 1,
    "most": 1,
    "a": 1,
    "we": 1,
    "former": 1,
    "work": 1,
    "in": 2,
    "the": 5,
    "was": 2,
    "and": 1,
    "imposed": 1,
    "interested": 1,
    "no": 1,
    "felt": 1,
    "I": 3,
    "had": 2,
    "become": 1,
    "again": 1,
    "my": 1,
    "thoughts": 1,
    "now": 1,
    "Around": 1,
    "than": 1,
    "weary": 1,
    "described": 1,
    "circle": 1,
    "what": 1,
    "but": 1,
    "occasioned": 1,
    "position": 1,
    "somewhat": 1,
    "even": 1,
    "unaccountably": 1,
    "change": 1,
    "aversion": 1,
    "instance": 1,
    "with": 1,
    "any": 1,
    "excited": 1,
    "nay": 1
}

P.S. Стоит учесть, что слова вида
I'm будут интерпретированы как 2 слова
["I", "m"].


Как сделать подсветку для .ini файлов в pyqt5?
Я делаю небольшой текстовый редактор для мака на pyqt5 и хочу чтобы была возможность подсвечивать ini , json и другие файлы настроек (текстовые).
Я попробовал QScintilla ,но меня в ней не устроило то , что я создал несколько тем для редактора , а применить их к  QScintilla нельзя.
Как можно подсвечивать ini файлы в простом виджете QTextEdit?

Dark theme:

from PyQt5.Qt import *

class MyHighlighter(QSyntaxHighlighter):
    def __init__(self, parent):
        super().__init__(parent)

        self.regexp_by_format = dict()

        char_format = QTextCharFormat()
        char_format.setFontItalic(False)
        char_format.setForeground(QColor("aqua"))
        self.regexp_by_format[r'\='] = char_format

        char_format = QTextCharFormat()
        char_format.setFontItalic(True)
        char_format.setForeground(QColor("aqua"))
        self.regexp_by_format[r'(.+?)(\=|\s|\b)'] = char_format

        char_format = QTextCharFormat()
        char_format.setFontWeight(QFont.Light)
        char_format.setForeground(QColor("yellow"))
        self.regexp_by_format[r'(\=|\s\=)(.*)'] = char_format

        char_format = QTextCharFormat()
        char_format.setForeground(QColor("gray"))
        self.regexp_by_format[r'\[(.+?)\]'] = char_format

        char_format = QTextCharFormat()
        char_format.setForeground(QColor("lightgray"))
        self.regexp_by_format[r'(\;|\#)(.+?)$'] = char_format

    def highlightBlock(self, text):
        for regexp, char_format in self.regexp_by_format.items():
            expression = QRegularExpression(regexp)
            it = expression.globalMatch(text)
            while it.hasNext():
                match = it.next()
                self.setFormat(match.capturedStart(), match.capturedLength(), char_format)
if __name__ == '__main__':
    app = QApplication([])

    mw = QTextEdit()
    mw.setText(open("settings.ini").read())
    mw.setStyleSheet("QTextEdit{font-size:20px;background-color: black; color: white;}")

    highlighter = MyHighlighter(mw.document())

    mw.show()

    app.exec()

Вот еще кстати для некоторых других файлов:

from PyQt5.Qt import *

class MyHighlighter(QSyntaxHighlighter):
    def __init__(self, parent):
        super().__init__(parent)

        self.regexp_by_format = dict()
        self.initForIni()
    def initForIni(self):
        char_format = QTextCharFormat()
        char_format.setFontItalic(False)
        char_format.setForeground(QColor("red"))
        self.regexp_by_format[r'\='] = char_format

        char_format = QTextCharFormat()
        char_format.setFontWeight(QFont.Bold)
        char_format.setForeground(QColor("red"))
        self.regexp_by_format[r'(.+?)(\=|\s|\b)'] = char_format

        char_format = QTextCharFormat()
        char_format.setFontItalic(True)
        char_format.setForeground(QColor("white"))
        self.regexp_by_format[r'(\=|\s\=)(.*)'] = char_format

        char_format = QTextCharFormat()
        char_format.setForeground(QColor("gray"))
        self.regexp_by_format[r'\[(.+?)\]'] = char_format

        char_format = QTextCharFormat()
        char_format.setForeground(QColor("lightgray"))
        self.regexp_by_format[r'(\;|\#)(.+?)$'] = char_format

    def initForCss(self):

        char_format = QTextCharFormat()
        char_format.setFontItalic(False)
        char_format.setForeground(QColor("gray"))
        self.regexp_by_format[r':'] = char_format

        char_format = QTextCharFormat()
        char_format.setFontItalic(False)
        char_format.setForeground(QColor("gray"))
        self.regexp_by_format[r'(.+?)(\{|\b\{)'] = char_format
        self.regexp_by_format[r'\}'] = char_format

        char_format = QTextCharFormat()
        char_format.setFontWeight(QFont.Light)
        char_format.setForeground(QColor("red"))
        self.regexp_by_format[r'(.*)\:'] = char_format

        char_format = QTextCharFormat()
        char_format.setFontItalic(True)
        char_format.setForeground(QColor("#87e7ff"))
        self.regexp_by_format[r'\:(.*)'] = char_format

        char_format = QTextCharFormat()
        char_format.setForeground(QColor("gray"))
        self.regexp_by_format[r'\/\*(.*)\*\/'] = char_format

    def initForJSON(self):

        char_format = QTextCharFormat()
        char_format.setFontItalic(False)
        char_format.setForeground(QColor("#87e7ff"))
        self.regexp_by_format[r'.'] = char_format

        char_format = QTextCharFormat()
        char_format.setFontItalic(True)
        char_format.setForeground(QColor("#ffb787"))
        self.regexp_by_format[r'(true|false|null)'] = char_format

        char_format = QTextCharFormat()
        char_format.setFontItalic(False)
        char_format.setForeground(QColor("red"))
        self.regexp_by_format[r'\"(.+?)\"'] = char_format

        char_format = QTextCharFormat()
        char_format.setFontWeight(QFont.Light)
        char_format.setForeground(QColor("gray"))
        self.regexp_by_format[r'\{'] = char_format
        self.regexp_by_format[r'\}'] = char_format
        self.regexp_by_format[r'\,'] = char_format
        self.regexp_by_format[r'\#'] = char_format #comments in python style

    def initForXML(self):

        char_format = QTextCharFormat()
        char_format.setFontItalic(False)
        char_format.setForeground(QColor("white"))
        self.regexp_by_format[r'.'] = char_format

        char_format = QTextCharFormat()
        char_format.setFontItalic(False)
        char_format.setForeground(QColor("#87e7ff"))
        self.regexp_by_format[r'\<(.+?)\>'] = char_format

        char_format = QTextCharFormat()
        char_format.setFontItalic(True)
        char_format.setForeground(QColor("red"))
        self.regexp_by_format[r'(\<|\>)'] = char_format

        char_format = QTextCharFormat()
        char_format.setForeground(QColor("orange"))
        self.regexp_by_format[r'\"(.+?)\"'] = char_format

        char_format = QTextCharFormat()
        char_format.setForeground(QColor("red"))
        self.regexp_by_format[r'='] = char_format

        char_format = QTextCharFormat()
        char_format.setForeground(QColor("green"))
        self.regexp_by_format[r'\b\s(.+?)='] = char_format

        char_format = QTextCharFormat()
        char_format.setFontItalic(True)
        char_format.setForeground(QColor("gray"))
        self.regexp_by_format[r'\<\!\-\-\>(.+?)\-\-\>'] = char_format

    def highlightBlock(self, text):
        for regexp, char_format in self.regexp_by_format.items():
            expression = QRegularExpression(regexp)
            it = expression.globalMatch(text)
            while it.hasNext():
                match = it.next()
                self.setFormat(match.capturedStart(), match.capturedLength(), char_format)

if __name__ == '__main__':
    app = QApplication([])

    mw = QTextEdit()
    mw.setStyleSheet("QTextEdit{font-size:20px;background-color: #000000; color: white;}")

    highlighter = MyHighlighter(mw.document())

    mw.show()

    app.exec()


Где моя проблема? Чтение из файла и сортировка пузырьком

def check(l):
    a = 0
    while True:
        b = a + 1
        if b == len(l):
            break
        if l[a] > l[b]:
            a -= 1
            break
        a += 1
    return a + 1

def bubble(l,a):
    i = a - 1
    l.insert(i,l.pop(a))
    return l

l = []
f = open('C:\\Users\\davla\\Desktop\\teachers.txt','r')
nums=f.read().splitlines()
for i in range(len(nums)):
    l.append(list(nums[i].split('_')))

while True:
    n=input('sort by ')
    if n == 'exp' or n == 'expirience':
        k = 2
        break
    elif n=='school':
        k = 1
        break
    else:
        print('you entered wrong key')

while True:
    m = [int(l[i][k]) for i in range(len(l))]
    print(m)
    a = check(m)
    print(a)
    l = bubble(l,a)
    print(l)
    if a-1==len(m):
        break

f.close()

TXT
Ivan_260_8_math
Andrew_30_7_eng
Alex_125_10_his

Как то все очень сложно.

print (l)
while True:
    n=input('sort by ')
    if n == 'exp' or n == 'expirience':
        k = 2
        break
    elif n=='school':
        k = 1
        break
    else:
        print('you entered wrong key')
n=1
while n < len(l):
     for i in range(len(l)-n):
         if int(l[i][k]) > int(l[i+1][k]):
             l[i],l[i+1] = l[i+1],l[i]
     n += 1
print (l)

Имеем:

[['Ivan', '260', '8', 'math'], ['Andrew', '30', '7', 'eng'], ['Alex', '125', '10','his']]
sort by school
[['Andrew', '30', '7', 'eng'], ['Alex', '125', '10', 'his'], ['Ivan', '260', '8','math']]

и

[['Ivan', '260', '8', 'math'], ['Andrew', '30', '7', 'eng'], ['Alex', '125', '10', 'his']]
sort by expirience
[['Andrew', '30', '7', 'eng'], ['Ivan', '260', '8', 'math'], ['Alex', '125', '10', 'his']]


Как при помощи python скачать ЗАРАЖЁННЫЙ файл с гугл диска?
Добрай день!
Столкнулся с проблемой при скачивани с гугл диска с помощью Python. Файлы которые гугл отмечает как заражённые при скачивании повреждаются и их невозможно открыть. Что в этом случае можно сделать?

Решение есть - скачать с дропбокса


Как конвертировать строку дня и месяца в date формат в python?

In [46]: example
Out[46]: '2802'

это строка DDMM имеет формат.
как это можно сконвертировать в date формат питоновский?

In [47]: datetime.strptime('2802', '%d%m')
Out[47]: datetime.datetime(1900, 2, 28, 0, 0)

потому что так еще и год приписывает мне.

Объект
datetime.datetime всегда содержит компоненты года, месяца и день месяца. Невозможно создать объект данного типа у которого отсутствует одна из этих компонент.
Пример:

In [11]: from datetime import datetime as DT

In [12]: example = '2802'

In [13]: d = DT.strptime(f"{example}{DT.now().year}", "%d%m%Y")

In [14]: d
Out[14]: datetime.datetime(2019, 2, 28, 0, 0)


Как отследить общее время выполнения всех потоков?
Простой скрипт:
<code>
import threading
import time
total = 0
lock = threading.Lock()
def update_total(amount):
    global total, lock
    time.sleep(2)
    lock.acquire()
    time.sleep(0.2)
    total += amount
    print(total)
    lock.release()

if __name__ == '__main__':
    for i in range(10):
        my_thread = threading.Thread(target=update_total, args=(5,))
        my_thread.start()
</code>
2 вопроса:
1) Как отследить время выполнения всех потоков? Если я в потоках буду забивать какие то переменные start  и finish, то мне нужно их вывести в основном потоке после выполнения всех потоков.
2) Как вывести total после обработки всеми потоками в основном потоке?

Нашел решение:
<code>
import threading
import time
total = 0
lock = threading.Lock()
def update_total(amount):
    global total, lock
    time.sleep(2)
    lock.acquire()
    time.sleep(0.2)
    total += amount
    print(total)
    lock.release()

threads=[]
if __name__ == '__main__':
    start = time.time()
    for i in range(10):
        my_thread = threading.Thread(target=update_total, args=(5,))
        my_thread.start()
        threads.append(my_thread)
    for thread in threads:
        thread.join()
    print("Total:"+str(total))
    print("runtime: {:0.2f}".format(time.time()-start))
</code>


Как увеличить скорость выполнения данного кода на python?
В тестирующей системе данный код валится на времени выполнения. Каким образом можно его улучшить
<code>
from numpy import array

def linear_func(theta, x):
    return sum(theta*x)

def linear_func_all(theta, X):
    size = X.shape[0]
    return array([sum(theta*X[i]) for i in range(size)])

def mean_squared_error(theta, X, y):
    size = X.shape[0]
    return sum((y - linear_func_all(theta, X))**2) / size

def grad_mean_squared_error(theta, X, y):
    f = linear_func_all(theta, X)
    size = X.shape[0]
    n = [sum((f - y) * row) * 2 / size for row in X.T]
    return array(n)

X = array([[1,2], [3,4], [4,5]])
theta = array([5, 6])
x = array([1, 2])
y = array([1, 2, 1])
print(linear_func(theta, x))
print(linear_func_all(theta, X))
print(mean_squared_error(theta, X, y))
print(grad_mean_squared_error(theta, X, y))
</code>

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

import numpy as np

def linear_func(theta, x):
    return x @ theta

def linear_func_all(theta, X):
    return X @ theta

def mean_squared_error(theta, X, y):
    return np.mean((y - linear_func_all(theta, X))**2)

def grad_mean_squared_error(theta, X, y):
    f = linear_func_all(theta, X)
    return np.mean(2 * (f - y) * X.T, axis=1)

X = np.array([[1,2], [3,4], [4,5]])
theta = np.array([5, 6])
x = np.array([1, 2])
y = np.array([1, 2, 1])
print(linear_func(theta, x))
print(linear_func_all(theta, X))
print(mean_squared_error(theta, X, y))
print(grad_mean_squared_error(theta, X, y))


Возможно ли восстановить файл после прохода через эту функцию?
Я написал скрипт, по типу shred в линуксе, его центральная часть в этих строчках.
<code>
def shred():

  with open(file, 'r+') as f:
            size = os.path.getsize(file)
            null_str = '0' * size
            for i in range(1, cycles + 1): # For progress_bar
                f.seek(0)
                f.write(null_str)
</code>
Описание кода (для тех, кто в безопасность, но не в питон):
1) Получаем размер файла в байтах
2) Создаем переменную длиной в файл, состоящую из нулей.
3) цикл:
4) Переходим в начало файла
5) Записываем созданную переменную в файл.
Возможно ли восстановить файл, достаточно ли это секьюрно ?

Файловая система - это абстракция над физическим устройством. Казалось, бы ставим через
seek указаталь в какое-то место файла и перезаписываем. Но не все так просто.
Тезисы такие:

нули не подходят, нужно использовать случайные данные, причем в несколько проходов. Иначе можно восстановить через Магнитно-силовую микроскопию
существует "Копирование при записи" (Copy-on-write), поэтому физического перезатирания не происходит, нужно это обойти
могут остаться данные на одном из зеркал RAID массива
фрагментация: файл начинается в одной части диска, заканчивается в другой, и такая "последовательная" перезапись не затрет данные
система антифрагментации может оставить копии данных в других частях носителя
SSD диски управляют адресным пространством не так, как HDD. В частности, есть функция выравнивания износа накопителя
есть файловые системы с версионированием типа ZFS:

Снимки могут быть смонтированы в формате read-only для восстановления старой версии файла

лучше не "сжигать" данные, а шифровать еще до попадания на диск

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


Вывод нечетных чисел через рекурсию Python
Это домашка, но никак не могу сделать, буду благодарен хотя-бы совету =) Условие "Дано натуральное число n. Напечатайте все n-значные нечетные натуральные
числа в порядке убывания."
Мой код
<code>
def rec(n):
    if n > 0:
        if n % 2 == 0:
            rec(n-1)

print(rec(30))
</code>

tio.run
<code>
def rec(n):
  if n > 0:
    rec(n-1)
    if n % 2: print(n)

rec(30)
</code>


Помогите пожалуйста с django
Ошибка:
ОШИБКА:  нулевое значение в столбце "shedule_id" нарушает ограничение NOT NULL
DETAIL:  Ошибочная строка содержит (Ин.яз, Г-538, Евгений Борисович, 08:00:00, 11:10:00, 1, 1, 1, 1, null).
models.py:

class shedule(models.Model):
    shedule_id = models.IntegerField(primary_key=True)
    lesson = models.CharField(max_length=50)
    classroom = models.CharField(max_length=10)
    name_teacher = models.CharField(max_length=50)
    group = models.IntegerField(null=True)
    start_time = models.TimeField(default=timezone.now)
    end_time = models.TimeField(default=timezone.now)
    type_lesson = models.PositiveSmallIntegerField()
    parity_week = models.PositiveSmallIntegerField()
    day_week = models.PositiveSmallIntegerField()

forms.py

from django import forms
from django.forms import ModelForm
from .models import shedule

type_lesson_choices = ((1, 'Практика'),
                (2, 'Лекция'))
parity_week_choices = ((1,'Нечетная'),
               (2, 'Четная'))
day_week_choices = ((1,'Понедельник'),
                    (2,'Вторник'),
                    (3,'Среда'),
                    (4,'Четверг'),
                    (5,'Пятница'),
                    (6,'Суббота'))

class AddLessonForm(ModelForm):
    lesson = forms.CharField(label='Название урока')
    name_teacher = forms.CharField(label='Имя учителя')
    start_time = forms.TimeField()
    end_time = forms.TimeField()
    classroom = forms.CharField(label='Аудитория')
    type_lesson = forms.ChoiceField(widget=forms.Select, choices=type_lesson_choices)
    parity_week = forms.ChoiceField(widget=forms.Select, choices=parity_week_choices)
    day_week = forms.ChoiceField(widget=forms.Select, choices=day_week_choices)

    class Meta:
        model = shedule
        fields = ('lesson', 'name_teacher', 'start_time', 'end_time', 'classroom', 'type_lesson', 'parity_week', 'day_week')

views.py

def edit(request):
    if request.method == 'POST':
        form = AddLessonForm(request.POST)
        if form.is_valid():
            lesson = form.save(commit=False)
            lesson.group = id_group
            lesson.save()
            return redirect('/shedule')
    else:
        form = AddLessonForm()
    return render(request, 'shedule/edit.html', {'form': form})

Я понял что ошибка в том что он передает в Primary key null, хотя этого нельзя.
Как мне от него избавиться???
Заранее спасибо

Исправил
Изменил в model.py
<code>
shedule_id = models.AutoField(primary_key=True)
</code>


Не могу получить данные из изменённой таблицы QTableWidget в PyQt
Программа вроде работает правильно, выводит оценки в
self.marks, но если раскомментировать функцию, которая должна изменённые элементы в таблице сохранять в переменную, то программа вылетает.
Помогите пожалуйста.

from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPixmap, QImage
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
import sqlite3

class Ui_AdminWindow(object):
    def setupUi(self, AdminWindow):
        AdminWindow.setObjectName("AdminWindow")
        AdminWindow.resize(434, 513)
        self.centralwidget = QtWidgets.QWidget(AdminWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.adding = QtWidgets.QPushButton(self.centralwidget)
        self.adding.setGeometry(QtCore.QRect(220, 0, 101, 31))
        self.adding.setObjectName("adding")
        self.img = QtWidgets.QLabel(self.centralwidget)
        self.img.setGeometry(QtCore.QRect(0, 40, 201, 221))
        self.img.setObjectName("img")
        self.marks = QtWidgets.QTableWidget(self.centralwidget)
        self.marks.setGeometry(QtCore.QRect(0, 280, 431, 191))
        self.marks.setObjectName("marks")
        self.marks.setColumnCount(0)
        self.marks.setRowCount(0)
        self.exit = QtWidgets.QPushButton(self.centralwidget)
        self.exit.setGeometry(QtCore.QRect(330, 0, 101, 31))
        self.exit.setObjectName("exit")
        self.students = QtWidgets.QComboBox(self.centralwidget)
        self.students.setGeometry(QtCore.QRect(0, 0, 211, 31))
        self.students.setObjectName("students")
        self.formLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.formLayoutWidget.setGeometry(QtCore.QRect(220, 40, 211, 101))
        self.formLayoutWidget.setObjectName("formLayoutWidget")
        self.formLayout = QtWidgets.QFormLayout(self.formLayoutWidget)
        self.formLayout.setContentsMargins(0, 0, 0, 0)
        self.formLayout.setObjectName("formLayout")
        self.label_2 = QtWidgets.QLabel(self.formLayoutWidget)
        self.label_2.setObjectName("label_2")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_2)
        self.school = QtWidgets.QLineEdit(self.formLayoutWidget)
        self.school.setObjectName("school")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.school)
        self.label_3 = QtWidgets.QLabel(self.formLayoutWidget)
        self.label_3.setObjectName("label_3")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_3)
        self.class_student = QtWidgets.QLineEdit(self.formLayoutWidget)
        self.class_student.setObjectName("class_student")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.class_student)
        self.label_4 = QtWidgets.QLabel(self.formLayoutWidget)
        self.label_4.setObjectName("label_4")
        self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_4)
        self.gender = QtWidgets.QLineEdit(self.formLayoutWidget)
        self.gender.setObjectName("gender")
        self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.gender)
        self.label_5 = QtWidgets.QLabel(self.formLayoutWidget)
        self.label_5.setObjectName("label_5")
        self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_5)
        self.dob = QtWidgets.QLineEdit(self.formLayoutWidget)
        self.dob.setObjectName("dob")
        self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.dob)
        self.save_data = QtWidgets.QPushButton(self.centralwidget)
        self.save_data.setGeometry(QtCore.QRect(280, 180, 75, 23))
        self.save_data.setObjectName("save_data")
        self.delete_data = QtWidgets.QPushButton(self.centralwidget)
        self.delete_data.setGeometry(QtCore.QRect(360, 180, 75, 23))
        self.delete_data.setObjectName("delete_data")
        self.upload_foto = QtWidgets.QPushButton(self.centralwidget)
        self.upload_foto.setGeometry(QtCore.QRect(340, 150, 89, 23))
        self.upload_foto.setObjectName("upload_foto")
        self.pass_manager = QtWidgets.QPushButton(self.centralwidget)
        self.pass_manager.setGeometry(QtCore.QRect(280, 230, 151, 23))
        self.pass_manager.setObjectName("pass_manager")
        AdminWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(AdminWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 434, 21))
        self.menubar.setObjectName("menubar")
        AdminWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(AdminWindow)
        self.statusbar.setObjectName("statusbar")
        AdminWindow.setStatusBar(self.statusbar)

        self.retranslateUi(AdminWindow)
        QtCore.QMetaObject.connectSlotsByName(AdminWindow)

    def retranslateUi(self, AdminWindow):
        _translate = QtCore.QCoreApplication.translate
        AdminWindow.setWindowTitle(_translate("AdminWindow", "MainWindow"))
        self.adding.setText(_translate("AdminWindow", "Добавить"))
        self.img.setText(_translate("AdminWindow", "Фото"))
        self.exit.setText(_translate("AdminWindow", "Выйти"))
        self.label_2.setText(_translate("AdminWindow", "Школа"))
        self.label_3.setText(_translate("AdminWindow", "Класс"))
        self.label_4.setText(_translate("AdminWindow", "Пол"))
        self.label_5.setText(_translate("AdminWindow", "Дата рождения"))
        self.save_data.setText(_translate("AdminWindow", "сохранить"))
        self.delete_data.setText(_translate("AdminWindow", "удалить"))
        self.upload_foto.setText(_translate("AdminWindow", "Загрузить фото"))
        self.pass_manager.setText(_translate("AdminWindow", "Менеджер паролей"))

class AdminWindow(QMainWindow, Ui_AdminWindow):
    def __init__(self, parent=None):
        super(AdminWindow, self).__init__(parent)

        self.setupUi(self)
        self.setWindowTitle('AdminWindow')
        # self.marks.itemChanged.connect(self.item_changed) из-за неё не работает
        self.table()
        self.modified = {}
        self.titles = None

    def table(self):
        subjects = ['русский', "математика", "литература", "физика", "английский"]
        appraisal = [("4 4 4 4", "5 5 5 5")]

        self.marks.setRowCount(len(subjects))  # заполняем таблицу с оценками
        self.marks.setColumnCount(3)
        self.marks.setHorizontalHeaderLabels(('Предмет', 'Оценки', 'Итог'))
        header = self.marks.horizontalHeader()
        header.setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch)
        header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents)
        i = 0
        for j in subjects:
            self.marks.setItem(i, 0, QtWidgets.QTableWidgetItem(j))
            if appraisal[0][0] is not None:
                self.marks.setItem(i, 1, QtWidgets.QTableWidgetItem(appraisal[0][0]))
                z = appraisal[0][0].split(" ")
                z = [i for i in z if i != ""]
                x = [int(i) for i in z]
                x = sum(x) / len(x)
                self.marks.setItem(i, 2, QtWidgets.QTableWidgetItem(str(x)))
            else:
                self.marks.setItem(i, 1, QtWidgets.QTableWidgetItem(""))
                self.marks.setItem(i, 2, QtWidgets.QTableWidgetItem(""))
            i += 1

    def item_changed(self, item):
        # Если значение в ячейке было изменено,
        # то в словарь записывается пара: название поля, новое значение
        self.modified[self.titles[item.column()]] = item.text()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = AdminWindow()
    ex.show()
    sys.exit(app.exec())

Просто забыл вставить
self.titles и
self.modified. Поправил.

Вы вставили данные переменные не в то место, т.е. после того места, когда они нужны в использовании.
Вы должны всегда помнить, что ключи в словаре - должны быть уникальными.
Вам недостаточно в качестве ключа использовать название колонки, надо добавить и позицию строки, тогда вы однозначно идентифицируете, что у вас в каждой ячейки таблицы.

from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPixmap, QImage
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
import sqlite3

class Ui_AdminWindow(object):
    def setupUi(self, AdminWindow):
        AdminWindow.setObjectName("AdminWindow")
        AdminWindow.resize(434, 513)
        self.centralwidget = QtWidgets.QWidget(AdminWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.adding = QtWidgets.QPushButton(self.centralwidget)
        self.adding.setGeometry(QtCore.QRect(220, 0, 101, 31))
        self.adding.setObjectName("adding")
        self.img = QtWidgets.QLabel(self.centralwidget)
        self.img.setGeometry(QtCore.QRect(0, 40, 201, 221))
        self.img.setObjectName("img")
        self.marks = QtWidgets.QTableWidget(self.centralwidget)
        self.marks.setGeometry(QtCore.QRect(0, 280, 431, 191))
        self.marks.setObjectName("marks")
        self.marks.setColumnCount(0)
        self.marks.setRowCount(0)
        self.exit = QtWidgets.QPushButton(self.centralwidget)
        self.exit.setGeometry(QtCore.QRect(330, 0, 101, 31))
        self.exit.setObjectName("exit")
        self.students = QtWidgets.QComboBox(self.centralwidget)
        self.students.setGeometry(QtCore.QRect(0, 0, 211, 31))
        self.students.setObjectName("students")
        self.formLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.formLayoutWidget.setGeometry(QtCore.QRect(220, 40, 211, 101))
        self.formLayoutWidget.setObjectName("formLayoutWidget")
        self.formLayout = QtWidgets.QFormLayout(self.formLayoutWidget)
        self.formLayout.setContentsMargins(0, 0, 0, 0)
        self.formLayout.setObjectName("formLayout")
        self.label_2 = QtWidgets.QLabel(self.formLayoutWidget)
        self.label_2.setObjectName("label_2")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_2)
        self.school = QtWidgets.QLineEdit(self.formLayoutWidget)
        self.school.setObjectName("school")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.school)
        self.label_3 = QtWidgets.QLabel(self.formLayoutWidget)
        self.label_3.setObjectName("label_3")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_3)
        self.class_student = QtWidgets.QLineEdit(self.formLayoutWidget)
        self.class_student.setObjectName("class_student")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.class_student)
        self.label_4 = QtWidgets.QLabel(self.formLayoutWidget)
        self.label_4.setObjectName("label_4")
        self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_4)
        self.gender = QtWidgets.QLineEdit(self.formLayoutWidget)
        self.gender.setObjectName("gender")
        self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.gender)
        self.label_5 = QtWidgets.QLabel(self.formLayoutWidget)
        self.label_5.setObjectName("label_5")
        self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_5)
        self.dob = QtWidgets.QLineEdit(self.formLayoutWidget)
        self.dob.setObjectName("dob")
        self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.dob)
        self.save_data = QtWidgets.QPushButton(self.centralwidget)
        self.save_data.setGeometry(QtCore.QRect(280, 180, 75, 23))
        self.save_data.setObjectName("save_data")
        self.delete_data = QtWidgets.QPushButton(self.centralwidget)
        self.delete_data.setGeometry(QtCore.QRect(360, 180, 75, 23))
        self.delete_data.setObjectName("delete_data")
        self.upload_foto = QtWidgets.QPushButton(self.centralwidget)
        self.upload_foto.setGeometry(QtCore.QRect(340, 150, 89, 23))
        self.upload_foto.setObjectName("upload_foto")
        self.pass_manager = QtWidgets.QPushButton(self.centralwidget)
        self.pass_manager.setGeometry(QtCore.QRect(280, 230, 151, 23))
        self.pass_manager.setObjectName("pass_manager")
        AdminWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(AdminWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 434, 21))
        self.menubar.setObjectName("menubar")
        AdminWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(AdminWindow)
        self.statusbar.setObjectName("statusbar")
        AdminWindow.setStatusBar(self.statusbar)

        self.retranslateUi(AdminWindow)
        QtCore.QMetaObject.connectSlotsByName(AdminWindow)

    def retranslateUi(self, AdminWindow):
        _translate = QtCore.QCoreApplication.translate
        AdminWindow.setWindowTitle(_translate("AdminWindow", "MainWindow"))
        self.adding.setText(_translate("AdminWindow", "Добавить"))
        self.img.setText(_translate("AdminWindow", "Фото"))
        self.exit.setText(_translate("AdminWindow", "Выйти"))
        self.label_2.setText(_translate("AdminWindow", "Школа"))
        self.label_3.setText(_translate("AdminWindow", "Класс"))
        self.label_4.setText(_translate("AdminWindow", "Пол"))
        self.label_5.setText(_translate("AdminWindow", "Дата рождения"))
        self.save_data.setText(_translate("AdminWindow", "сохранить"))
        self.delete_data.setText(_translate("AdminWindow", "удалить"))
        self.upload_foto.setText(_translate("AdminWindow", "Загрузить фото"))
        self.pass_manager.setText(_translate("AdminWindow", "Менеджер паролей"))

class AdminWindow(QMainWindow, Ui_AdminWindow):
    def __init__(self, parent=None):
        super(AdminWindow, self).__init__(parent)

        self.setupUi(self)

        self.modified = {}                             # +
        self.titles = ('Предмет', 'Оценки', 'Итог')    # - None, + ('Предмет', 'Оценки', 'Итог')

        self.setWindowTitle('AdminWindow')
        self.marks.itemChanged.connect(self.item_changed)   #из-за неё не работает
        self.table()

### -       self.modified = {}
### -       self.titles = None

    def table(self):
        subjects = ['русский', "математика", "литература", "физика", "английский"]
        appraisal = [("4 4 4 4", "5 5 5 5")]

        self.marks.setRowCount(len(subjects))  # заполняем таблицу с оценками
        self.marks.setColumnCount(3)

#        self.marks.setHorizontalHeaderLabels(('Предмет', 'Оценки', 'Итог'))
        self.marks.setHorizontalHeaderLabels(self.titles)                      # +++

        header = self.marks.horizontalHeader()
        header.setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch)
        header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents)
        i = 0
        for j in subjects:
            self.marks.setItem(i, 0, QtWidgets.QTableWidgetItem(j))
            if appraisal[0][0] is not None:
                self.marks.setItem(i, 1, QtWidgets.QTableWidgetItem(appraisal[0][0]))
                z = appraisal[0][0].split(" ")
                z = [i for i in z if i != ""]
                x = [int(i) for i in z]
                x = sum(x) / len(x)
                self.marks.setItem(i, 2, QtWidgets.QTableWidgetItem(str(x)))
            else:
                self.marks.setItem(i, 1, QtWidgets.QTableWidgetItem(""))
                self.marks.setItem(i, 2, QtWidgets.QTableWidgetItem(""))
            i += 1

    def item_changed(self, item):
        # Если значение в ячейке было изменено,
        # то в словарь записывается пара: название поля, новое значение

        self.modified['row:{} {}'.format(item.row(), self.titles[item.column()])] = item.text()

        # Посмотрите, что происходит, когда вы запускаете приложение
        # и кода вы редактируете таблицу
        print(f"self.modified: {self.modified}")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = AdminWindow()
    ex.show()
    sys.exit(app.exec())


Определить образуют ли элементы массива, расположенные после последнего нулевого, убывающую последовательность
Дан одномерный массив числовых значений, насчитывающий N элементов. Определить образуют ли элементы массива, расположенные после последнего нулевого, убывающую последовательность.
<code>
import random
N = random.randint(1,10)
arr=[random.randint(-100,100) for i in range(N)]
print(arr)
k=1

for i in range(0,N):
  if arr[i]<0:
    break
  if arr[i]>=0:
    if arr[i]>arr[i+1] and arr[i+1]>=0:
      k=1
      break
    if arr[i] > arr[i+1]:
      k=2
if k==1:
  print("Нет убывающей последовательности")
elif k==2:
  print("Убывающая последовательность")

</code>
В этом коде определяет среди тех, которые расположены перед первым отрицательным элементом. Как переделать код по заданию?

Я добавил ноль, чтоб обязательно был :)
<code>
import random
N = random.randint(5,10)
arr = [random.randint(-100,100) for i in range(N-1)] +[0]
random.shuffle(arr)

k = len(arr) - arr[::-1].index(0)
arr = arr[k:]
print((len(arr) > 1) and all(arr[i] > arr[i+1] for i in range(len(arr)-1)))
</code>
Этот код возвращает False, если рассматриваемая последовательность состоит менее, чем из двух чисел


Как вызвать событие кликом по столбцу (BarChart) в PyQt5
Хочу вывести в консоль индекс стобца при нажатии мыши. Для примера скидываю свою реализацию
<code>
from PyQt5.QtChart import *
from PyQt5.Qt import *
from PyQt5.QtGui import QPainter
import random

class MainWidow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.resize(800 ,500)
        series = self.append_series()
        self.chart = QChart()
        self.chart.addSeries(series)
        self.chart.setTitle("Simple percentbarchart example")

        chartView = QChartView(self.chart)
        chartView.setRenderHint(QPainter.Antialiasing)

        self.setCentralWidget(chartView)

    def append_series(self):
        set0 = QBarSet("Min")
        set1 = QBarSet("Mid")
        set2 = QBarSet("Max")

        set0.append([random.randint(0, 10) for i in range(5)])
        set1.append([random.randint(0, 10) for i in range(5)])
        set2.append([random.randint(0, 10) for i in range(5)])

        series = QStackedBarSeries()

        series.append(set0)
        series.append(set1)
        series.append(set2)
        series.setBarWidth(1)

        return series

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

У QStackedBarSeries есть сигнал clicked, что вернет индекс столбца и по какой части попали при клике.
Добавьте строку
series.clicked.connect(self._on_click_series) и метод:

def _on_click_series(self, index, bar_set):
    print(index, bar_set)

Пример:

from PyQt5.QtChart import *
from PyQt5.Qt import *
from PyQt5.QtGui import QPainter
import random

class MainWidow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.resize(800 ,500)
        series = self.append_series()
        self.chart = QChart()
        self.chart.addSeries(series)
        self.chart.setTitle("Simple percentbarchart example")

        chartView = QChartView(self.chart)
        chartView.setRenderHint(QPainter.Antialiasing)

        self.setCentralWidget(chartView)

    def append_series(self):
        set0 = QBarSet("Min")
        set1 = QBarSet("Mid")
        set2 = QBarSet("Max")

        set0.append([random.randint(0, 10) for i in range(5)])
        set1.append([random.randint(0, 10) for i in range(5)])
        set2.append([random.randint(0, 10) for i in range(5)])

        series = QStackedBarSeries()
        series.clicked.connect(self._on_click_series)

        series.append(set0)
        series.append(set1)
        series.append(set2)
        series.setBarWidth(1)

        return series

    def _on_click_series(self, index, bar_set):
        print(index, bar_set.label())

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    window  = MainWidow()
    window.show()
    sys.exit(app.exec_())


Вывести на экран 1 строку матрицы в обратном порядке
Помогите исправить код
<code>
import numpy as np
c=np.random.randint(100, size=(4,5))
print(c)
print(c[::-1])
</code>

Попробуйте так, должно сработать
<code>
import numpy as np
c=np.random.randint(100, size=(4,5))
print(c)
print(c[0,::-1]
</code>


Разбить (партиционировать) CSV файл по столбцу
Есть исходный CSV более 94000 строк. Нужно разбить этот файл на несколько отдельных CSV файлов. Критерий - это определенный бренд в столбце 5. Делаю так:

import csv

with open('first.csv') as csvfile:
    reader = csv.DictReader(csvfile,delimiter=';')
    headers = reader.fieldnames
    print(headers[4])
#Get unique set of brands
    myset = set()
    for row in reader:
        myset.add(row[headers[4]])
        for brand in myset:
            filename = brand +".csv"
            with open(filename, 'a', newline='') as outfile:
                writer = csv.DictWriter(outfile, fieldnames=headers, extrasaction='ignore')
                if row[headers[4]] == brand:
                    writer.writeheader()
                    writer.writerow(row)

В итоге получаю несколько файлов по брендам и с нужными строками. Но из-за цикла получаю строки заголовком
header.
Как вынести запись
header только в начале файла?

Пример исходного CSV файла:

ID,brand,val
1,aaa,57
2,bbb,58
3,ccc,33
4,aaa,5
5,ddd,55
6,aaa,84
7,bbb,17
8,ddd,38
9,ccc,5
10,aaa,86
11,ccc,69
12,ddd,83

Решение с использованием модуля Pandas:

import pandas as pd   #  conda install pandas | pip install pandas

df = pd.read_csv(r"C:\Temp\data.csv")

_ = df.groupby("brand").apply(lambda x: x.to_csv(fr"c:\temp\{x.name}.csv", index=False))

Результат:
C:\Temp\aaa.csv

ID,brand,val
1,aaa,57
4,aaa,5
6,aaa,84
10,aaa,86

C:\Temp\bbb.csv

ID,brand,val
2,bbb,58
7,bbb,17

C:\Temp\ccc.csv

ID,brand,val
3,ccc,33
9,ccc,5
11,ccc,69

C:\Temp\ddd.csv

ID,brand,val
5,ddd,55
8,ddd,38
12,ddd,83


Классы в питоне и tkinter
Помогите, пожалуйста, понять что я упускаю. Пытаюсь разобраться с классами в питоне. Сделал простейшую программку. Ее задача рисовать шарик, удалять его и рисовать его в другом месте. Методом структурного программирования это легко получается, а вот при попытке сделать класс "шарик" и двигать его получается ерунда. В комментариях описал ход своих мыслей. Буду очень благодарен.
<code>
from tkinter import *
from random import randrange as rnd, choice

class Ball:
#Шарик со случайными координатами и цветом в пределах канваса
    def __init__(self):
        self.x = rnd(100, 700)
        self.y = rnd(100, 500)
        self.r = rnd(30, 50)
        colors = ['red','orange','yellow','green','blue']
        canv.create_oval(self.x-self.r, self.y-self.r,
                                     self.x+self.r,self.y+self.r,
                                     fill = choice(colors), width=1)

def main():
    global canv
    root = Tk()
    root.geometry('800x600')
    canv = Canvas(root,bg='white')
    canv.pack(fill=BOTH,expand=1)
    new_ball=Ball()         #Создаю экземпляр шарика. Объект новый шарик
    new_ball                #Рисую его на холсте
    print('x=',new_ball.x,  #Печатаю координвты, вижу что они доступны
          'y=',new_ball.y,
          'r=',new_ball.r)
    canv.delete(new_ball)   #Хочу удалить с холста но не удаляется
    new_ball.x=100          #Меняю атрибут экземпляра шара (координата х)
    print('x=',new_ball.x)  #Вижу что успешно поменялось значение
    new_ball                #Хочу нарисовать еще один с новой х но ничего
                            #не происходит

if __name__ == '__main__':
    main()
</code>

Комментарии по вашему коду

new_ball                #Рисую его на холсте

На самом деле нет: эта строка вообще ничего не делает, а шарик уже нарисован при создании объекта
Ball, когда в методе
__init__ был вызван метод
canv.create_oval.

canv.delete(new_ball)   #Хочу удалить с холста но не удаляется

Конечно не удаляется, потому что холст ничего не знает о вашем классе
Ball. Метод
delete холста должен получать на вход строку с идентификатором удаляемого объекта (например, то что вернул метод
create_oval) или тегом удаляемых объектов (к нескольким объектам на холсте можно привязать текстовый тег, и работать с ними как с одним объектом).

new_ball                #Хочу нарисовать еще один с новой х но ничего
                        #не происходит

То же самое что и в первом случае - эта строка ничего не делает.
Вот рабочий пример:

from tkinter import *
from random import randrange as rnd, choice
import time

class Ball:
    # Шарик со случайными координатами и цветом в пределах канваса
    def __init__(self, canv):
        self.canv = canv
        self.x = rnd(100, 700)
        self.y = rnd(100, 500)
        self.r = rnd(30, 50)
        colors = ['red','orange','yellow','green','blue']
        self.id = canv.create_oval(self.x-self.r, self.y-self.r,
                                   self.x+self.r, self.y+self.r,
                                   fill=choice(colors), width=1)

    def delete(self):
        self.canv.delete(self.id)

    def move(self):
        self.canv.coords(self.id, self.x-self.r, self.y-self.r,
                                  self.x+self.r, self.y+self.r)

def main():
    root = Tk()
    root.geometry('800x600')
    canv = Canvas(root,bg='white')
    canv.pack(fill=BOTH,expand=1)

    # Вместо использования глобальной переменной передаем холст при создании объекта
    new_ball = Ball(canv)
    print('x=',new_ball.x,
          'y=',new_ball.y,
          'r=',new_ball.r)

    root.update()  # Обновляем окно, чтобы изменения (только что созданный шарик) отобразились до паузы
    time.sleep(1)

    new_ball.x = 100
    print('x=', new_ball.x)
    new_ball.move()  # Переместить шарик по координатам, которые в нем хранятся
    root.update()  # Обновляем окно, чтобы изменения отобразились до паузы
    time.sleep(1)

    new_ball.delete()  # Удаляем шарик с помощью его метода
    # После удаления в данной реализации класса Ball заново отобразить его не получится

    root.mainloop()

if __name__ == '__main__':
    main()

Я использовал
time.sleep, чтобы изменения были видны глазу (без
sleep и
root.update мы бы увидели только конечное состояние после удаления шарика).
Вообще,
time.sleep в оконных приложениях лучше не использовать, т.к. пока длится пауза окно подвисает. Вместо этого лучше использовать планировать выполнение действий (функции) с помощью метода
root.after(delay, func), где
delay - задержка,
func - функция которую нужно выполнить после задержки.


Использование функции filter2D() в open cv
С помощью функции cv2.filter2D() нужно создать фильтр, который находит в изображении только прямые, наклоненные под углом 60 градусов. Примените его к достаточно интересной сцене и выведите результат
<code>
car = cv2.imread("image.jpg")
kernel = np.ones((5,5))
#cv2.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])
DST=cv2.filter2D(car, 14, kernel)
cv2.imshow("DST",DST)
cv2.waitKey(0)
cv2.destroyAllWindows()
</code>
Я немного не осилил документацию и до меня не дошло, как задать именно 60 градусов в данной функции. Буду рад, если кто-нибудь поможет с реализацией и объяснит,как работает anchor в данной функции.

Создайте ядро (kernel) размером не менее 5x5, заполните его такими значениями, будто через центр нарисована линия  под углом 60 градусов. Значения на линии, задайте положительными, скажем, 2, вне линии поблизости - отрицательными -1, а далеко - нулевыми. Сумма всех значений должны быть в районе 0..1. Пример для 45 градусов:
<code>
 -1 -1  2
 -1  2 -1
  2 -1 -1
</code>
anchor - базовая точка, которая определяется для "сдвинутых" ядер. Сумма произведений значений ядра со значениями источника (свертка) назначается как раз точке с этими координатами относительно ядра в приёмнике.


как вернуться обратно в цикл(условно) для проверки?
Я хочу, чтобы пользователь выбрал только первое или второе значение, если он введёт что-то другое, то появится надпись, что нужно выбрать что-то одно из предоставленного...Думаю, что нужно использовать цикл for, но пока что не представляю, как это сделать. В коде я указал комментариями, в чём я не могу разобраться
<code>
tool = input()
tool_des = 1
while tool_des == 1:
if tool == str(1):
    tool = "Ручка"
    print("Что ж, ты выбрал ручку, похвально!")
    tool_des = 0
elif tool == str(2):
    tool = "Нож"
    print("Что ж, ты выбрал нож, похвально!")
    tool_des = 0
elif tool == # что нужно сюда написать, если пользователь введет что-то рандомное?
    print("Ты не следуешь моим указаниям, выбери что-то одно...")
    print ("1)ручка \n2)нож")
    tools_des = 1
    #loop, не знаю, как вернуться снова на проверку, а goto использовать в коде не хочу
 print(tools)
input()
</code>

После безуспешный попыток с @Эникейщик объяснить в комментариях, пишу сюда
<code>
tool_des = 1
while tool_des == 1:
  tool = input()
  if tool == '1':
    tool = "Ручка"
    print("Что ж, ты выбрал ручку, похвально!")
    tool_des = 0
  elif tool == '2':
    tool = "Нож"
    print("Что ж, ты выбрал нож, похвально!")
    tool_des = 0
  else :
    print("Ты не следуешь моим указаниям, выбери что-то одно...")
    print ("1)ручка \n2)нож")
    #loop, не знаю, как вернуться снова на проверку, а goto использовать в коде не хочу
print(tool)
</code>


Как преобразовать словарь в строку Python 3?
Дано список словарей:
<code>
dictionary = [{'персона': 'человек',
              'марафон': 'гонка бегунов длиной около 26 миль',
              'противостоять': 'оставаться сильным, несмотря на давление',
              'бежать': 'двигаться со скоростью'}]
</code>
Как преобразовать их в строку и отформатировать чтобы выводились примерно так:
Персона: человек;
Марафон: гонка бегунов;
Противостоять: оставаться сильным.

dictionary = [{'персона': 'человек',
              'марафон': 'гонка бегунов длиной около 26 миль',
              'противостоять': 'оставаться сильным, несмотря на давление',
              'бежать': 'двигаться со скоростью'}]

result = '; '.join([f'{key.capitalize()}: {value}' for key, value in dictionary[0].items()])

print(result)


Почему у целого числа нельзя вызвать метод напрямую?
Вопрос особого практического смысла не имеет, просто стало любопытно, почему в Python нельзя вызвать метод напрямую у числа? Например, я могу сделать это со строкой:

'3'.__add__('4') # 34

Или со списком:

[].__add__([3]) # [3]

Но не могу сделать так с числом:

3.__add__(4) # SyntaxError: invalid syntax

При этом я могу записать 3 в переменную и тогда все, естественно, ок:

x = 3
x.__add__(4) #7

Потому что с точки зрения парсера у вас написано число (float)
3., а за ним вызов
__add__(4) и получается синтаксическая ошибка. Нужно объяснить парсеру, что вы вовсе не имели в виду число
3., например заключив число в скобки или поставив пробел перед точкой:

>>> (3).__add__(4)
7
>>> 3 .__add__(4)
7

Ещё один вариант
3..__add__(4) (=
7.0), но результат будет числом с плавающей точкой, обычно это не то что требуется.


Не сохраняется фото в PyQt
Изображение должно загрузиться и по нажатию на кнопку "Сохранить фото"  - сохраниться в папке по относительному пути
self.pixmap.save("/images/").
Как правильно выполнить сохранение файла?

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog, QApplication, QMainWindow
from PyQt5.QtGui import QPixmap

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(198, 236)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(0, 0, 91, 23))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(100, 0, 91, 23))
        self.pushButton_2.setObjectName("pushButton_2")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 30, 181, 161))
        self.label.setObjectName("label")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 198, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Загрузить фото"))
        self.pushButton_2.setText(_translate("MainWindow", "Сохранить фото"))
        self.label.setText(_translate("MainWindow", "TextLabel"))

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.upload_image)
        self.pushButton_2.clicked.connect(self.adding)

    def upload_image(self):
        self.imagePath, _ = QFileDialog.getOpenFileName(self, "Select Image", "",
                                                        "Image Files (*.png *.jpg *.jpeg *.bmp)")
        print(self.imagePath)
        self.pixmap = QPixmap(self.imagePath)
        self.label.setPixmap(self.pixmap.scaled(301, 281))

    def adding(self):
        self.pixmap.save("/images/")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MainWindow()
    ex.show()
    sys.exit(app.exec_())

bool QPixmap::save(const QString &fileName, const char *format = nullptr, int quality = -1) const
Сохраняет растровое изображение в файл с заданным именем файла, используя указанный формат файла изображения и коэффициент качества. Возвращает true в случае успеха; в противном случае возвращает false.

<code>
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog, QApplication, QMainWindow
from PyQt5.QtGui import QPixmap

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(198, 236)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(0, 0, 91, 23))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(100, 0, 91, 23))
        self.pushButton_2.setObjectName("pushButton_2")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 30, 181, 161))
        self.label.setObjectName("label")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 198, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Загрузить фото"))
        self.pushButton_2.setText(_translate("MainWindow", "Сохранить фото"))
        self.label.setText(_translate("MainWindow", "TextLabel"))

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.upload_image)
        self.pushButton_2.clicked.connect(self.adding)

    def upload_image(self):
        self.imagePath, _ = QFileDialog.getOpenFileName(self, "Select Image", "",
                                                        "Image Files (*.png *.jpg *.jpeg *.bmp)")
        print(self.imagePath)
        self.pixmap = QPixmap(self.imagePath)
        self.label.setPixmap(self.pixmap.scaled(301, 281))

    def adding(self):
#        self.pixmap.save("/images/")
        if self.imagePath:
            _path = self.imagePath.split('/')[-1]
            print(_path)
            self.pixmap.save("images/{}".format(_path))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MainWindow()
    ex.show()
    sys.exit(app.exec_())
</code>


Как добавить строку в определенный столбец ttk.Treeview
Не могу разобраться никак...
Есть программа, которая открывает таблицу excel, и есть таблица от tkinter.ttk. Как мне добавить строки в определенный столбец, а не в один?
<code>
self.tree = ttk.Treeview(self, columns=('1', '2', '3'), height=10, show='headings')
self.tree.column('1', width=setting, anchor=to.CENTER)
self.tree.column('2', width=setting, anchor=to.CENTER)
self.tree.column('3', width=setting, anchor=to.CENTER)

self.tree.heading('1', text='#1')
self.tree.heading('2', text='#2')
self.tree.heading('3', text='#3')

wb = xlrd.open_workbook('test.xlsx')
sh = wb.sheet_by_index(0)

for j in range(3):
    for i in range(5):
        self.tree.insert(' ', 'end', values=(sh.row_values(j)[i])
</code>
Как сделать, чтобы значения из таблицы xlsx добавлялись в 1, 2 и 3юю колонку таблицы Treeview?

Вот здесь вы вставляете по одной ячейке в отдельные строки:

for j in range(3):
    for i in range(5):
        self.tree.insert(' ', 'end', values=(sh.row_values(j)[i])

Нужно вставлять строку целиком, как-то так:

for j in range(3):
    self.tree.insert(' ', 'end', values=sh.row_values(j))


Проставить индексы абзацев текстов в pandas
Всем привет, интересует такая задача:
Имеется на руках csv файл с текстами в каждой ячейке. Тексты разбиваются таким образом по абзацам, что каждый абзац попадает в отдельную ячейку. Необходимо добавить два столбца в датафрейм: в первом будет номер текста, а во втором номер абзаца в тексте.
К примеру имеем текст foo и bar:
<code>
| Абзац     | Индекс_Текста     | Индекс_Абзаца     |
|-------    |---------------    |---------------    |
| foo_0     | 0                 | 0                 |
| foo_1     | 0                 | 1                 |
| foo_2     | 0                 | 2                 |
| foo_3     | 0                 | 3                 |
| bar_0     | 1                 | 0                 |
| bar_1     | 1                 | 1                 |
| bar_2     | 1                 | 2                 |
</code>
С задачей как разбить по абзацам и сделать индексы_текста я справился, так что предположим что у нас есть некий датафрейм с 1 и 2 столбцами. Как сделать индекс абзаца?

cumcount расставитт последовательные номера в каждой группе
<code>
исходный df

   Абзац  Индекс_Текста
0  foo_0              0
1  foo_1              0
2  foo_2              0
3  foo_3              0
4  bar_0              1
5  bar_1              1
6  bar_2              1

df['Индекс_Абзаца'] = df.groupby('Индекс_Текста').cumcount()

   Абзац  Индекс_Текста  Индекс_Абзаца
0  foo_0              0              0
1  foo_1              0              1
2  foo_2              0              2
3  foo_3              0              3
4  bar_0              1              0
5  bar_1              1              1
6  bar_2              1              2
</code>


Необходимость именования функции содержащую в названии тип возвращаемой структуры данных
Стараюсь писать код так, чтобы при его чтении было понятно что происходит. Часто для понимания функции в местах его вызова нужно понимать тип структуры данных возвращаемой функцией, поэтому я придерживаюсь правила писать тип в имени функции.
Примеры таких имен:
<code>
get_tuple_of_tuples...
get_tuple_of_dicts...
</code>
и так далее. В декларации самих функций с помощью тайпинга указаны типы данных передаваемых параметров и тип структуры данных возвращаемой функцией.
Правильно ли я вообще поступаю, что в имени функции отражаю тип возвращаемой структуры? Если нет, то как правильно.

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

from typing import Dict, Tuple, List

get_bananas(palms: List[Tuple]) -> Tuple[Tuple]:
    ''' Function get bananas from palms '''
...
get_oranges(trees: List[Dict]) -> Tuple[Dict]
    ''' Function get oranges from trees '''
...

Через какой тип питона они реализованны можно описать через
typing hints. Важнее понять что нужно поместить в функцию и что выйдет из неё. Если получаем телефон пользователя - пишем
get_phone а не
get_string и не
get_phone_as_string.
Используйте help строки для краткого, но подробного описания функций: что принимает, что возвращает или какие операции производит.


Статические экземпляры классов в Flask
К примеру, есть код:

from flask import Flask

class Foo:
    def __init__(self):
        self.var = "1"

    def change(self):
        self.var = "2"

foo = Foo()
foo.change()

app = Flask(__name__)

@app.route("/test", methods=["GET"])
def test():
    return foo.var

if __name__ == "__main__":
    app.run()

Как в данном случае будет работать инициализация и изменение экземпляра класса
Foo? Это произойдёт один раз при запуске сервера? Или это будет происходить при каждом обращении к серверу? Где про это можно почитать?

И если это происходит при каждом обращении, то можно ли как-то зафиксировать статический экземпляр инициализированного и изменённого экземпляра класса
Foo для всей сессии работы сервера?

Можно было это самостоятельно проверить с помощью отметок времени.

from flask import Flask
from datetime import datetime

class Foo:
    def __init__(self):
        self.var = "None"

    def change(self):
        self.var = str(datetime.now()) # Устанавливаем время, когда был вызван метод

foo = Foo()
foo.change()

app = Flask(__name__)

@app.route("/test", methods=["GET"])
def test():
    return "In class: " + foo.var + "
Current datetime: " + str(datetime.now())

if __name__ == "__main__":
    app.run()

При обновлении страницы видно, что значение, взятое из экземпляра класса, не меняется.


Нужно считать числа с файла
Есть проблема, начал изучать Python, и мне нужно, например:
Есть файл под названием
list.txt;
В него записаны 4 числа, например:

10 20 30 5
Как считать числа с файла и присвоить что:
a=10, b=20, c=30, d=5?

list.txt

10 20 30 5

main.py

with open('list.txt') as f:
    a, b, c, d = f.read().split()

print('a={}, b={}, c={}, d={}'.format(a, b, c, d))


Угадай число (цикл while)

Напишите программу-игру. Компьютер загадывает случайное число, пользователь
  пытается его угадать. Пользователь вводит число до тех пор. пока не угадает или не
  введет слово «Выход». Компьютер сравнивает число с введенным и сообщает
  пользователю больше оно или меньше загаданного.

Мне не нравится, что первый вопрос по сути задается дважды. Что мне нужно исправить, чтобы сразу было сказано меньше число или больше задуманного?
<code>
from random import randint
N=randint(1,10)
K=int(input("Угадайте целое число от 1 до 10:"))
while K!=N:
    K=int(input("Повторите попытку:"))
    if K<N:
        print("Ваше число меньше, чем задумал компьютер")
    elif K>N:
        print("Ваше число больше, чем задумал компьютер")
    else:
        print("Вы угадали")
print(K)
print(N)
</code>

Если я правильно понял проблему, то так:
<code>
while K!=N:
    if K<N:
        print("Ваше число меньше, чем задумал компьютер")
    elif K>N:
        print("Ваше число больше, чем задумал компьютер")
    K=int(input("Повторите попытку:")
print("Вы угадали")
</code>


Не пойму, почему выражение не работает при больших значениях (a / 2) * (a - 1)
У меня есть простой алгоритм:

a = int(input())
b = int((a / 2) * (a - 1))
print (b)

Я не пойму, почему при больших значениях вывод искажается.
Например, при вводе
1000000000000 следует вывод
49999999999950003057459,
а должно быть
499999999999500000000000.
Python 3.8

Перепишите ваш  код в целочисленное деление:

a = int(input())
b = a * (a - 1) // 2
print (b)

и всё заработает.
В Python 3+
a/2 дает результат
float.
Дело в том, что a * (a - 1) всегда четное, а вам нужно целое значение.
Для этого вам нужно немного изменить порядок операций как я указал.


Вставить номер в список чтобы он оставался отсортированным [закрыт]

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

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

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

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

Нельзя использовать метод sort() и другие функции. Помогите советом
<code>
def nr_into(nr: int, num_list: list) -> list:
    """
    Return a list of numbers where the "nr" is added into the "num_list" so that the list keep going to be sorted.

    Built-in sort methods are not allowed.

    nr_into(5, []) -> [5]
    nr_into(5, [1,2,3,4]) -> [1,2,3,4,5]
    nr_into(5, [1,2,3,4,5,6]) -> [1,2,3,4,5,5,6]
    nr_into(0, [1,2,3,4,5]) -> [0,1,2,3,4,5,]

    """
</code>

def nr_into(nr, num_list):
    for i, (p, n) in enumerate(zip([float('-inf')] + num_list, num_list + [float('inf')])):
        if p < nr <= n:
            num_list.insert(i, nr)
            break
    return num_list


Решить уравнение питон [закрыт]

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

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

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

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

как решить такое уравнение?    -0,235612354x - 2,9862145 - 4/sqrt(pi)*2^(x^3)=0


как вставить переменные в simplify
a111=200
хочу вставить эту переменную но выходит ошибка

  formula = "a111+(x-0.2)0.9823456+(x-0.235)(x-0.2145)(-0.976123)"

from sympy import simplify

from sympy.parsing.sympy_parser import (
        parse_expr,
        standard_transformations,
        implicit_application,
        implicit_multiplication,
        implicit_multiplication_application,
        function_exponentiation)

transformations=(standard_transformations +
                 (implicit_multiplication,
                  implicit_application,
                  function_exponentiation,
                  ))

formula = "0.88522+(x-0.2)0.9823456+(x-0.235)(x-0.2145)(-0.976123)"
expr = parse_expr(formula,transformations=transformations)
simplified_formula = simplify(expr)
print(simplified_formula)


Проверить, находится ли слово внутри тега
Предположим есть следующие случаи:

1 `<b>text</b>`

2. `<b class="name">text</b>`

3.

<b class="
    name
   ">
text</b>

Как вытаскивать в этих случаях только слова
text?

Можно воспользоваться модулем
bs4 и распарсить
HTML.
Пример:

from bs4 import BeautifulSoup

def main():
    html = '<b class="name">text</b>'
    soup = BeautifulSoup(html, 'html.parser')

    result = soup.b.get_text()
    print(result)

if __name__ == '__main__':
    main()

stdout:

text


Символьные вычисления (упростить математическое выражение)
Есть вот такой пример:

0.88522+(x-0.2)*0.9823456+(x-0.235)(x-0.2145)*(-0.976123)

Необходимо преобразовать его к следующему виду (результат из
Wolfram Mathematica):

0.639547 + 1.42111 x - 0.976123 x^2

Как можно это реализовать в
python?

Воспользуйтесь модулем Sympy:

from sympy import simplify

from sympy.parsing.sympy_parser import (
        parse_expr,
        standard_transformations,
        implicit_application,
        implicit_multiplication,
        implicit_multiplication_application,
        function_exponentiation)

transformations=(standard_transformations +
                 (implicit_multiplication,
                  implicit_application,
                  function_exponentiation,
                  ))

formula = "0.88522+(x-0.2)0.9823456+(x-0.235)(x-0.2145)(-0.976123)"
expr = parse_expr(formula,transformations=transformations)
simplified_formula = simplify(expr)
print(simplified_formula)

результат:

-0.976123*x**2 + 1.4211128885*x + 0.6395469598775

PS установка Sympy


Можно ли получить имя класса, с которым связано поле модели Django?
Можно ли как-то узнать с каким классом связано поле
some_value объекта
some_object?

class SomeModel(models.Model):
    some_value = models.ForeignKey(OtherModel, on_delete=models.SET_DEFAULT, default=None, null=True)

some_object = SomeModel.objects.get(id=1)

Название класса текущего объекта в
some_value можно было бы получить как-нибудь так:

some_object = SomeModel.objects.get(id=1)
some_value_class = some_object.some_value.__class__.__name__

Но проблема в том, что
some_value может быть и
None, тогда я получу
NoneType. А как получить именно не класс текущего объекта, с которым связан мой объект, а название модели, которое используется в связи?


Создание объектов одного класса с независимыми полями
Изучая Python натолкнулся вот на такой казус:
<code>
class Vrm:
    arr = []

    def addArr(self, temp):
        self.arr.append(temp)

a = Vrm()
b = Vrm()

a.addArr(2)

print(b.arr[0]) #Тут будет результат 2
</code>
То есть, по-идее я считал, что должна быть ошибка, ведь для объекта b еще не добавлено данных данных, только для объекта "а". Но получается, что при создании нового объекта b, поле класса arr (которое является листом), содержит ссылку на уже созданный ранее массив. Этот массив был создан, при создании объекта "а". Получается, что у этих двух объектов одно поле arr на двоих. А как сделать, чтобы у них было свое персональное поле arr?
P.S. Посмотрел в интернете, но не могу сообразить как это правильно сделать.

То, что вы делает - это свойство класса. Чтобы было динамическое свойство объекта,  его надо и создавать через self
<code>
class Vrm:
    def __init__(self):
        self.arr = []

    def addArr(self, temp):
        self.arr.append(temp)

a = Vrm()
b = Vrm()

a.addArr(2)

print(a.arr)      # [2]
print(b.arr[0])   # IndexError: list index out of range on line 14
</code>


В таких случаях обычно используют трюк с методом
.cumsum(), который применяют к последовательности булевых значений, как показано в ответе @splash58.
Как это работает пошагово:

In [75]: df["<LAST>"].diff()
Out[75]:
0       NaN
1      10.0
2      10.0
3      10.0
4     550.0
5      10.0
6      20.0
7      10.0
8      10.0
9      10.0
10    410.0
11     10.0
12     10.0
13     10.0
14     10.0
Name: <LAST>, dtype: float64

теперь применяем логическое отрицание - это нужно потому что значение
False представлено в Python нулем и кумулятивная сумма для группы не будет изменяться. Т.е. нам надо получить такую последовательность
True /
False, для которой
True будет стоять только в начале каждой группы.

In [76]: df["<LAST>"].diff().gt(10)
Out[76]:
0     False   # <--- начало группы 0 (сумма всех элементов 0-ой группы будет равна 0)
1     False
2     False
3     False
4      True   # <--- начало группы 1
5     False
6      True   # <--- начало группы 2
7     False
8     False
9     False
10     True   # <--- начало группы 3
11    False
12    False
13    False
14    False
Name: <LAST>, dtype: bool

осталось только применить метод кумулятивной суммы:

In [77]: df["<LAST>"].diff().gt(10).cumsum()
Out[77]:
0     0
1     0    # False + False = 0
2     0    # False + False + False = 0
3     0    # False + False + False + False = 0
4     1    # (False + False + False + False) + True = 1
5     1    # (False + False + False + False) + True + False= 1
6     2    # (False + False + False + False) + (True + False) + True = 2
7     2    # ...
8     2
9     2
10    3
11    3
12    3
13    3
14    3
Name: <LAST>, dtype: int32

В последнем шаге мы фактически получили номера нужных нам групп.
Теперь по этому номеру группы можно сделать группировку:

In [78]: df.groupby(df["<LAST>"].diff().gt(10).cumsum()).groups
Out[78]:
{0: Int64Index([0, 1, 2, 3], dtype='int64'),
 1: Int64Index([4, 5], dtype='int64'),
 2: Int64Index([6, 7, 8, 9], dtype='int64'),
 3: Int64Index([10, 11, 12, 13, 14], dtype='int64')}

атрибут
.groups возвращает словарь с индексами элементов групп.


Перевод даты и времени в GMT в Python
проблема в чтении даты:
<code>
date = "20191104061459" #исходная дата

date = datetime.datetime.strptime(date, '%YYYY%m%d%f').date() # Строка перевода в дату - Ошибка, не удаётся спарсить дату.

date =time.strftime(date ,"%d.%m.%Y %I:%M %p %Z")

</code>

import datetime

date = "20191104061459"

date = datetime.datetime.strptime(date, '%Y%m%d%f')
print(date) # 2019-11-04 00:00:00.061459
date =date.strftime("%d.%m.%Y %I:%M %p %Z")
print(date) # 04.11.2019 12:00 AM


Алгоритм проверки правильности кошелька криптовалюты [закрыт]

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

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

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

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

Прошу помочь вас с моей проблемкой, сам не справлюсь. Нужно сделать алгоритмы проверки верности введённого кошелька BTC(уже есть), BTG, BCH, ETH, LTC, DASH, DOGE, на python, чистый или с костылями, не волнует. Буду благодарен за любую помощь.
Вот алгоритм проверки BTC на верность:
<code>
def chech_btc(btc):
    if len(btc) > 25 and len(btc) < 36 and (btc[0] == '1' or btc[0] == '3'):
        a = 0
        for i in range(len(btc) - 1):

            if btc[i].isalpha()== True or btc[i].isdigit() == True:
                a = a + 1
        if a == (len(btc) - 1):
            return 1
        else:
            return 0

    else:
        return 0
</code>

Узнаём спецификации:

BTC это строка, начинается с "1" или "3", длинной от 25 до 34. Цифры и буквы без 0 и ещё пары.
ETH это строка, начинается с "0x", 40 в длину, цифры и строчные буквы от "a" до "f".

(остальные спецификации узнаются аналогично, через Google)
Получаем регулярные выражения:

BTC это
"/^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$"
ETH это
"/^(0x)?[0-9a-f]{40}$"
...

(или пропуская первый шаг, сразу гуглим и находим их тут)
Используем примерно так:

def is_btc(source):
    return re.match(r'^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$', source) is not None

def is_eth(source):
    return re.match(r'^0x[a-fA-F0-9]{40}$', source) is not None

PS: Также можно использовать библиотеки для работы с кошельками. Например, для Ethereum:

from ethereum.utils import check_checksum

check_checksum('0xc1912fee45d61c87cc5ea59dae31190fffff232d')


Импорт из каталога верхнего уровня python
К своему стыду, споткнулся на детской проблеме и не могу понять вот какую вещь. Допустим есть вот такая структура файлов

/project
    /pack
        main.py
    utils.py

Я хочу импортировать в файл
main.py что-нибудь из
utils.py. Пытаюсь сделать это так:

from ..utils import some_function

При запуске
main.py получаю ошибку

attempted relative import with no known parent package

И не очень понимаю суть этой ошибки. Я знаю, что есть список
sys.path, в котором лежит список путей, относительно которых питон пытается найти модули. В этот список всегда входит текущий каталог, в котором лежит запускаемый файл. Две точки при импорте означают каталог на уровень выше. В чем тут противоречие и как правильно импортировать функцию в данном случае? Неужели добавлять в
sys.path верхний каталог самому?

Две точки сработают если файл маин был импортирован из каталога выше, и ещё надо чтоб утилс был в пакете.
У меня получился с такой структурой подобный проект.

/project
   /pack
      __init__.py
      main.py
   /utils
      __init__.py
      utils.py
   server.py

server.py:

from pack import main
main.main()

main.py

from ..utils.utils import some_function


Оператор "is". Один код - разные результаты [дубликат]

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

Как отключить кэширование маленьких объектов Python?

                                (1 ответ)

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

Используя оператор 'is' при одинаковом коде получаю разные результаты:
<code>
value1 = 257
value2 = 257

print(value1 is value2)
</code>
Если вводить данный код в IDLE, то результат будет False.
Если выполнять данный код в PyCharm, запустить файл.py или импортировать модуль результат будет True.
Из-за чего мы получаем разное поведение?
Python 3.7.4

TL;DR
  В ряде случаев результат может быть
True, но рассчитывать на это не стоит.

В интерактивном режиме каждая строчка кода компилируется отдельно, это не позволяет компилятору проводить более глобальные оптимизации кода, отсюда и разница в результатах.
Благодаря оптимизациям компилятора,
value1 и
value2 в некоторых версиях интерпретатора могут ссылаться на одно и тоже значение даже в таком примере

value1 = 128 * 2 + 1
value2 = 257
print(value1 is value2) # True в python 3.7 и False в более ранних версиях

Но, например, в таком случае оптимизация не сработает даже в python 3.7

value1 = 257
value2 = value1 + 0
print(value1 is value2) # False

И в таком примере переменные также будут указывать на разные объекты

value1 = 257
def f():
    value2 = 257
    print(value1 is value2) # False

f()

Другое дело, если значения попадают в пул заранее подготовленных объектов, тогда во всех более или менее актуальных версиях CPython оптимизация снова сработает. В данном случае оптимизация времени выполнения

value1 = 256
def f():
    value2 = 512
    value3 = value2 // 2
    print(value1 is value3) # True

f()

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


Можно ли создать установщик для python программы?
Можно ли сделать готовую программу с установщиком и если можно какие есть инструменты для создания установщика?

Если нужен именно установщик под Windows аля
setup.exe то сначала
pyinstaller для генерации всех нативных
dll и
exe, а затем
nsis для создания установщика. В результате получится
setup.exe с вашей программой, который при нужных настройках  установит программу в нужный каталог, создаст ключи в реестре, сделает ярлыки, создаст
uninstall.exe и много чего еще.


Переназначение боковых кнопок мыши(конфликт со стоковыми действиями)
Хочу написать прогу типа logitech options(переназначение клавиш) главной особенностью, которой будут жесты и возможность работы с любой мышкой.
Пока писал в idle  использовал ctypes и боковую кнопки мыши, где они не задействованы и я мог добавлять свои действия. А вот в chrome, мои действия также выполняются, но у них есть и стандартные действия назад/вперед, что сильно мешает мне! Как я могу скрыть нажатия кнопок от других программ или заблокировать их действия?
Какую библиотеку или функцию лучше использовать, чтобы это сделать?
Я использую этот код чтобы отследить нажатие кнопок:
<code>
from ctypes import windll, Structure, c_ulong, byref, c_ushort
import time

LBUTTON = 0x01             # Left mouse button
RBUTTON = 0x02               # Right mouse button
middle = 0x04
MIDDLEDOWN = 0x0020 # middle button down
MIDDLE_UP = 0x0040 # middle button up
blignyy = 0x05
dalnyy = 0x06
x=1
while x<10:
    windll.user32.GetKeyState.restype = c_ushort
    windll.user32.UnregisterHotKey(LBUTTON)
    print(windll.user32.GetKeyState(LBUTTON))
    time.sleep(0.1)
</code>
Возможно мне нужно не отслеживать кнопки, а нужно перехватить её нажатие или поменять её идентификатор, я новичок, но я уже прошерстил весь гугл по запросам qtpy,tkinter,ctypes блокировка, переназначение , перехват и я нашел только как отключить мышь и клавиатуру полностью, что мне не подходит, тк я использую жесты! Я в тупике(

Предыстория
Нашел глобальный хук для питона тут , но появилось ощущение, что мышь лагает и двигается не плавно, поэтому я решил поискать решения на других языках. AutoIT и библиотека mouseonevent.au3, было очень приятно познакомить, но появился баг после которого я терял возможно отправлять действия от нажатий, он возникал, когда я кликал по неактивным окнам. Видел темы на Stack Overflow с решением моего вопроса на с++, но не смог его запустить из-за проблем со стандартной библиотекой.
Решение
Остановился на языке С# с библиотекой LowLevelControls , она поддерживает все мои кнопки XButton1, XButton2, левую, правую, горизонтальную и вертикальную прокрутку. Для блокировки стандартного отклика кнопок надо вернуть true! Вот что я поменял в примере LowLevelControls.Sample2 для блокировки боковых кн:
<code>
           msHook.MouseDownEvent += (sender, vkCode, x, y, delta, injected) =>
        {
            if ((Keys)vkCode == Keys.XButton1) return true;
            if ((Keys)vkCode == Keys.XButton2) return true;
            return false;
        };
        msHook.MouseUpEvent += (sender, vkCode, x, y, delta, injected) =>
        {
            if ((Keys)vkCode == Keys.XButton1) return true;
            if ((Keys)vkCode == Keys.XButton2) return true;
            return false;
        };
</code>
Проблемы и замечания

После нажатия левой кнопки мыши консолька и мышь начинают
виснуть, но так только при активной консоли.
При блокировке перемещения курсора msHook.MouseMoveEvent
координаты мыши X и Y тоже блокируются, хотя на питоне, они менялись
не смотря на блокировку. Забавно, что курсор можно сдвинуть, но
через мгновенье он вернётся на место!


Массив решетка Python
Нужна помощь в решении задачи
Заполните прямоугольный массив целыми числами по образцу (нули стоят на пересечении строк и
столбцов с нечетными номерами, в остальных клетках стоят единицы).

Пример для n=5m=6
1 1 1 1 1 1
1 0 1 0 1 0
1 1 1 1 1 1
1 0 1 0 1 0
1 1 1 1 1 1

Все на что меня хватило

n, m = 5, 6
mtrx = [[((j+i)%2 + (i-1)%2) for j in range(m)] for i in range(n)]
for k in mtrx:
    print(*k)

Output

1 2 1 2 1 2
1 0 1 0 1 0
1 2 1 2 1 2
1 0 1 0 1 0
1 2 1 2 1 2

Спасибо @extrn за обучение)
Вариант:

n, m = 5, 6
mtrx = [[(~j&1) | (~i)&1 for j in range(m)] for i in range(n)]

for k in mtrx:
    print(*k)

Еще один:

n, m = 5, 6
mtrx= [[(1-j%2) | (i+1)%2 for j in range(m)] for i in range(n)]

for k in mtrx:
    print(*k)


dataFrame Перенос значений каждой строчки на n значений вправо. N = число значений nan
Есть массив данных вида:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.array([1, 2, 3, 4]))
df['1'] = np.array([10, 20, 30, np.nan])
df['2'] = np.array([100, 200, np.nan, np.nan])
df['3'] = np.array([1000, np.nan, np.nan, np.nan])

    0   1   2   3
0   1   10  100 1000
1   2   20  200 NaN
2   3   30  NaN NaN
3   4   NaN NaN NaN

Вопрос: как сделать передвижку не-NaN значений в каждой строке на N вправо, где N - число NaN значений.
То есть получить результат вида:

    1   10  100 1000
1   NaN  2   20  200
2   NaN NaN   3   30
3   NaN NaN NaN    4

Возможно, так вас устроит?
Исходные данные:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.array([1, 2, 3, 4]))
df['1'] = np.array([10, 20, 30, np.nan])
df['2'] = np.array([100, 200, np.nan, np.nan])
df['3'] = np.array([1000, np.nan, np.nan, np.nan])

то есть такой датафрейм:

   0     1      2       3
0  1  10.0  100.0  1000.0
1  2  20.0  200.0     NaN
2  3  30.0    NaN     NaN
3  4   NaN    NaN     NaN

И, собственно, преобразование:

for i, r in df.iterrows():
    df.loc[i] = df.loc[i].shift(df.loc[i].isna().sum())

Получаем:

     0     1      2       3
0  1.0  10.0  100.0  1000.0
1  NaN   2.0   20.0   200.0
2  NaN   NaN    3.0    30.0
3  NaN   NaN    NaN     4.0


Отбор значений в DataFrame python
Есть датафрейм. Нужно оставить только строки по определенному условию.

Признак
12
12
132
12
12карат
карат, 12
ка

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

Признак
12
12
132
12

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

Признак
12
12
12
ка

Также можно комбо-условие : только две цифры, тогда получится вот так:

Признак
12
12
12

Собственно, это всё про одно и тоже - отбор по регулярному выражению. Можно делать при помощи метода pd.Series.str.match
<code>
df[df['Признак'].str.match('^\d+$')]
df[df['Признак'].str.match('^.{2}$')]
df[df['Признак'].str.match('^\d{2}$')]
</code>


Поиск корня функции методом дихотомии
Выполняю задание курсовой работы по Численным Методам и Моделированию на ЭВМ: найти корень функции и отобразить на графике функции методами итераций, дихотомии и Ньютона. Для данного задания (и дисциплины в целом) я выбрал язык Python через простоту выполнения подобного рода заданий.
Функция:

def f(x):
    return np.exp(x)-np.log(x)-20

С методом итераций я справился: он находит корень, проходя по массиву NumPy, и отображает найденную точку на графике matplotlib, построенному по вышеупомянутому массиву:

def Iteration(a,b):
    args = np.arange(a,b,0.0004)
    root = 0
    i = 1
    while i < np.size(args):
        if(f(args[i-1])*f(args[i]) < 0):
            root = args[i-1]
            break
        i=i+1
    print(f"Корінь функції згідно методу ітерацій знаходиться у точці x = {root}")
    plot(args,root)

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

def Dyhotomy(a,b):
    args=np.arange(a,b,0.0004)
    root = 0
    while abs(f(b)-f(a)) > 0.0004:
        mid = (a+b)/2
        if f(mid) == 0:
            root = mid
        elif (f(a) * f(mid)) < 0:
            b = mid
        else: a = mid
    root = (a+b)/2
    print(f"Корінь функції згідно методу дихотомії знаходиться у точці x = {root}")
    plot(args, root)

Собственно, проблему я уже нашел: она состоит в том, что значение, находимое с помощью данного метода попросту отсутствует в массиве f(args), по которому строится график, и потому маска точки не работает. Сама функция plot(args,root) выглядит так:

def plot(args, root):
    plt.figure(figsize = (10,5)) #Створення нової фігури з заданим розміром

    # Візуальне налаштування
    plt.title("Завдання 1: ")
    plt.xlabel(r"$x$, Аргумент") #Підпис осі  x
    plt.ylabel(r"$Y(x)$, Функція") #Підпис осі y

    plt.plot(args, f(args), label='Function')

    Root_mask = f(args) == f(root)
    plt.scatter(args, f(args)[Root_mask], label = 'Корінь функції', color='black', marker='x')

    plt.legend(loc = 'upper center') #Розташування легенди графіку
    plt.grid() #Відображення сітки

    plt.show()

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

Не используй Root_mask. Просто находи значение по нужному методу, записывай его в переменную и используй последнюю для того, чтобы нарисовать точку. В твоем случае это аргумент root, что передается в функцию постройки графика:
plt.scatter(root, f(root), label = 'Корінь функції', color='black', marker='x')


Задача 1/0!+1/1!+1/2!+
По данному натуральному числу N найдите сумму чисел 1+1/1!+1/2!+1/3!+...+1/N!. Количество действий должно быть пропорционально N.
Входные данные
Задано единственное число N
Выходные данные
Необходимо вывести  результат вычисления в виде действительного числа c точностью до 5 знаков после запятой.
В 1 из 9 тестов пишет превышено максимальное время работы. Как исправить?
<code>
N = int(input())

sum = 1
f = 1
for g in range(1, N + 1):
    f *= g
    sum += 1 / f

print(sum)
</code>

Достаточно двух действий на каждой итерции.
<code>
sum = 1
f = 1
for g in range(1, N + 1):
    f = f / g
    sum += f
</code>


Ошибка AttributeError: 'NoneType' object has no attribute 'find'
Пишу парсер, использую при этом библиотеку Beautiful soup. У при выполнение функции выскакивает ошибка, которая указана в заголовке
Пример функции:

def parse_link(html):
links=[]
soup=BeautifulSoup(html,'html.parser')
table=soup.find('table', id='products')
body=table.find('tbody')
for link_tr in sort_links(body):
    link_td=link_tr.find('td',class_='div_naimen')
    link_a=link_td.find('a')
    if link_a[0].has_attr('title'):
        links.append(link_a[1].get('href'))
    else:
        links.append(link_a[0].get('href'))
return links

def sort_links(body):
sort_links=[]
link_trs = body.find_all('tr')
for tableTr in link_trs:
    if  'subtitle' in tableTr.get('class'):
        link_trs.remove(tableTr)
for link_tr in link_trs:
    if 'tr_analog' not in link_tr.get('class'):
        if 'tr_ucenka' not in link_tr.get('class'):
            sort_links.append(link_tr)
return sort_links

В ошибке указана строка:

    link_a = link_td.find('a')

Хотя, если просто выводить link_td, то получается:

[<td class="div_naimen" rowspan="1">
     <a href="#">string</a>
     <img alt="Посмотреть видео про товар" border="0" class="grey" height="12" onclick="zoom_picture_new(1010143,1)" src="/misc/ico_video.gif" title="Посмотреть видео про товар" width="16"/></td>

И в нем, есть тег (a), а также вывелся именно тег (td), и к нему я могу применить функцию find()
Буду рад любому ответу
(Пишу впревые на форум, поэтому извините,если что-то упустил для решение моего вопроса)

Скорее всего, на какой-то из итераций
for link_tr in sort_links(body): код
link_td=link_tr.find('td',class_='div_naimen') ничего не нашел и вернул
None. А дальше вы пытаетесь у
None, у которого нет ничего, вызвать метод
find
Пройдитесь по всем итерациям дебаггером, он поможет понять, на какой из итераций проблема.


Объединение выводов
Господа, подскажите, пожалуйста:

как можно ограничить один из циклов, количеством результатов выполнения второго (конкретно, цикл 2 количеством результатов цикла 1)?
как объединить результаты выполнения нескольких циклов в 1 строке?

Цикл 1 - генерирует дату и время:

date_fmt = '%b %d %H:%M:%S'
start_range = '0'
end_range = '121'
start_date = DT.datetime.strptime('Jan 15 06:30:00', date_fmt)
last_date = DT.datetime.strptime('Jan 15 06:55:00', date_fmt)
while start_date <= last_date:
    step = DT.timedelta(seconds=random.randrange(int(start_range), int(end_range)))
    print(start_date.strftime(date_fmt))
    start_date += step

Результат:

Jan 15 06:30:00
Jan 15 06:32:38
Jan 15 06:33:11
...

Цикл 2:

i = 1
n = i
while i <= 6:
    print(i)
    print(n+i-1)
    i += 1

Результат:

1
1
2
2
3
3
...
6
6

И 3 часть:

t = 'your id'
print (t)

Результат:

your id

В моем видении, конечный вывод должен быть таким:

Jan 15 06:30:00 your id 1
Jan 15 06:30:00 your id 1
Jan 15 06:32:38 your id 2
Jan 15 06:32:38 your id 2
Jan 15 06:33:11 your id 3
Jan 15 06:33:11 your id 3
...
Jan 15 **:**:** your id n
Jan 15 **:**:** your id n

Все задублированное так и задумано.
Заранее благодарю!

Если нужно, что бы каждая пара последовательных значений datetime была связана с одним и тем же id-ом циклически, то так:

from pprint import pprint
from itertools import tee
from random import randrange
from datetime import datetime, timedelta

def ts_range(ts_beg, ts_fin, rng_beg, rng_fin):
    i = 0
    while ts_beg <= ts_fin:
        yield i, ts_beg
        i += 1
        ts_beg += timedelta(seconds=randrange(rng_beg, rng_fin))

date_fmt = '%b %d %H:%M:%S'
start_date, last_date = [datetime.strptime(d, date_fmt)
                            for d in ['Jan 15 06:30:00', 'Jan 15 06:55:00']]
start_range, end_range = 0, 121
t = ' your id '
f = lambda i: str(1 + i // 2 % 6)
for it in tee(ts_range(start_date, last_date, start_range, end_range)):
    g = (ts.strftime(date_fmt) + t + f(i) for i, ts in it)
    pprint(list(g))
    f = lambda i: str(1 + i // 2)

Вывод:

['Jan 15 06:30:00 your id 1',
 'Jan 15 06:31:38 your id 1',
 'Jan 15 06:32:21 your id 2',
 'Jan 15 06:33:27 your id 2',
 'Jan 15 06:35:13 your id 3',
 'Jan 15 06:35:56 your id 3',
...
 'Jan 15 06:49:36 your id 5',
 'Jan 15 06:49:51 your id 5',
 'Jan 15 06:50:11 your id 6',
 'Jan 15 06:51:52 your id 6',
 'Jan 15 06:53:09 your id 1',
 'Jan 15 06:53:16 your id 1',
 'Jan 15 06:54:55 your id 2']
['Jan 15 06:30:00 your id 1',
 'Jan 15 06:30:42 your id 1',
 'Jan 15 06:31:03 your id 2',
 'Jan 15 06:32:13 your id 2',
...
 'Jan 15 06:52:24 your id 13',
 'Jan 15 06:53:17 your id 13',
 'Jan 15 06:54:06 your id 14']

А для попарно последовательного возрастания id-ов нужно убрать деление по модулю на 6.
Демо.


TemplateSyntaxError: Invalid block tag on line 20: 'else', expected 'empty' or 'endfor'. Did you forget to register or load this tag?
парни! ломаю голову.
Нужно проверять условие и в зависимости от него выводить в том или ином виде иконку
Я проверяю сначала одну, затем другую и возникает ошибка.
Первое условие проверяется и все работает, но потом ловлю
TemplateSyntaxError: Invalid block tag on line 20: 'else', expected 'empty' or 'endfor'. Did you forget to register or load this tag?
строка 20 - это во втором блоке if/else/endif элемент else.
Есть какой-нибудь более элегантный способ сделать это?

  <ul class="list-group list-group-flush">
    {% if e.eva_is_viber > 0 %}
    <li class="list-group-item"><a href="#"><i class="fab fa-viber fa-2x"></i></a></li>
    {% else %}
    <li class="list-group-item"><i class="fab fa-viber fa-2x" style="color: silver;"></i></li>
    {% endif %}
    { if e.eva_is_telegram > 0 % }
    <li class="list-group-item"><a href="#"><i class="fab fa-telegram fa-2x"></i></a></li>
    {% else %}
    <p>no</p>
    { % endif % }
    <li class="list-group-item">Vestibulum at eros</li>
  </ul>

У Вас ошибка в форматировании последних тегов
{% if %} и
{% endif %}.
Замените на:

  <ul class="list-group list-group-flush">
    {% if e.eva_is_viber > 0 %}
    <li class="list-group-item"><a href="#"><i class="fab fa-viber fa-2x"></i></a></li>
    {% else %}
    <li class="list-group-item"><i class="fab fa-viber fa-2x" style="color: silver;"></i></li>
    {% endif %}
    {% if e.eva_is_telegram > 0 %}
    <li class="list-group-item"><a href="#"><i class="fab fa-telegram fa-2x"></i></a></li>
    {% else %}
    <p>no</p>
    {% endif %}
    <li class="list-group-item">Vestibulum at eros</li>
  </ul>


Почему код исполняется неверно?
Пишу простенького ассистента на python, столкнулся с такой проблемой: в коде
<code>
print(">>> Привет, я Енот, компьютерный ассистент!")

print(">>> Вот что я могу: ")

skills = ('1) Дать прогноз одежды', '2) Напомнить время', '3) Сосчитать выражение (калькулятор).')

for skill in skills:
      print(skill)

act = input()

if not isinstance(act, int):

    print("Упс, похоже ты где-то ошибся, посмотри на мой список команд ещё раз: ")
</code>
чтобы пользователь не вводил в переменную act, всегда исполняется код после первого if'a - "Упс, похоже ты где-то ошибся, посмотри на мой список команд ещё раз: " Почему? Как это исправить?

Потому что функция
input всегда возвращает строку. Проверку на то что внутри введенной строки все символы цифры можно сделать с помощью
act.isnumeric().