Работа с клавиатурой PYTHON
Хотелось бы узнать существуют ли библиотеки или методы работы на PYTHON 3.7+ для работы, чтобы делать следующие вещи на windows 7,8,10: скопировать(ctrl +c) вставить (ctrl + V), сделать скриншот экрана(не приложения, а всего экрана), увеличить/уменьшить звук СИСТЕМЫ(WINDOWS)

Для работы с буфером обмена я рекомедовал бы использовать встроены TK:
Запись в БО:

from Tkinter import Tk
c = Tk()
c.withdraw()
c.clipboard_clear()
c.clipboard_append('sample text')
c.update()
c.destroy()

Копирование из буфера

from Tkinter import Tk
c = Tk()
c.withdraw()
clip = c.clipboard_get()
c.update()
c.destroy()
print(clip)

Для скриншотов подходит стандартная PIL

from PIL import ImageGrab
screen = ImageGrab.grab()
screen.save('save.png','PNG')

Или pyautogui

import pyautogui
image = pyautogui.screenshot(region=(0,0, 300, 400))#x1 , y1, x2, y2


Проблема с шифрованием и дешифровкой строки
Cделал шифровщик на Python, а вот когда начал заниматься дешифровщиом не выводит. Как это исправить?
(Это отрывок)

for i in range(0, length):
c = ime[i]
c = c.upper()
if (c == "А"):
print("11!")
elif (c == "Б"):
print("13@")
elif (c == "В"):
print("15#")

А вот дешифровщик, почему-то не выводит вообще ничего (это отрывок)
Помогите!

ime = input("Введите символы для дешифровки: \n\n")
length = len(ime)

for i in range(0, length):
c = ime[i]
c = c.upper()
if (c == "11!"):
print("А")
elif (c == "13@"):
print("Б")

У меня, например, на входе 13@. Вот у меня есть условие на проверку.Но есть одна проблема: у меня
С в данном случае не 13@, а 1, у меня в
с только 1 значение. Если я сравниваю
с с "15#", то у меня
с == 1. Оно берет 1 символ строки. Проще говоря, у меня
с всегда один символ.
Как это исправить?

Кодируем, например, «БА». Получается «13@11!».

ime имеет значение «», а
length, значение 6. Первый символ именно 1.
А вам нужно получить часть текста. Для этого используется оператор
[:] К примеру:

"Hello"[1:3] = "el"
"Hello"[2:5] = "llo"


PyQT5 стартовая директория QFileDialog
Кратко: в
QFileDialog сделать начальной директорией выбора файла стандартную папку Windows (рабочий стол, изображения и т.п.).
Подробно: у функции
getOpenFileName есть параметр
"directory", указывающий начальную директорию, при этом, как я понял, он жёстко прописан.
Как сделать так, чтобы на любом компьютере окно выбора файла изначально открывалось, например, на рабочем столе?
Заранее спасибо!

QString QFileDialog::getOpenFileName(
    QWidget *parent = nullptr,
    const QString &caption = QString(),
    const QString &dir = QString(),              # !!!
    const QString &filter = QString(),
    QString *selectedFilter = nullptr,
    QFileDialog::Options options = Options()
)

Это удобная статическая функция, которая возвращает существующий файл, выбранный пользователем.
Если пользователь нажимает кнопку
Отмена, он возвращает пустую строку.
Рабочий каталог файла диалога будет установлен в каталог.
Если
dir содержит имя файла, файл будет выбран.
Отображаются только файлы, которые соответствуют данному фильтру.
Выбранный фильтр установлен на
selectedFilter.
Параметры
dir,
selectedFilter и
filter могут быть пустыми строками.
Если вам нужно несколько фильтров, разделите их с помощью
';;', ...

import os

    ...

    filename, _ = QtWidgets.QFileDialog.getOpenFileName(
        self,
        'Open File',
        os.path.join(os.path.join(os.path.expanduser('~')), 'Desktop')      # !!!
    )
    if filename:
        print(f'Выбрали файл: {filename}')

    ...


Удаление слов в строке которые превышают лимит в кол-во символов в слвое
Совсем новичок в программировании и Python, поэтому по прошу вас более ясно и если можно с подробностями поделиться вашим решением :D
Задача:
 Исключать слова в строке которые превышают лимит в 4 (или любое кол-во) символов в слове. К примеру в строке с предложением: 'How can I help you?' он исключал слова how, can, i, you.
Хочу реализовать это через ввод пользователя через input, то есть сначала пользователь в консоли вводит предложение, а в конце программа уберет слова которые превышают лимит символов в слове.
Заранее спасибо за ваше решение!

# Ввод сообщения
message = input("Write your message: ")

# Делим строку на список слов
words = message.split(' ')

# Фильтруем слова по требованиям
filtred = list()

for word in words:
    # Игнорируем слова чья длина меньше 4 символов
    if len(word) < 4:
        continue

    # Прочие условия пишем здесь...

    # Остальные добовляем в список
    filtred.append(word)

# Выводим новою строку
newmessage = ' '.join(filtred)
print(newmessage)

Или тоже самое в две строки

inp = input("Write your message: ")
out = ' '.join([word for word in message.split(' ') if len(word) >= 4])

print(out)


Reshape NumPy на 4 аргумента
Есть такой код
<code>
#Тут мы загружаем датасет MNIST
(train_images, train_labels), (_, _) = keras.datasets.mnist.load_data()

#На выходе получаем пары вида "массив изображений цифры 0", 0
#"массив изображений цифры 1", 1 и так далее, вплоть до цифры 9

print(train_images.shape) - выводит (60000, 28, 28)

train_images = train_images.reshape(train_images.shape[0], 28, 28, 1).astype('float32')

print(train_images.shape) - выводит (60000, 28, 28, 1)
</code>
Что означают эти цифры? 28х28 это разрешение самих изображений MNIST, тут всё понятно.
Что такое 60000? Это длина массива-высота матрица-общее количество изображений?
И зачем мы перевели эти в другую матрицу, и что означает в ней 1?
Я понимаю что reshape переводит массив в новую форму без изменения его данных, но я не могу представить себе в чем разница между (60000, 28, 28) и (60000, 28, 28, 1) и как это выглядит? И для чего это используется?

Разница между
(60000, 28, 28) и
(60000, 28, 28, 1) именно в размерности входного тензора / матрицы. Последнее число в размерности четырехмерного тензора обычно отвечает за число цветовых каналов. Т.е. в вашем случае речь идет об изображении в оттенках серого, т.е. с одним цветовым каналом.

Для чего это используется?

Чаще всего при использовании нейронных сетей мы пользуемся готовой и проверенной архитектурой НС. Чаще всего такие архитектуры ожидают на вход тензор определенной размерности. В вашем случае -
60000 - число образцов/картинок в обучающем наборе. Каждая из этих картинок имеет размерность
28x28x1 - т.е. монохромную картинку размером
28x28/


Отфильтровать строки при наличии в них слова
Есть файл с таким содержанием:

[email protected]
[email protected]
name[email protected]
[email protected]
[email protected]
[email protected]
...

Есть такой код

SRC = 'mails.txt'  # Исходный файл
OUT = 'result.txt'  # Отфильтрованный
FILTR = ('@gmail.com',)

def grep_mail_names(src_list, filtr):
    """Возвратит массив имён, содержащих что-либо из filtr"""
    result = []  # Строки удобнее и быстрее собирать в list
    for line in src_list:
        line = line.strip()
        if not line:
            continue
        for d in filtr:
            if d not in line:
                break
        else:
            result.append(line)
    return result

if __name__ == '__main__':

        with open(SRC, 'r') as src_file:
            file_1 = grep_mail_names(src_file.readlines(), FILTR)
        with open(OUT, 'w') as out_file:
            out_file.write('\n'.join(file_1))

В FILTR записываются домены строк, которые нужно оставить и записать в result.txt, но если добавить туда еще какой-нибудь домен, то все ломается. Туплю сильно, никак не могу исправить, что не так?

У Вас неправильная реализация фильтрации:

for d in filtr:
    if d not in line:
        break
else:
    result.append(line)

Ветка
else связана с циклом
for и будет выполнена, только если цикл завершится без использования
break.
То есть значение добавляется в список, если содержит каждую подстроку из
FILTR.

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

for d in filtr:
    if d in line:
        result.append(line)
        break


Ошибка TabError: inconsistent use of tabs and spaces in indentation в Python [дубликат]

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

Ошибка при выполнении кода: TabError: inconsistent use of tabs and spaces in indentation

                                (1 ответ)

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

Моя вторая программа. Не могу понять где ошибка, при запуске вылетает ошибка "TabError: inconsistent use of tabs and spaces in indentation в Python"
Вот код:
<code>
while True:
    from colorama import init
    from colorama import Fore, Back, Style

    # use Colorama to make Termcolor work on Windows too
    init()

    print( Fore.BLACK )
    print( Back.YELLOW )

    a = input( "Укажите ваш пол.[муж, жен]:")
    b = input("Укажите свой рост (в см.):")
    c = input( "Укажите ваш вес (только цифры):")

    print( Back.CYAN )

    if a == "Женский" or a == "женский" or a == "жен." or a == "tycrbq":
        i = (b - 100) - (165 - 150) / 2
        w = c - i
        print( "Ваш идеальный вес:" + i + "кг." )
        print( "Вам нужно похудеть на " + w + "кг." )

        print( Back.GREEN )

    elif a == "Муж." or a == "муж" or a =="мужской" or a == "Мужской":
        q = (b - 100) * 1.5
        e = c - q
        print( "Ваш идеальный вес:" + q + "кг." )
        print( "Вам нужно похудеть на " + e + "кг." )
    qw = input("Начать заново? [Да, Нет]: ")
    if qw == "no" or qw == "нет" or qw == "Нет" or qw == "не" or qw == "нее" or qw =="ytn":
        break
</code>

while True:
    from colorama import init

    init()

    a = input("Укажите ваш пол.[муж, жен]:")
    b = int(input("Укажите свой рост (в см.):"))
    c = int(input("Укажите ваш вес (только цифры):"))

    if a == "Женский" or a == "женский" or a == "жен." or a == "tycrbq":
        i = (b - 100) - (165 - 150) / 2
        w = c - i
        print(f"Ваш идеальный вес: {i}.")
        print(f"Вам нужно похудеть на {w} кг.")

    elif a == "Муж." or a == "муж" or a == "мужской" or a == "Мужской":
        q = (b - 100) * 1.5
        e = int(c) - int(q)
        print(f"Ваш идеальный вес: {q} кг.")
        print(f"Вам нужно похудеть на {e} кг.")
    qw = input("Начать заново? [Да, Нет]: ")
    if qw == "no" or qw == "нет" or qw == "Нет" or qw == "не" or qw == "нее" or qw == "ytn":
        break


Как из файла достать словарь если его туда положил?
Это язык Python 3.7.7
Сначала я добавил словарь userslist в файл users.txt.

with open('users.txt','w') as users:
    for key,val in userlist.items():
        users.write('{}:{}\n'.format(key,val))

Потом он мне понадобился, но как его вытащить? Когда я пишу так:

with open("users.txt") as file:
           for line in file:
               key, *value = line.split()
       print (file)
       users.close()
       if len(file.keys) != 0:
           for user in lines.keys:
               if username == user:
                   print ('измените ник, такой уже есть')
                   flag1 = False

выводит так:

AttributeError: '_io.TextIOWrapper' object has no attribute 'keys'

Заранее спасибо за ответ!

Пример:

import json

items = dict(first_name="John", last_name="Doe")

запись словаря в JSON файл:

with open("c:/temp/users.json", "w") as f:
    json.dump(items, f, indent=2)

чтение из JSON файла в словарь:

with open("c:/temp/users.json") as f:
   items2 = json.load(f)

print(items2)
# {'first_name': 'John', 'last_name': 'Doe'}


Когда А больше или равно В, но А минус В больше или равно 0?
Есть два числа —
А и
В. Программа выдала такой результат:

А - В >= 0  # True
A >= В      # False

При каких значениях
A и
B такое может быть?

Чёрная магия:

A = 9007199254740992.0
B = 9007199254740993

print(A - B >= 0)  # True
print(A >= B)      # False

Поведение связано с типами чисел. Одно число представлено как
int и имеет бесконечную точность в
Python, а второе — как
float, и его точность зависит от платформы.
На платформах IEEE 754 мантисса чисел двойной точности содержит 53 бита:

import sys

sys.float_info.mant_dig  # 53

Поэтому некоторые числа не могут быть точно представлены и округляются:

x = 1 << 53       # 9007199254740992

y = float(x)      # 9007199254740992.0
z = float(x + 1)  # 9007199254740992.0
y == z            # True

Округление (из-за приведения типа) происходит при любых математических операциях, если хотя бы один из операндов имеет тип
float:

9007199254740992.0 - 9007199254740993
9007199254740992.0 - 9007199254740992.0 = 0

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


Расссылка сообщений группы вк
Итак, у меня есть группа вк. Ей надо время от времени делать рассылку. Необходимо автоматизировать весь этот процесс через vk api. Я авторизировался как сообщество, с этим проблем не возникло. Затем возникла необходимость получить айди всех участников сообщества. Вот тут я и остановился, обычные методы не работали, ибо я был не пользователем, а группой. Как это можно решить?
<code>
#! /usr/bin/env python3
# -*- coding: utf-8 -*-

import vk

token = ''
session = vk.Session(access_token = token)
vk = vk.API(session, scope = 'groups', v ='5.62')
followers = vk.groups.getMembers(group_id = 'bloodys_arts')
print(followers['items'])
</code>

Итак, проблема решена: все дело в том, что сообщество принадлежало не мне.


Графы. Поиск ключей от комнат. Python
Помогите решить задачу. Скорее всего неверный алгоритм. Я решаю ее на
stepik и там не показывает какой тест не проходит, отчего не пойму где ошибка. И решение не засчитывает. Я попробовал решить без переменной
v, т.к. не понятно как ее использовать.
Задача:
Представьте, что вы попали в большой замок, в котором
N комнат (под номерами
0..N-1), а вы находитесь в комнате под номером
0. В каждой комнате спрятаны ключи, которые позволяют попасть в другую комнату.
В каждой комнате
i есть список чисел
rooms[i], обозначающий список ключей, который хранится в этой комнате. Каждый ключ
j открывает некоторую комнату под номером
v: rooms[i][j] = v
В начале все комнаты закрыты.
Верните
True, если все комнаты в замке могут быть открыты, а иначе верните
False.
Вот мой код:

class Solution:
def canVisitAllRooms(self, rooms: list):
    verifyList=[]
    tst = [i for i in range(len(rooms))]
    for i in range(len(rooms)):
        tf=0
        if len(rooms[i])>0:
            for j in rooms[i]:
                if i != j and j in range(len(rooms)): tf += 1
                print('ключ из комнаты', i, 'открывает комнату', j)
            print('совпадений - ', tf)
            verifyList.append(tf)

    if 0 in verifyList: return False
    else: return True

Решил в итоге задачу, за неимением ответов на вопрос) получилось вот так:
<code>
def canVisitAllRooms(self, rooms: list):
    # создаем закрытые комнаты
    visited = [False] * (len(rooms))

    def dfs(s, visited):
        #если комната открыта, то true
        if visited[s]:
            return True
        # иначе открываем текущую комнату
        visited[s] = True
        # и проверяем ключи из этой комнаты
        for neighbor in rooms[s]:
            #print(neighbor)
            dfs(neighbor, visited)

    s=0
    #print(dfs(0, visited))
    dfs(0, visited)

    # проверка открытых комнат
    if False in visited: return False
    else: return True
</code>


Как выполнить скрипты находящиеся в подпапках из файла в родительской папке программы
Структура программы:

parentfolder
    сontrol_panel.py
    Folder_1
        sub_script_1.py
    Folder_2
        sub_script_2.py

sub_script_1.py и sub_script_2.py создают внутри своих папок подпапки 1.1folder и 1.2folder соответственно.
Как теперь запустить sub_script_1.py и sub_script_2.py из файла сontrol_panel.py чтобы подпапки 1.1folder и 1.2folder создались внутри Folder_1 и Folder_2 а не в родительской.

# sub_script_1.py для примера, sub_script_2.py имеет аналогичный код только вместо '1.1 folder' имеет '1.2 folder'
import os

def create_folders():
        if not os.path.exists('1.1 folder'):
                os.makedirs('1.1 folder')

create_folders()

Пробовал через import и subprocess, но подпапки создаются в родительской папке.

# Вариант с subprocess который создает подпапки в родительской папке
import subprocess

def main():

   python_path = 'C:\\Users\\Home\\AppData\\Local\\Programs\\Python\\Python38-32\\python.exe'

   '''Запуск sub_script_1'''
   sub_script_1 = 'Folder_1\\sub_script_1.py'
   start_script1 = [python_path, sub_script_1]
   subprocess.call(start_script1)

   '''Запуск sub_script_2'''
   sub_script_2 = 'Folder_2\\sub_script_2.py'
   start_script2 = [python_path, sub_script_2]
   subprocess.call(start_script2)

if __name__ == '__main__':
   main()

"родительская папка" это директория из которой был запущен интерпретатор. чтобы не зависеть от этого внешнего фактора нужно определить путь к скрипту и получить тем самым директорию где расположен скрипт
<code>
# sub_script_1.py для примера, sub_script_2.py имеет аналогичный код только вместо '1.1 folder' имеет '1.2 folder'
import os

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

def create_folders():
        sub_dir_path = os.path.join(BASE_DIR, '1.1 folder')
        if not os.path.exists(sub_dir_path):
                os.makedirs(sub_dir_path)

create_folders()
</code>


django rest выдает 404 страницу вместо информации о модели
Хочу получить информацию об объекте модели при помощи django rest
В urls.py у меня

url(r'^backend/api/load/detail/<int:pk>', views.LoadDetail.as_view())

В views.py:

class LoadDetail(generics.RetrieveAPIView):
    queryset = Load.objects.filter()
    serializer_class = LoadSerialiser

При переходе по ссылке /backend/api/load/detail/4/ получаю ошибку 404

Изменил на
path('backend/api/load/<int:pk>/', views.LoadDetail.as_view()) и заработало. Было бы здорово узнать, почему так и как обрабатывать запросы с pk при помощи регулярок


почему remove не удаляет последний элемент?
Условие:
У вас есть текст и список слов. Вам необходимо проверить, отображаются ли слова в списке в том же порядке, что и в данном тексте.
Случаи, которые вы должны ожидать при решении этой задачи:
слово из списка отсутствует в тексте - ваша функция должна возвращать False;
любое слово может встречаться в тексте более одного раза - используйте только первое;
два слова одинаковы - ваша функция должна возвращать False;
условие чувствительно к регистру, что означает «привет» и «привет» - два разных слова.
текст включает только английские буквы и пробелы
<code>
def words_order(text: str, words: list) -> bool:
    # your code here
    text = text.split(' ')
    for t in text:
        if t not in words:
           text.remove(t)
        elif text.count(t)>1:
            text.remove(t)
    if text == words:
        return True
    else:
        return False

assert words_order('hi world im here', ['world']) == True
</code>
Если распечатать text и words то в списке text  по какой-то причине появляется here хотя должно остаться только слово world и результат должен быть true , в чем может быть ошибка?

Потому что нельзя удалять элементы из списка, по которому идёт итерация. Вот почему. Как только вы удалили один элемент, то все, которые после него, смещаются ближе к началу и следующий элемент после удаленного пропускается, и чем дальше, тем более неожиданные последствия.
Решение: создать новый список (как у вас в ответе) или идти по списку с конца:
<code>
for t in text[::-1]:
</code>


Модуль 'csv' не имеет атрибута 'DictWriter'
тут появился такой вопрос. Вроде бы как в коде всё нормально, всё согласно документации. Но в итоге выходит такая вот проблема: "AttributeError: module 'csv' has no attribute 'DictWriter'"
<code>
import csv
with open('example.csv', 'w') as File:
    filednames =  ['brand', 'photo_file_name', 'carrying', 'passenger_seats_count']
    writer = csv.DictWriter(File, fieldnames= filednames)
    writer.writeheader()
    writer.writerow({'brand':'Bugatti Veyron'})
    writer.writerow({'photo_file_name':'bugati.png'})
</code>

Всё дело вот в чем, если файл назван 'csv.py' или же есть файлы с таким названием в той же директории, то в этом случае будет выходить данная ошибка "AttributeError: module 'csv' has no attribute 'DictWriter'".
Всего что нужно - это переименовать скрипты в директории или тот скрипт за которым вы работаете.
Это связано с тем, что цитирую @MaxU "import csv - импортирует сначала файлы из текущей директории, если не находит там, тогда смотрит в папке со стандартными либами"


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

my_list = [['Москва', '1'], ['Берлин', '2'], ['Париж', '3']]

А на выходе:

my_list = [['1', 'Москва', '1'], ['Берлин', '2'], ['Париж', '3']]

Есть ли какое нибудь хорошее решение? Раньше не сталкивался с таким вопросом работы со списком, сейчас очень необходимо решить. Insert здесь не помощник, как я понял.

Попробуй вот так
<code>
my_list[0].append('1')
</code>


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

signals.py:

from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Profile, CustomUser

@receiver(post_save, sender=CustomUser)
def create_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

@receiver(post_save, sender=CustomUser)
def save_profile(sender, instance, **kwargs):
    instance.profile.save()

apps.py:

from django.apps import AppConfig

class UsersConfig(AppConfig):
    name = 'users'

    def ready(self):
        import users.signals

models.py:

class Profile(models.Model):
    user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
    picture = models.ImageField(_('Фотография'), default='user_pics/default_pic.png',
                                upload_to='user_pics/%Y/')

    class Meta:
        verbose_name = _('профиль')
        verbose_name_plural = _('профили')

    def __str__(self):
        return f'Аккаунт {self.user.login_user}'

Укажите в
__init__.py файле
default_app_cnfig приложения


Ошибка в добавлении элемента в список
Код:

import keyboard
def print_pressed_keys(e):
    key_name_spis=[e.name]
    key_type_spis=[e.event_type]
    key_time_spis=[e.time]
    a = ' '.join(key_name_spis)
    b = ' '.join(key_type_spis)
    c = ' '.join(str(key_time_spis))
    return  a, b, c
Glob_name=[]
Glob_type=[]
Glob_time=[]
for Glob_ in range(len(Glob_name)+1):
    Glob_name.append(a)
    Glob_type.append(b)
    Glob_time.append(c)

keyboard.hook(print_pressed_keys)
keyboard.wait('Ctrl+Shift')

Ошибка:
Glob_name.append(a)
NameError: name 'a' is not defined

Что я делаю неправильно?

Даже если сделать переменные a, b и c глобальными, в тот момент когда вы обращаетесь к ним внутри цикла функция
print_pressed_keys еще не вызвана ни одного раза, поэтому в этих переменных будет пусто (фактически в этот момент они еще не будут существовать). Да и цикл не выполнится ни одного раза, потому что переменная
Glob_name содержит пустой список.
Нужно добавлять значения в списки внутри самой функции:

import keyboard

Glob_name=[]
Glob_type=[]
Glob_time=[]

def print_pressed_keys(e):
    key_name_spis=[e.name]
    key_type_spis=[e.event_type]
    key_time_spis=[e.time]
    a = ' '.join(key_name_spis)
    b = ' '.join(key_type_spis)
    c = ' '.join(str(key_time_spis))
    print(a, b, c)
    Glob_name.append(a)
    Glob_type.append(b)
    Glob_time.append(c)

keyboard.hook(print_pressed_keys)
keyboard.wait('Ctrl+Shift')

print(Glob_name)
print(Glob_type)
print(Glob_time)


Неправильно записывается JSON в файл
Код:

import json

def test(key, val):

    xs = open('test.json', 'r+')
    x = xs.read()
    y = {key:val}
    z = json.loads(x)
    z.update(y)
    xs.seek(0)
    xs.truncate(0)
    json.dump(json.dumps(z, indent=4), xs)

test('testing', 'testers')

До выполнения кода test.json выглядит вот так:

{
    "one": "two"
}

После выполнения кода уже вот так:

"{\n    \"one\": \"two\",\n    \"testing\": \"testers\"\n}"

Как я могу нормально записать json данные без \n и прочего лишнего?

Вот здесь вы сначала словарь превращаете в json-строку (метод
dumps), потом эту строку еще раз преобразовываете в json (метод
dump):

json.dump(json.dumps(z, indent=4), xs)

Нужно использовать один из этих методов, но не оба одновременно.
Для записи объекта в файл в виде json используйте метод
dump:

json.dump(z, xs, indent=4)

Тот же самый результат можно получить преобразовав словарь в json-строку, потом записав эту строку в файл с помощью
write:

xs.write(json.dumps(z, indent=4))


Проблемы с импортом в Pythonanywhere
У меня есть два приложения, которые я хочу залить на pythonanywhere.com . Так исторически сложилось, что одно вообще не использует сторонних модулей(ну flask не в счет), а второе - тянем достаточно приличное их кол-во(vk, vk_api, threat). С первым проблем не возникло. Но вот второе начинает возмущаться, что нету моделей. Я пробовал их ставить через pip в bash, не помогало, импорт в wgisi файл тоже не работал(может я это сделал неправильно). Как можно решить мою проблему?

Необходимо было использовать правильную версию pip-а, а именно pip3.7


Поиск элементов в списке
Есть список a и список b. Нужно проверить нахождение элементов b в списке a, и выдать, например, True в случае, если КАЖДЫЙ из элементов списка b есть в списке a. Если хоть одного элемента не будет, тогда False. Так же должен быть неважен порядок нахождения, может быть в разбросе.
Делал перебором с in, но не могу реализовать вывод только при абсолютном совпадении.

Можно сделать так:

set(b).issubset(a)

Так как данное решение предполагает использование
set, необходимо, чтобы объекты, содержащиеся в списках, были hashable.


Аргументы в командах discord
Делаю небольшого бота-переводчика для дискорда. Проблема в том, что он принимает на вход только первое слово, остальное просто пропускает. Каким образом можно сделать, чтобы он принимал все предложение в один аргумент, а не только первое слово?
<code>
    async def text(self, ctx, arg):
        if arg == '':
            await ctx.send('Использование: "!!text <текст>"')
        else:
            translate = translate_req + '&' + 'text=' + arg + '&' + 'lang=' + self.lang
            response = requests.get(translate)
            if response:
                json_response = response.json()
                await ctx.send(json_response['text'][0])
</code>

Нашел решение сам. Чтобы получить несколько слов через пробел как один аргумент, можно использовать " " в начале и в конце аргумента. Так же есть "args", который является списком и его можно превратить в строку методом join


Как на Python сделать так, что бы при вводе определенного слова, например выдавало одну из шести цитат?
Я хочу написать программу на Python, что бы при вводе слова
Motivation, программа выдавала
1 из
6 заготовленных цитат и показывала пользователю,но не знаю как это сделать.
Помогите, покажите как оно работает и как это можно сделать?

import random
words = list(map(str, range(6)))
while True:
    x = input('ввод')
    if x == 'Motivation':
        print(random.choice(words))
    elif x.strip():
        continue
    else:
        break


Задержка времени в pyqt5
Как мне сделать так, чтобы при нажатию на кнопку через некоторое время выполнялась функция?

time.sleep(...) не подходит.
Так же как у
tkinter after(ms, func) или у
js setTimeout(ms, func)?

QTimer Class
Класс
QTimer предоставляет повторяющиеся и одиночные таймеры.

singleShot : bool
Это свойство определяет, является ли таймер однократным Таймер однократного срабатывания срабатывает только один раз, таймеры не однократного срабатывания - каждые миллисекунды. Значением по умолчанию для этого свойства является false.

QtCore.QTimer.singleShot(1000, self.my_func)

Update

У меня почему-то ошибка self.wordButton.clicked.connect(lambda: QTimer.singleShot(2, print(1))) TypeError: arguments did not match any overloaded call: singleShot(int, PYQT_SLOT): argument 2 has unexpected type 'NoneType' singleShot(int, Qt.TimerType, PYQT_SLOT): argument 2 has unexpected type 'NoneType'

    self.wordButton.clicked.connect(self.onWordButton)

def onWordButton(self):
    QtCore.QTimer.singleShot(1000, lambda: print(1))


Нахождение первого символа строки. Python
С помощью какой функции можно как-то считать первую букву строки? К примеру: У нас есть переменная a, содержащая строку
Евгений.
Мне нужно, чтобы первая буква была считана какой то функцией и передана в другую переменную. Что я хочу осуществить:

c = 'Евгений'
...
if первая буква переменной a == 'c':
    print("первая буква:", 'c')

Надеюсь меня поймут...

c = 'Евгений'
a = 'Е'

if a == c[0]:
    print(f"Первая буква: {c[0]}.")


Авто проверка последней версии pip
Я бы хотел чтобы программа проверяла последнюю существующую версию pip, сравнивала её с той, что установлена, и в случае если на пк старая версия - она обновлялась. Установленную версию даёт команда
pip --version, а какая команда даст последнюю выпущенную версию pip? И сработает ли код на c++:

if (v!=v_new){
    system("python.exe -m pip install --upgrade pip");
    system("python.exe -m easy_install pip");
}

Где v - значение, возвращённое
pip --version,а n_new - последняя выпущенная версия.

Достаточно использовать
pip install -U pip.
Если текущая версия является последней, то повторной установки не произойдёт:

C:\Users\Username>pip install -U pip
Requirement already up-to-date: pip in c:\users\username\appdata\local\programs\python\python38\lib\site-packages (20.1)


Сгенерировать матрицу python
помогите написать генератор для двух матриц

1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0

и

0 1 1 1 1 1 1 0
4 0 1 1 1 1 0 2
4 4 0 1 1 0 2 2
4 4 4 0 0 2 2 2
4 4 4 0 0 2 2 2
4 4 0 3 3 0 2 2
4 0 3 3 3 4 0 2
0 3 3 3 3 3 3 0

В таком виде:

[[ i * j for j in range(m)] for i in range(n)]

Заранее спасибо!


Что не так со вторым циклом for
Я хочу чтобы чётные и не чётные буквы поменялись местами

proverb ='Программисты - это устройства, преобразующие кофеин в код.'
new_proverb=[]
for i in proverb[1::2]:
    new_proverb+=i
    for a in proverb[::2]:
        new_proverb+=a

new_proverb="".join(new_proverb)
print(new_proverb)

>>>
рПормит  т срйта рорзюи оенвкдгПормит  т срйта рорзюи оенвкдаПормит  т срйта рорзюи оенвкдмПормит  т срйта рорзюи оенвкдсПормит  т срйта рорзюи оенвкдыПормит  т срйта рорзюи оенвкд-Пормит  т срйта рорзюи оенвкдэПормит  т срйта рорзюи оенвкдоПормит  т срйта рорзюи оенвкдуПормит  т срйта рорзюи оенвкдтПормит  т срйта рорзюи оенвкдоПормит  т срйта рорзюи оенвкдсПормит  т срйта рорзюи оенвкдвПормит  т срйта рорзюи оенвкд,Пормит  т срйта рорзюи оенвкдпПормит  т срйта рорзюи оенвкдеПормит  т срйта рорзюи оенвкдбПормит  т срйта рорзюи оенвкдаПормит  т срйта рорзюи оенвкдуПормит  т срйта рорзюи оенвкдщПормит  т срйта рорзюи оенвкдеПормит  т срйта рорзюи оенвкдкПормит  т срйта рорзюи оенвкдфПормит  т срйта рорзюи оенвкдиПормит  т срйта рорзюи оенвкд Пормит  т срйта рорзюи оенвкд Пормит  т срйта рорзюи оенвкдоПормит  т срйта рорзюи оенвкд.Пормит  т срйта рорзюи оенвкд

Можно "сшить" вместе два среза с помощью функции
zip, а потом вывести их, склеив буквы вместе

# тестирование на строке с нечётным кол-вом символов
>>> s = 'Программисты - это устройства, преобразующие кофеин в коды.'
>>> z = zip(list(s[1::2]) + [''], s[::2])
>>> ''.join(''.join(letter for letter in pare) for pare in z)
'рПгоарммсиыт- э оту тсорсйвт,ап ербоарузщюеик фоие н вокыд.'

# тестирование на строке с чётным кол-вом символов
>>> s = 'Программисты - это устройства, преобразующие кофеин в код.'
>>> z = zip(list(s[1::2]) + [''], s[::2])
>>> ''.join(''.join(letter for letter in pare) for pare in z)
'рПгоарммсиыт- э оту тсорсйвт,ап ербоарузщюеик фоие н вок.д'

Объяснение
list(s[1::2]) + ['']:

Если в строке чётное кол-во символов, то в
list(s[1::2]) + ['']
будет ровно на один элемент больше, чем в
list(s[::2]), и функция

zip выбросит лишний элемент (ту самую пустую строку)
Если в строке нечётное кол-во символов, то в
list(s[1::2]) + ['']
будет столько же элементов, сколько и в
list(s[::2]), но последний
элемент первого списка будет пустой строкой. Пустая строка ставится
в соответствие последнему символу нечётной строки и никак не влияет
на результат склейки (
'' + 'a' == 'a')

Таким образом мы компенсируем возможно существующий нечётный символ в конце, искусственно ставя ему в соответствие пустую строку, чтобы
zip не выбросила этот последний символ.


Ошибка TabError: inconsistent use of tabs and spaces in indentation при напсании бота [дубликат]

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

Ошибка при выполнении кода: TabError: inconsistent use of tabs and spaces in indentation

                                (1 ответ)

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

Делал бота на телеграм:

import telebot
import config
from telebot import types
import random

bot = telebot.TeleBot(config.TOKEN, threaded=False)

@bot.message_handler(commands=['start'])
def welcome(message):
    sti=open('stikers/hello_game.webp', 'rb')
    bot.send_sticker(message.chat.id, sti)

    #keyboard
    markup=types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1=types.KeyboardButton("random cifra")
    item2=types.KeyboardButton("how are you?")

    markup.add(item1,item2)

    bot.send_message(message.chat.id,"privetstvou tebya, {0.first_name}!\nYa - <b>{1.first_name}</b>, stupid bot ot tovarischa Fletla".format(message.from_user, bot.get_me()),
        parse_mode='html',reply_markup=markup)

@bot.message_handler(content_types=['text'])
def lolomg(message):
    if message.chat.type=='private':
        if message.text=='random cifra':
            bot.send_message(message.chat.id, str(random.randint(0,100)))
        elif message.text=='how are you?':

            markup=types.InlineKeyboardMarkup(row_width=2)
            item1=types.InlineKeyboardMarkup("horosho",callback_data='good')
            item2=types.InlineKeyboardMarkup("ploho",callback_data='bad')

            markup.add(item1,item2)

            bot.send_message(message.chat.id, 'namana, sam kak?',perly_markup=markup)
        else:
            bot.send_message(message.chat.id, 'ya ne znau kak tebe otvetit')

@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    try:
        if call.message:
            if call.data=='good':
                bot.send_message(call.message.chat.id, 'vot i horosho')
            elif call.data=='bad':
                bot.send_message(call.message.chat.id, 'bivaet')
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=" Как дела?",
                reply_markup=None)
            bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
                text="ты нажал")
    except Exception as e:
        print(repr(e))

# RUN
#bot.polling(none_stop = True)
bot.infinity_polling(True)

выдает ошибку:

File "telegram.py", line 76
    print(repr(e))
                 ^
TabError: inconsistent use of tabs and spaces in indentation

никак найти проблему не могу(и в гугле ничего не нашел)
(и да это бот по гайду от хауди, но даже его код не запускается)

У Вас отступы сделаны и с табуляцией, и с пробелом. Нажмите Ctrl + A и увидите. Преобразуйте отступы в пробел.


Как убрать последовательность символ из byte array?
Имеется последовательность byte array, например:

b'ontetwothree 1/10 OK
fourfivesex 2/10 /□\□/□\□/□\□/□\ OK
seveneightnine 3/10 \□/□\ OK'

Во второй и третьей строке есть последовательность символов, которые получаются следующим образом. Приложение, написанное на PyQt5, используя QProcess, запускает консольную программу, а вывод этой программы отображается в QTextEdit. Приложение, которое запускает QProcess, полностью консольное. В этом приложении ожидание ответа, например, от удалённого сервера, реализовано посредством "spinning command line cursor". Само собой, если в консоли эта фича отрабатывает как надо, то перенося вывод в PyQt-виджет будет то, что я написал выше - слэш, обратный слэш и квадрат (u'\u25A1').
В последовательности byte array содержатся также другие ненужные символы, которые я убираю:

string = re.sub(b"\x1b.{2,4}", b"", byte_raw)

Вопрос, какой регуляркой можно избавиться от этой последовательности, учитывая, что в выводе присутствуют нужные слэши, например "...othree 1/10 OK..."? Или может есть способ очистить вывод от ненужных символов с помощью QProcess?
Спасибо.

Используйте

re.sub(b'(?:/\xe2\x96\xa1\\\\(?:\xe2\x96\xa1)?)+\\\\?', b'', byte_raw, flags=re.I)

Подробности

(?:/\xe2\x96\xa1\\\\(?:\xe2\x96\xa1)?)+ - 1 и более последовательностей

/ - символ
.

\xe2\x96\xa1 - последовательность байтов

\\ - символ
\

(?:\xe2\x96\xa1)? - необязательная последовательность байтов

\\? - необязательный символ
\


Kак проще изменить ширину диапазона столбцов
win32com - работает только на Windows, а  OpenPyXL  -  кроссплатформенный. Хочется загрузить смартфон работой. Из-за того, что индексирование конкретного столбца при изменении ширины осуществляется буквой, а максимальное количество столбцов - цифрой, возникла необходимость написать конвертацию числа в индекс столбца XL. То есть:

1 -> A,
2 -> B,
...
27 -> AA,
...

def o_col_letters_with_num(n):
    # from A to XFD
    letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    from itertools import product
    assert 0 < n <= 1024*16, f"{n} not fit to (0, 1024*16]"
    rez = sum([["".join(el) for el in product(letters, repeat=i)] for i in (1,2,3)], [])

    return rez[n-1]

wb = opx.load_workbook(file_xl)
ws_rec = wb["Sheet01"]
rows_, cols_ = ws_rec.max_row, ws_rec.max_column

for j in range(1, cols_ + 1):
    ws_rec.column_dimensions[o_col_letters_with_num(j)].width = 9.71

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

ws_rec.Columns('B:AZ').ColumnWidth = 9.71

Как того же добиться попроще?  Может есть внутренняя функция такого "индексирования", а я просто не знаю?
А именно - определить границы используемой в экселе области и задать одинаковую ширину всем столбцам, например, 9.71.

Воспользуйтесь готовой функцией:
<code>
from openpyxl.utils.cell import get_column_letter
</code>
Данная функция использует кешируемые значения, поэтому работает с асимптотической сложностью “O(1)”


Как во вложенном списке удалить конкретный столбец?
Вот к чему пришёл, но выдаёт ошибку
<code>
from random import randint
N=int(input('Введите количество строк  '))
M=int(input('Введите количество столбцов '))
a=[[randint(-50,50) for _ in range(M)] for _ in range(N)]
print(a)
K=int(input('Введите строку, которую хотите удалить'))
Q=int(input('Введите столбец, который хотите удалить'))
del(a[K-1])
for i in range(N):
    for j in range(M):
        del a[Q-1]
</code>

В вашем случае очень хочется воспользоваться родным NumPy с его удобной индексацией:

import numpy as np

N=int(input('Введите количество строк  '))
M=int(input('Введите количество столбцов '))

a = np.random.randint(-50, 50, size=(N, M))
print(a)

K=int(input('Введите строку, которую хотите удалить'))
Q=int(input('Введите столбец, который хотите удалить'))

a = np.delete(a, K, axis=0)
a = np.delete(a, Q, axis=1)
#  учтите, что np.delete() - не inline-метод
print(a)

Суть, я думаю, вы поняли.
С другой стороны, использование NumPy для такой небольшой задачи не совсем оправдано, поэтому можно и без него, используя метод list.pop(index):

from random import randint
N=int(input('Введите количество строк  '))
M=int(input('Введите количество столбцов '))
a=[[randint(-50,50) for _ in range(M)] for _ in range(N)]
print(a)
K=int(input('Введите строку, которую хотите удалить'))
Q=int(input('Введите столбец, который хотите удалить'))
a.pop(K)
 for i, x in enumerate(a):
     x.pop(Q)

print(a)


Не получается подключиться к Telegram Python (telethon)
Скрипт выполняет поиск в определенных чатах сообщение по шаблону и вставку их в таблицу, таблица выгружается в Save messages. Не мог подключиться, Думал дело в отсутствии прокси, написал генератор(всё работало номрально).В один помент перестало подключаться любым образом. В чём может быть проблема? Может быть такое, что мне закрыли доступ из-за того что много запросов с разных прокси?(писал программу 1,5 дня без остановок)
<code>
proxy = dev.get_rand_proxy(dev.get_proxy_list())  # (socks.SOCKS5, '162.243.108.129', 1080)
client = TelegramClient(config.username.lower(),
                    config.api_id,
                    config.api_hash,
                    # connection=connection.ConnectionTcpMTProxyRandomizedIntermediate,
                    proxy=proxy
                    )
client.start() # ConnectionError: Connection to Telegram failed 5 time(s)
#...код программы...
client.run_until_disconnected()
</code>

У меня была такая же проблема, не подключался и выводил сообщения ConnectionError
1.Пользуюсь сейчас VPN сервисом, соединение теперь устанавливает
2.Отключил двухфакторная аутентификация на аккаунте


Как перевести строку в вектор для расчёта евклидового расстояния?
Есть проект по идентификации людей с помощью веб камеры. Проблема заключается в расчёте евклидового расстояния между дескрипторами лица. При извлечении дескрипторов, они с типом
dlib.vector, мне их необходимо занести в файл (в перспективе создать БД), а затем извлечь для расчёта евклидового расстояния. Второй дескриптор получаю с камеры ноутбука. Использую 2 нейронки от dlib. Я могу извлечь дескриптор из файла, преобразовать его в массив, список, строку, но как я понял оба дескриптора должны иметь тип
dlib.vector, что сделать мне не удаётся.
Python 3.6 + cv2 + dlib + scipy
Расчёт евклидового расстояния.
    a = distance.euclidean(face_descriptor1, face_descriptor2)

Проще всего воспользоваться модулем Numpy - сначала перевести dlib.vector в numpy array:

import numpy as np

arr = np.asarray(dlib.vector)

Расчёт евклидового расстояния:

np.linalg.norm(database_landmarks - arr)


Отправка сообщений от имени сообщества
Я знаю, что с 2019 апи сообщений закрыли. Вопрос: распространяется ли это на группы? (я бота для вк пишу). Если да, то какие обходы сего чуда природы на данный момент существуют?

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


Не могу понять принцип работы данного выражения
Проясните, пожалуйста, следующий момент.
У меня есть датафрейм в Pandas:

df1 = pd.DataFrame({'A': [1, 2, 3, 4, 5, 4, 3, 3, 2, 3],
                    'B': [2, 2, 7, 9, 10, 5, 3, 1, 8, 2]})

и я применяю
df1['A'].value_counts() к столбцу A получаю следующее:

3    4
4    2
2    2
5    1
1    1
Name: A, dtype: int64

Все понятно, но когда я применяю так:
df1['A'].value_counts()[df1['A']], то получаю следующее:

1    1
2    2
3    4
4    2
5    1
4    2
3    4
3    4
2    2
3    4
Name: A, dtype: int64

Я понимаю, что произошло, но я не понимаю, как это сработало при добавлении к формуле
[df1['A']].
Можете пояснить на пальцах, почему датафрейм так вывелся?

Ничего страшного.

df1['A'].value_counts() - это серия.
Вы к ней применили
[df1['A']], что сокращенная запись для применения
.loc[df1['A']].
В квадратных скобках свойства
.loc может быть для документации список значений индекса (или ему подобное) для получения соответствующих строк из серии.
Но вы его представили (в форме серии, которая в этом контексте рассматривается как список ее значений:
[1, 2, 3, 4, 5, 4, 3, 3, 2, 3]), значит, вы получили из серии

df1['A'].value_counts()

строки с этими метками в индексе. Конечно, как серию.

Примечание:
Индексирование только квадратными скобками может быть для контекста интерпретировано по разному:

строго по питонически (т.е. как применение метода
.__getitem__()),
как применение свойства
.loc[] объекта типа DataFrame или Series,
как применение свойства
.iloc[] объекта типа DataFrame или Series.

К сожалению, контекст может быть иногда многозначным (но это не ваш случай) и тоже может быть в каких-то условиях правильно определен только в ходе программы (опять не ваш случай), что может иметь влияние на скорость (невозможно применить оптимизацию).
Потому документация об индексации в синей рамке строго рекомендует (для последних двух случаев) использовать явную форму с применением
.loc или
.iloc[].


Не понимаю почему не работает дискорд бот
Соединил несколько кодов из интернета в один для своего дискорд бота, из всех функций (Табличка с информацией, игровой статус, сообщение при входе, радужная роль,  работает только радужная роль. Ошибок никаких не вылазит, не понимаю что нужно изменить.
<code>
import discord
from discord import utils
from discord.ext import commands
import asyncio
import random
import os

token = 'token'
serverid = id

client = commands.Bot( command_prefix = '.')
client.remove_command( 'help' )
PREFIX = "."

# Табличка с информацией

@client.command()
async def info(ctx):
    print('Табличка с инфой работает')
    embed=discord.Embed(title="ПИ-БОТ", description="Бот для ПИ-18(9)", color=0x0080ff)

    embed.add_field(name="Cоздатель:", value="name", inline=True)
    embed.add_field(name="Версия:", value="1", inline=True)
    embed.set_thumbnail(url = 'url')
    embed.set_footer(text="Бот")

    await ctx.send(embed=embed)

# Игровой статус

@client.event
async def ready():
    print( 'Игровой статус работает' )
    await client.change_presence( status = discord.Status.online, activity = discord.Game( 'game'  ) )

#Сообщение о том, что Юзер зашёл на сервер + выдача роли
@client.event
async def on_member_join( member ):
    print('Приветственное сообщение работает')
    emb = discord.Embed( description = f"**{member.mention}** зашел на сервер, добро пожаловать!", color = 0x0c0c0c )
    role = discord.utils.get( member.guild.roles, id = id ) # Айди роли, которая будет выдаваться, когда человек зашёл на сервер

    await member.add_roles( role )
    channel = client.get_channel( id ) # Айди канала, куда будет писаться сообщение
    await channel.send( embed = emb )

# Радужная роль

client = discord.Client()
colours = [discord.Color.dark_orange(),discord.Color.orange(),discord.Color.dark_gold(),discord.Color.gold(),discord.Color.dark_magenta(),discord.Color.magenta(),discord.Color.red(),discord.Color.dark_red(),discord.Color.blue(),discord.Color.dark_blue(),discord.Color.teal(),discord.Color.dark_teal(),discord.Color.green(),discord.Color.dark_green(),discord.Color.purple(),discord.Color.dark_purple()]
rainbowrolename = "name"
delay = 5

@client.event
async def rainbowrole(role):
    for role in client.get_guild(serverid).roles:
        if str(role) == str(rainbowrolename):
            while not client.is_closed():
                try:
                    await role.edit(color=random.choice(colours))
                except Exception:
                    print("can't edit role, make sure the bot role is above the rainbow role and that is have the perms to edit roles")
                    pass
                await asyncio.sleep(delay)
    print('role with the name "' + rainbowrolename +'" not found')
    print("creating the role...")
    try:
        await client.get_guild(serverid).create_role(reason="Created rainbow role", name=rainbowrolename)
        print("role created!")
        await asyncio.sleep(2)
        client.loop.create_task(rainbowrole(rainbowrolename))
    except Exception as e:
        print("couldn't create the role. Make sure the bot have the perms to edit roles")
        print(e)
        pass
        await asyncio.sleep(10)
        client.loop.create_task(rainbowrole(rainbowrolename))

@client.event
async def on_ready():
    client.loop.create_task(rainbowrole(rainbowrolename))
    print('Радужная роль работает')

client.run(token)
</code>

Насчет статуса и роли - работает только роль из-за особенностей работы декоратора
@discord.Client.event Этот декоратор заменяет в классе клиента метод определенного ивента тем, которая находится под декоратором. Вот и получается, что код статуса просто "исчезает". Необходимо объединить оба этих метода.
По остальным проблемам, хотелось бы больше информации, так как код выглядит вполне рабочим.


bits to bytes python
Хочу бит перевести в байт формат, таким способом
<code>
b = 10
a = b.to_bytes(1, byteorder='big')
print(a)
</code>
Но в ответе получаю b'\n' (это эквивалентно 1010 в битах) , вместо ожидаемого b'\x02'.
Как я понял проблема в том, что питон переводит 10 формата int в байты, а мне нужно 10 bit перевести.
Так вот, как мне указать, что мой вводимый формат бит(если это возможно). Или есть ли какой другой способ решения нужной мне задачи.

Проблема в том, что вы задаёте переменной b значение в десятичной системе, а значит в двоичной системе значение переменной равно 1010, и этому соответствует символ новой строки (в Python представление байтов \xNN заменяется символом, когда есть читаемый символ соответствующий числу). Чтобы задать значение переменной в двоичной системе, необходимо указать перед цифрами
0b. Таким образом:

b = 0b10 # то же самое, что и b = 2
a = b.to_bytes(1, byteorder='big')
print(a) # b'\x02'


Что такое MANIFEST.in и зачем он нужен?
Для чего используется этот файл?

Данный файл нужен для того, чтобы указывать, какие файлы следует включить в сборку пакета. Пример:
MANIFEST.in:

include mypackage/data/hello.txt

setup.py:

import setuptools

setuptools.setup(
    name='mypackage',
    version='0.0.0',
    packages=['mypackage'],
    include_package_data=True
)

Здесь файлы перечисляются не в
setup.py, а в
MANIFEST.in. Можно гибко управлять добавлением или исключением файлов.В официальной документации это есть. Главное тут не забыть
include_package_data=True.
Другой способ включить файлы:

import setuptools
setuptools.setup(
    name='mypackage',
    version='0.0.0',
    packages=['mypackage'],
    package_data={
        'mypackage': ['data/hello.txt'],
    },
)


Очистить консоль python в PyCharm
Пишу простой алгоритм reinforcement learning, в котором есть простенькая анимация, посредствам вывода в консоль. Так вот, чтобы показать новый кадр анимации, мне надо как-то эту консоль очистить.
Сейчас использую
print(100*'\n'), но это выглядит не очень красиво из-за прокрутки консоли. Использую PyCharm IDE, если это важно.
Пробовал
os.system('cls') и
print('\k') — не работает. Можно ли как-то очищать консоль, чтобы заново выводить в нее новый кадр анимации?
P.S. Стоит добавить: кадр -- квадратная матрица размера n, каждый элемент которой -- отдельный символ: =, если клетка пустая, А - если в клетке агент, Е - если в клетке враг. Матрица обновляется и выводится новый кадр. Сейчас n=7. Общее количество кадров заранее не может быть известно.

Вообще, для консоли работает метод
os.system('cls'), который ломается при выводе внутри PyCharm. С другой стороны, прямо внутри PyCharm есть терминал, с которым эта функция работает.
UPD: В техподдержке PyCharm посоветовали включить эмуляцию терминала в консоли вывода (делается это в Run|Edit Configurations). С включенной эмуляцией
os.system('cls') работает нормально и в консоли вывода.


private module в python
Можно ли создать приватный модуль, который будет виден только в рамках пакета?

Легко сдаётесь-с! Если прям очень хочется скрыть своё внутреннее АПИ от рук посторонних, есть у меня для вас одно извращение :))
Допустим у нас такой мини-проект:

project/
├─ pack/
│  ├─ __init__.py
│  └─ hidden.py
└─ main.py

И хочется скрыть содержимое
hidden.py от посторонних. Делаем так.

hidden.py
Обычный код с логикой:

import string, random

__all__ = [
    'make_secret_key', 'Super',
]

def make_secret_key():
    return ''.join(
        random.choice(string.ascii_uppercase + string.digits)
        for _ in range(10)
    )

class Super:
    def __init__(self, x='42'):
        self.x = x

    def __repr__(self):
        return f'Super({self.x})'

__init__.py
Техноколдовство здесь:

import sys

__all__ = [
    'make_some_object'
]

# Мелочь для удобства
class dotdict(dict):
    __getattr__ = dict.get
    __setattr__ = dict.__setitem__
    __delattr__ = dict.__delitem__

# Делаем замыкание
def prepare():
    from . import hidden

    # Почему-то эта манипуляция не очень полезна
    # и не мешает работе import pack.hidden
    sys.modules[hidden.__name__] = None

    # Зато можно почистить модуль от его содержимого
    # переложив его в локальную переменную
    local_hidden = dotdict()
    for name in hidden.__all__:
        local_hidden[name] = getattr(hidden, name)
        delattr(hidden, name)
    delattr(hidden, '__all__')

    # Будто ничего и не скрывалось!
    hidden = local_hidden

    # Здесь объявляем классы/функции/переменные,
    # для работы которых нужен скрываемый модуль
    def make_some_object():
        return hidden.Super(hidden.make_secret_key())

    # Перекладываем их в текущий модуль
    # При желании можно автоматизировать используя местный "__all__"
    this = sys.modules[__name__]
    setattr(this, 'make_some_object', make_some_object)
    delattr(this, 'prepare')

    # Вуаля, реальный hidden теперь бесполезен,
    # а local_hidden недоступен извне!

    # Возможно есть уязвимость к importlib.reload(pack.hidden)
    # но её можно постараться исправить

prepare()

main.py
Типа юзер, пытающийся использовать запретный модуль:

import pack.hidden as hidden

try:
    print(hidden.Super)
except AttributeError:
    print('** Невозможно обратиться к полю внутреннего модуля!')

Конечно, здесь скрыт не сам модуль, а его содержимое, зато скрыто оно довольно жёстко.


Включить директории в пакет
Собираю пакет
python. Мне требуется, помимо
package, которые содержат
__init__, также включить и ряд директорий, которые не содержат его. Как это сделать?

Необходимо добавить
package_data={'': ['cmd/*']},:

setuptools.setup(
    name=version.app_name,
    version=version.app_version,
    package_data={'': ['cmd/*']},
)


Дана матрица B[N, М]. Найти в каждой строке матрицы максимальный и минимальный элементы
Задание: Дана матрица B[N, М]. Найти в каждой строке матрицы максимальный и минимальный элементы и поменять их с первым и последним элементами строки соответственно.
Я сделал код - в итоге не работает: При вводе двух чисел ошибка сразу, а вот поменять их с первым и последним элементами строки - я не понимаю как сделать. Что не так? Заранее благодарю.
<code>
N = int(input())
M = int(input())
B = [[random.randrange(10) for i in range(N)] for j in range(N)]
for i in range(N, M):
    if B[i][j] >= 0:
        print('Максимальный элемент:', B)
    if B[i][j] < 0:
        print('Минимальный элемент:', B)

</code>

import random

N = int(input())
M = int(input())
B = [[random.randrange(10) for i in range(M)] for j in range(N)] # был неверно задан внутренний range
# для подобных случаев (когда нужен и индекс, и элемент) лучше воспользоваться enumerate
for i, row in enumerate(B):
    max = min = 0
    # поиск индексов максимального и минимального элемента
    for j, elem in enumerate(row):
        if elem > row[max]:
            max = j
        if elem < row[min]:
            min = j
    # меняем местами максимальный и нулевой
    row[max], row[0] = row[0], row[max]
    # меняем местами минимальный и последний
    row[min], row[-1] = row[-1], row[min]
print(B)


Как отсортировать двумерный массив по 1-ому элементу в массиве?
Как отсортировать двумерный массив по 1-ому элементу в массиве, используя алгоритм сортировки пузырьком?
<code>
[[3, 2, 1, 4, 5],
[4, 2, 2, 3, 4],
[2, 2, 3, 2, 2],
[1, 3, 2, 5, 2],
[5, 3, 4, 2, 1]]
</code>

Вот самый "примитивный" пузырек для 2-мерного списка:
<code>
def comparasion(a, b):
    return a > b

def bubble_sort(array):
    for j in range(len(array)-1):
        for i in range(len(array)-1):
            if comparasion(array[i][0], array[i+1][0]):
                array[i], array[i+1] = array[i+1], array[i]
    return array

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

print(bubble_sort(array))
</code>


Не получается подключится к БД firebird через библиотеку fdb
не получается подключится в db firebird на python с помощью библиотеки fdb, при выполнении кода получаю вывод ошибки
raise Exception("The location of Firebird Client Library could not be determined.") Exception: The location of Firebird Client Library could not be determined.
Пробовал добавлять в path папку с исполняемым скриптом а также добавлял dll-ку GDS32.DLL в \Python\Python38\lib\site-packages\fdb.

Проблема решилась установкой клиентского компонента Firebird


Python: поток запускается без команды запуска
При запуске следующего кода стартует поток, который запускает функцию (Вывод программы: "Function" ). Но команды  tmp.start() не было. Как это возможно? Python 3.8.2
<code>
import threading

def func():
    print("Function")

tmp = threading.Thread(target=func())
</code>

Вы вызываете
func, передавая не её объект параметром
target, а её результат (
None):

threading.Thread(target=func())
#                           ^^

Аналогично (только в Вашем случае):

func()
threading.Thread(target=None)

Передавайте именно объект, не вызывая его:

threading.Thread(target=func)


Предсказание перцептрона по сумме чисел во входящих секвенциях
Решаю стандартную задачу прогнозирования
0 или
1 по заданной секвенции. Как видно из входных данных, по значению первой позиции определяется выход.

# Perceptorn
# Sample         Input           Output
#  1         0   0  1               0
#  2         1   1  1               1
#  3         1   0  1               1
#  4         0   1  1               0

import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

training_inputs = np.array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])
training_outputs = np.array([[0, 1, 1, 0]]).T

synaptic_weights = 2 * np.random.random((3, 1)) - 1
print('Weights: \n', synaptic_weights)

Вывод ->

Weights:
 [[ 0.47501851]
 [-0.81516113]
 [ 0.01089572]]

Обучение перцептрона:

for i in range(20000):
input_layer = training_inputs
outputs = sigmoid(np.dot(input_layer, synaptic_weights))

err = training_outputs - outputs
delta = np.dot(input_layer.T, err * (outputs * (1 - outputs)))
synaptic_weights +=delta

print('WEights after training:\n', synaptic_weights)
print('Result, after training:\n', outputs)

Вывод ->

WEights after training:
 [[10.38047072]
 [-0.20694296]
 [-4.98423553]]

Result, after training:

[[0.00679865]
 [0.99445483]
 [0.99548673]
 [0.00553478]]

Предсказание:

# new situation
input_ = np.array([[1, 1, 0]])
output = sigmoid(np.dot(input_, synaptic_weights))
print(output)

Перцептрон справился с задачей и предсказал с вероятностью
0.99996183 что должна быть
1. А как решить задачу с помощью все того же перцептрона, если хочу получать
1 или
0 в зависимости от суммы секвенции. Например (сумма, близкая к
100):

(10, 20, 70) - 1,
(1, 4, 5)    - 0,
(100, 0, 0)  - 1.

Я подменял разные данные, игрался с количеством эпох, но удовлетворительный результат не получил.


Kак распарсить CSV файл в DataFrame?
Есть CSV файл:
<code>
df = pd.read_csv(data3, sep=" ", header=None)
</code>
Парсится в одну колонку, а надо в 4 колонки DataFrame.
Как сделать?


Как собрать все возможные формы слова в список?
Хочу собрать все возможные формы слова в один список с помощью библиотеки
pymorphy2. Атрибут
lexeme выводит большое количество ненужной информации и я не знаю как вывести все формы слова, которые она дает.
Как это реализовать?

# -*- coding: utf-8 -*-
import pymorphy2
morph = pymorphy2.MorphAnalyzer()
p = morph.parse('погода')[0]
print(p.lexeme)

Воспользуйтесь атрибутом .lexeme:

p = morph.parse('погода')[0]

In [35]: [(x.word, x.tag.case, x.tag) for x in p.lexeme]
Out[35]:
[('погода', 'nomn', OpencorporaTag('NOUN,inan,femn sing,nomn')),
 ('погоды', 'gent', OpencorporaTag('NOUN,inan,femn sing,gent')),
 ('погоде', 'datv', OpencorporaTag('NOUN,inan,femn sing,datv')),
 ('погоду', 'accs', OpencorporaTag('NOUN,inan,femn sing,accs')),
 ('погодой', 'ablt', OpencorporaTag('NOUN,inan,femn sing,ablt')),
 ('погодою', 'ablt', OpencorporaTag('NOUN,inan,femn sing,ablt,V-oy')),
 ('погоде', 'loct', OpencorporaTag('NOUN,inan,femn sing,loct')),
 ('погоды', 'nomn', OpencorporaTag('NOUN,inan,femn plur,nomn')),
 ('погод', 'gent', OpencorporaTag('NOUN,inan,femn plur,gent')),
 ('погодам', 'datv', OpencorporaTag('NOUN,inan,femn plur,datv')),
 ('погоды', 'accs', OpencorporaTag('NOUN,inan,femn plur,accs')),
 ('погодами', 'ablt', OpencorporaTag('NOUN,inan,femn plur,ablt')),
 ('погодах', 'loct', OpencorporaTag('NOUN,inan,femn plur,loct'))]


Вопрос по сворачиванию окна в pyqt5
Я убрал в своём коде всё заднее окно.(кнопку закрыть и т.п.) Я также добавил кнопку, по нажатию которой у меня закрывается программа. Теперь мне нужно сделать кнопку, которая будет сворачивать программу. Подскажите, какой код использовать.

Используйте метод showMinimized:
<code>
self.showMinimized()
</code>


Вычислить сумму и число положительных элементов матрицы A[N, N]
Задание: Вычислить сумму и число положительных элементов матрицы A[N, N], находящихся над главной диагональю.
Я сделал код, правда только не совсем работает так: Вывод положительных чисел не может убрать отрицательные (т.е. например: 2 3 4 5 -1, а вывод получается: 5, хотя должно быть 4). Также правильно ли я сделал с суммой, если я сделал с рандомным значением (Выводит при вводе 2 1 2 3 4: 48, потом 52, 37 и т.д.)? Заранее благодарю.
<code>
import random
pol = 0
s=0
i=0
k=1
aar = []
N=int(input('Ввод: '))
A=[[random.randrange(10) for i in range(N)] for j in range(N)]
for row in range(N):
    for col in range(row + 1, N):
         s+=A[row][col]

for row in range(N):
    aar.append(input())
    if N > 0:
        pol += 1
print('Сумма:', s)
print('Число:', pol)
</code>

Это же можно сделать более эффективно:

import random
pol = 0
s = 0
N = int(input('Ввод: '))
A = [[random.randrange(10) for i in range(N)] for j in range(N)]
for i in range(N):
    for j in range(i+1, N):
        if A[i][j] <= 0:
           continue
        if A[i][j] > 0:
            pol += 1
            s += A[i][j]

print('Сумма:', s)
print('Число:', pol)

Или даже при генерации данных (при считывании, без хранения матрицы):

import random

pol = 0
s = 0
N = int(input('Ввод: '))
for i in range(N):
    for j in range(i+1, N):
        a_ij = random.randrange(10)
        if a_ij <= 0:
           continue
        if a_ij > 0:
            pol += 1
            s += a_ij

print('Сумма:', s)
print('Число:', pol)


Ошибка в sqlite3
Почему выдает ошибку?

Ошибка:
"sqlite3.OperationalError: near "table": syntax error"
Код

def sqlLiteConnect(self, db, table, column_name, lang=None):
    self.connect = sqlite3.connect(db)
    self.cursor = self.connect.cursor()
    self.query_columns = "PRAGMA table_info('+table+')"
    self.cursor.execute(self.query_columns)

    self.queryRow = """SELECT id, Word, Translation FROM table  WHERE id=random.randomint(0, 2000) """
    self.cursor.execute(self.queryRow)
    print(self.queryRow)
    self.cursor.commit()

sqlLiteConnect(self, 'db/Lings_Words_Db.db', 'generalWords', 'Word')

Первая ошибка, в этой строке:

self.query_columns = "PRAGMA table_info('+table+')"

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

self.query_columns = "PRAGMA table_info(" + table + ")"

Т.е. должны соединяться три строки:
"PRAGMA table_info(", строка из переменной table и
")", а у вас просто одна цельная строка, в которой table - это просто текст, а не имя переменной. Пробелы до и после + не играют роли, я их добавил для лучшей читаемости. Также, если нужно чтобы имя таблицы в итоговой строке было обернуто в одинарные кавычки, то нужно делать так:

self.query_columns = "PRAGMA table_info('" + table + "')"

Вторая ошибка: в SQL запрос вы добавили python код
random.randomint(0, 2000) - но SQL этот код не сможет выполнить. Нужно получить случайное число средствами python, потом передать его в запрос:

self.queryRow = """SELECT id, Word, Translation FROM table  WHERE id=?"""
self.cursor.execute(self.queryRow, (random.randomint(0, 2000),))

См. справку по методу execute.
Третья ошибка: в запросе
"""SELECT id, Word, Translation FROM table  WHERE id=?""" table - это просто текст, который будет воспринят как имя таблицы (таблицы с именем
table), а не имя переменной, вместо которой подставится значение аргумента метода.
Полный исправленный код метода:

def sqlLiteConnect(self, db, table, column_name, lang=None):
    self.connect = sqlite3.connect(db)
    self.cursor = self.connect.cursor()
    self.query_columns = f"PRAGMA table_info('{table}')"
    self.cursor.execute(self.query_columns)

    self.queryRow = f"""SELECT id, Word, Translation FROM {table} WHERE id=?"""
    self.cursor.execute(self.queryRow, (random.randomint(0, 2000),))
    print(self.queryRow)
    self.cursor.commit()

Обратите внимание: я использовал f-строки для подстановки значений переменных внутрь строк запроса. Подробнее можно почитать, например, здесь: Форматирование в Python с помощью f-строк


Ошибка - TypeError: place_configure() missing 1 required positional argument: 'self'
подскажите пожалуйста, как исправить эту ошибку? Перелистал все ответы в инете, так пока и не понял.
<code>
class Btn:

    button = Button

    def __init__(self, text, x, y, height=80, width=60):
        self.text = text
        self.height = height
        self.width = width
        self.x = x
        self.y = y

    def conclusion(self): #появление кнопки
        self.button(text=self.text,
                    background='#555',
                    foreground='#ccc',
                    font='16'
                    )

        self.button.place(x=self.x, y=self.y, height=self.height, width=self.width) #вот тут ошибка

</code>

У вас
button это не объект, а тип
Button, подробнее:

button = Button -- это в поле
button сохранена ссылка на тип
Button

self.button( это тоже самое, что
Button(, т.е. создание и возврат объекта

self.button.place тоже самое, что
Button.place(, т.е. обращение к методу через его тип

Решение:

class Btn:
    def __init__(self, text, x, y, height=80, width=60):
        self.text = text
        self.height = height
        self.width = width
        self.x = x
        self.y = y
        self.button = None

    def conclusion(self):  # Появление кнопки
        self.button = Button(
            text=self.text,
            background='#555',
            foreground='#ccc',
            font='16'
        )
        self.button.place(x=self.x, y=self.y, height=self.height, width=self.width)


Изменять экземпляры Ellipse в kivy
<code>
from random import randint,choice
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button

from kivy.clock import Clock
from kivy.core.window import Window
from kivy.graphics import Color, Ellipse, Rectangle, Line

class Ball(Widget):
    def __init__ (self,**kwargs):
        super().__init__()
        self.x=randint(100,700)
        self.y=randint(100,900)
        self.sx=1
        self.sy=1
        self.r = 40
        self.color = Color(0,1,0,1)
        self.elly= Ellipse(pos=(self.x-self.r/2,self.y-self.r/2),size=(self.r,self.r))

    def draw(self):
        self.canvas.add(self.color)
        self.canvas.add(self.elly)

    def on_touch_down(self, touch):    #не работает
        self.ball.pos=(touch.x,touch.y)

class Game(Widget):
    def __init__ (self,**kwargs):
        super().__init__()
        for i in range(15):
            self.ball=Ball()
            self.add_widget(self.ball)
            self.ball.draw()

    def start(self):    #не работает
        Clock.schedule_interval(self.update, 0.1)

    def update(self):    #не работает
        self.ball.pos = (self.ball.pos[0] + 1, self.ball.pos[1] + 1)

    def on_touch_down(self, touch):    #не работает
        self.ball.pos=(touch.x,touch.y)

class MyApp(App):
    def build(self):
        self.game=Game()
        self.game.start
        return self.game
</code>
Никак не получается создать много шаров и патом взаимодействовать с ними.
В Tkinter можно было загнать их все в список,а в kivy получается ошибка.

Ошибка 1:

class MyApp(App):
    def build(self):
        self.game=Game()
        self.game.start()  # но не self.game.start
        return self.game

Ошибка 2:

class Game(Widget):
    def update(self, interval):  # но не def update(self):
        ...

Ошибка 3:

def on_touch_down(self, touch):
    ...
    # обязательно нужно вернуть результат
    return super().on_touch_down(touch)

Это только при первом взгляде на ваш код...


Не работает цикл из-за Tkinter! [дубликат]

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

Sleep и while True в tkinter

                                (1 ответ)

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

Как я понял, tk с циклами не дружит, т.к само окно (root, window...) по сути является циклом. Моя программа, которая должна выводить данные о процессоре, должна также выводить загрузку ЦП на ДАННЫЙ МОМЕНТ, т.е должен быть цикл обновления этих значений. Моя идея состояла в том, чтобы после кнопок и прочего добавить вот такой цикл обновления значения:
<code>
while True: # Цикл изменения параметров
    cpy_load_info.configure(text=str(psutil.cpu_percent())) # Возвращает нагрузку ЦП в виде float
    time.sleep(1) # Задержка
</code>
Но когда я запускаю код, окно просто не появляется, а просто идет выполнение моего цикла. Что делать?

def func():
    #ваши действия
    root.after(1000,func)

func()

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

root.after это штука ткинтера, внутри милисекунды и имя функции без ().


Не получается скомпилировать код для бота discord на python
Недавно начал писать боты для дискорда, прошу строго не судить, если в коде можно что-то улучшить или если моя проблема выглядит глупо. Если что-то можно улучшить в коде - пишите, приму критику.
Когда я ввожу данный код в своем боте python для дискорда:

@client.event
async def on_message(message):
    msg = message.content.lower()

    if msg in coords:
        await message.channel.send("zero zero 0")

я получаю ошибку в консоли при компиляции:

TypeError: argument of type 'Command' is not iterable
Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\Guest\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\client.py", line 312, in _run_event
    await coro(*args, **kwargs)
  File "bot.py", line 31, in on_message
    if msg in coords:
TypeError: argument of type 'Command' is not iterable

Ошибки нет, если я уберу данные строки.
На всякий, оставляю полный код:

import discord
from discord.ext import commands
from discord.ext.commands import Bot

client = commands.Bot(command_prefix = "$")

coords = ["корды", "база", "где база", "координаты", "координаты базы", "coords", "base", "where is base", "koordinati", "kordi", "kords", "koords", "кордс", "коордс", "базы координаты"]

@client.event

async def on_ready():
    print("УРА Я СКОМПИЛИРОВАЛАСЬ! УРА<С САТАНА ПРИШЕЛ")

@client.command(pass_context = True)
async def hello (ctx):
    await ctx.send (f"Hi (тут будет потом ник чела, который ввел команду)!\n\nI am bot-helper, which can you say to you all, what do you want about clan.\n\nПривет, (тут тоже)!\n\nЯ бот, который будет говорить все новости клана, которые мне извистны и которые ты пожелаешь!\n\nPrint: $help to show my commands!\nВведи $help для списка доступных команд!")

@client.command(pass_context = True)

async def coords (ctx):
    await ctx.send ("Coords: тест\nКоординаты: zero zero 0. Coords: zero zero null")

@client.event
async def on_message(message):
    msg = message.content.lower()

    if msg in coords:
        await message.channel.send("zero zero 0")

#connect
token = open("token.txt", 'r').readline()
client.run(token)

Заранее, спасибо

Вы переопределили список
coords функцией:

coords = ["корды", "база", "где база", "координаты", "координаты базы", "coords", "base", "where is base", "koordinati", "kordi", "kords", "koords", "кордс", "коордс", "базы координаты"]

async def coords (ctx):
    await ctx.send ("Coords: тест\nКоординаты: zero zero 0. Coords: zero zero null")

Переименуйте либо список, либо функцию.
Пример:

coordinates = ["корды", "база", "где база", "координаты", "координаты базы", "coords", "base", "where is base", "koordinati", "kordi", "kords", "koords", "кордс", "коордс", "базы координаты"]

async def on_message(message):
    msg = message.content.lower()

    if msg in coordinates:
        await message.channel.send("zero zero 0")


Использование функций класса для всех объектов этого класса
Можно ли каким-то образом сделать так, что бы все объекты определенного класса выполнили нужную функцию этого класса? Например, мы создали очень много объектов и переписывать строку вызова функции для всех было бы весьма долго.

class Myclass
    def Function():
    print ("просто функция")

object1 = Myclass()
object2 = Myclass()
object3 = Myclass()
...

Далее идет обильное кол-во подобных объектов, для каждого из которых надо будет
применить функцию Function.
Как можно заменить такое большое количество строк:

object1.Function()
object2.Function()
object3.Function()
и т.д.

Я бы рассмотрел такое решение
<code>
class Myclass

    def Function():
       print ("просто функция")
objects = []

o1 = Myclass()
objects.append(o1)
o2 = Myclass()
objects.append(o2)
o3 = Myclass()
objects.append(o3)

def do_function(objects):
   for object in objects:
      object.Function()
</code>
Так же можно сделать процедуру создания объекта, которая будет создавать объект и заносить его в массив объектов.


Python. Django. Problem encoding xlsx file
Всем доброго времени суток!
Только разобрался с тем, как решить этот вопрос (возможно, я точно не знаю, это может быть связано с моим текущим вопросом), как появилась следующая ошибка...
Долго пытался по-разному обработать xslx файл. Одна из версий:
admin.py

class AddScheduleItems(admin.ModelAdmin):

def parse_file(self, csv_upload):
    file = csv_upload.read().decode('utf-8')
    csv_data = csv.reader(StringIO(file))
    for row in csv_data:
        print(row)

def save_model(self, request, obj, form, change):
    self.parse_file(obj.file)
    super().save_model(request, obj, form, change)

Трейс:

  Traceback (most recent call last):
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\options.py", line 606, in wrapper
    return self.admin_site.admin_view(view)(*args, **kwargs)
  File "C:\Users\Иван\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\decorators.py", line 142, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "C:\Users\Иван\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\sites.py", line 223, in inner
    return view(request, *args, **kwargs)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\options.py", line 1645, in add_view
    return self.changeform_view(request, None, form_url, extra_context)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\decorators.py", line 45, in _wrapper
    return bound_method(*args, **kwargs)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\decorators.py", line 142, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\options.py", line 1529, in changeform_view
    return self._changeform_view(request, object_id, form_url, extra_context)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\options.py", line 1572, in _changeform_view
    self.save_model(request, new_object, form, not add)
  File "C:\Projects\dr\hram\schedule\admin.py", line 34, in save_model
    self.parse_file(obj.file)
  File "C:\Projects\dr\hram\schedule\admin.py", line 28, in parse_file
    file = csv_upload.read().decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 16: invalid start byte

Я пробовал много разных вариаций, пробовал и другие кодировки, но все время во что-то упирался.
Ошибка для 'ascii':

'ascii' codec can't decode byte 0x82 in position 16: ordinal not in range(128)

Ошибка для 'cp437' и 'ISO-8859-1':

 Traceback (most recent call last):
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\options.py", line 606, in wrapper
    return self.admin_site.admin_view(view)(*args, **kwargs)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\decorators.py", line 142, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\sites.py", line 223, in inner
    return view(request, *args, **kwargs)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\options.py", line 1645, in add_view
    return self.changeform_view(request, None, form_url, extra_context)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\decorators.py", line 45, in _wrapper
    return bound_method(*args, **kwargs)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\decorators.py", line 142, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\options.py", line 1529, in changeform_view
    return self._changeform_view(request, object_id, form_url, extra_context)
  File "C:\Users\lll\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\options.py", line 1572, in _changeform_view
    self.save_model(request, new_object, form, not add)
  File "C:\Projects\dr\hram\schedule\admin.py", line 34, in save_model
    self.parse_file(obj.file)
  File "C:\Projects\dr\hram\schedule\admin.py", line 30, in parse_file
    for row in csv_data:
_csv.Error: line contains NUL

Ошибка для 'windows-1251':

'charmap' codec can't decode byte 0x98 in position 596: character maps to <undefined>

В связи с этим, у меня возникло стойкое ощущение, что я просто неправильно обрабатываю xlsx файлы средствами Django или Питона, но где именно понять не могу.
Буду максимально благодарен за подсказ!!!

В общем и целом, подвела моя внимательность и соображалка. Я пытался обработать xlsx файл библиотекой csv... Поменял на openpyxl и все заработало.


Почему не перехватывается исключение NameError?
Немогу понять, почему не перехватывается исключение
NameError. Что не так с кодом?

def chek(args):
    c = 1
    while c == 1:
        try:
            count = 0
            for a in args:
                args[count] = int(a)
                count += 1
        except (TypeError, ValueError):
            del args[count]
        except NameError:
            print(count)
            args[count] = ''
        else:
            c = 0
    return args

args = [5,'z',7,6,t,4]
args = chek(args)

Переменная
t не определена:

args = [5, 'z', 7, 6, t, 4]
#                     ^

Вы не перехватываете это исключение. Чтобы перехватывать его:

try:
    args = [5, 'z', 7, 6, t, 4]
except NameError:
    pass

Ваше решение можно упростить:

def chek(li):
    i = 0
    while i < len(li):
        try:
            li[i] = int(li[i])
            i += 1
        except (TypeError, ValueError):
            del li[i]
    return li


Тьюториал docker-compose из python
Есть ли возможность запустить из python docker-compose, без запуска дополнительного процесса?

В тестах CLI
docker-compose можно найти TopLevelCommand, который и является классом для запуска
docker-compose.
Немного детальнее. Создадим несколько функций, который мы получили из вышеуказанного репозитория.

from compose.cli.command import get_project
from compose.cli.utils import get_version_info
from compose.cli.main import TopLevelCommand, setup_logging, setup_console_handler, console_handler, \
    set_no_color_if_clicolor, setup_parallel_logger, perform_command
from compose.cli import errors
from compose.cli.docopt_command import DocoptDispatcher
import functools

setup_logging()
dispatcher = DocoptDispatcher(
    TopLevelCommand,
    {'options_first': True, 'version': get_version_info('compose')})

options, handler, command_options = dispatcher.parse(sys.argv[1:])
setup_console_handler(console_handler,
                      options.get('--verbose'),
                      set_no_color_if_clicolor(options.get('--no-ansi')),
                      options.get("--log-level"))
setup_parallel_logger(set_no_color_if_clicolor(options.get('--no-ansi')))
if options.get('--no-ansi'):
    command_options['--no-color'] = True
cmd = functools.partial(perform_command, options, handler, command_options)
cmd()

Далее, можно сжать код до следующего:

from compose.cli.command import get_project
from compose.cli.utils import get_version_info
from compose.cli.main import TopLevelCommand
from compose.cli import errors
from compose.cli.docopt_command import DocoptDispatcher
import functools

def perform_command(options, handler, command_options):
    project_dir = '.'

    project = get_project(project_dir, options.get('--file'))
    command = TopLevelCommand(project, options=options)
    with errors.handle_connection_errors(project.client):
        handler(command, command_options)

def run(src_path=None):
    if src_path is None:
        src_path = './'
    dispatcher = DocoptDispatcher(
        TopLevelCommand,
        {'options_first': True, 'version': get_version_info('compose')},
    )

    cli_command = ['-f', 'docker-compose.yml', 'up', '-d']

    options, handler, command_options = dispatcher.parse(cli_command)
    command = functools.partial(perform_command, options, handler, command_options)
    command()

Этот кусок кода запускает docker-compose из файла, основываясь на
cli интерфейсе.
Теперь, если заглянуть внутрь
TopLevelCommand, в частности, внутрь
up, то легко увидеть, что код сводится к следующему:

from compose.cli.command import get_project
from compose.cli.docopt_command import DocoptDispatcher

def run(src_path=None):
    if src_path is None:
        src_path = './'
    dispatcher = DocoptDispatcher(
        TopLevelCommand,
        {'options_first': True, 'version': get_version_info('compose')},
    )

    cli_command = ['-f', f'{src_path}docker-compose.yml', 'up', '-d']

    options, handler, command_options = dispatcher.parse(cli_command)
    project_dir = '.'
    project = get_project(project_dir, options.get('--file')).up()
    print(project)

И, затем, к следующему:

from compose.cli.command import get_project

def run(file_path, project_dir):
    servies = get_project(project_dir, [file_path]).up()
    return servies

где, в
project хранится список запущенных сервисов.
Таким образом, если Вам требуется сократить число команд и вызывать
docker-compose на уровне языка, следует выполнить команду, как написано в первом блоке, а затем проследить, какие конструкции языка используются.


Создание двух параллельных процессов при запуске приложения на kivy
У меня такой вопрос. При запуске программы некоторое время "висит" белый экран, и только потом открывается само приложение. Это связано с тем, что перед открытием приложения обрабатывается некоторый объем данных.
Так вот, хотел узнать, возможно ли сделать так, чтобы во время открытия программы был не просто белый экран, а, например,
ProgressBar.

Нет нельзя. Белый/черный экран - это процесс выполнения вашего
main.py от первой строчки и метода
__init__ до метода
build класса
App. И время, которое экран "висит" напрямую зависит от того, что вы там накодили. Если вы в методе
build грузите 100500
KV файлов, то не удивляйтесь, что приложение долго стартует.


поворот устройства на бок с картинкой в kivy
При повороте устройства на бок,приложение остаётся горизонтальным. Как запретить ему это, чтобы изображение тоже повернулось на бок ?
В kivy
Без выключения автоповорота в андроиде.Некоторые приложения так умеют, например clean master.

В файле спецификации
buildozer.spec смотрите:

# (str) Supported orientation (one of landscape, sensorLandscape, portrait or all)
orientation = portrait


Группировка и сортировка результирующей DataFrame из двух таблиц
Есть две таблицы:

People (id, Name, Salary, Sex, Profession)
Cars (id, id_polyuda, Mark)

Надо создать таблицу минимальных и максимальных зарплат в зависимости от пола, профессии и количества машин у одного человека. Вот исходные данные:

 ID      Name   Profession     Salary             Sex
  1 SMITH      Author          40000              m
  2 JOHNSON    Bricklayer       4000              f
  3 WILLIAMS   Cleaner         41000              m
  4 JONES      Florist          4500              f
  5 BROWN      Librarian        3900              m

 ID  ID_person Model   Price
  0    5       LADA    100000
  1    2      Toyota   50000
  2    1      Toyota   600000
  3    3      Daewoo   65000
  4    4      Subaru   300000

Я пробовал так:

res = people.groupby("['salary'], sort = True", "['salary'], sort = False", ["Sex"], ["Profession"],)

А как посчитать машины из из таблицы
Cars по
ID_Person? К тому же не знаю как группировать.

я бы делал это так:

car_stats = (cars
             .groupby("ID_person")
             .agg(cars_count=("Price", "size"), total_price=("Price", "sum"))
             .rename_axis("ID")
             .reset_index())

res = (people
        .merge(car_stats, how="left")
        .fillna(0)
        .groupby(["Sex", "Profession", "cars_count"])
        .agg(
            min_salary=("Salary", "min"),
            max_salary=("Salary", "max")
        ))

In [38]: res
Out[38]:
                           min_salary  max_salary
Sex Profession cars_count
f   Bricklayer 1                 4000        4000
    Florist    1                 4500        4500
m   Author     1                40000       40000
    Cleaner    1                41000       41000
    Librarian  1                 3900        3900

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


Django. Выполнение функции при добавлении модели
Задача такая: есть файл excel, который ежемесячно необходимо загружать и данные из этого файла должны перетекать в модельку X.
Как я увидел решение: я создал отдельную модель с одним полем FileField, туда загружается Excel. Затем, добавил кнопку в админку, по которой последний файл обрабатывался и добавлял новые записи в Х.
Вопрос: где-то интуитивно я понимаю, что это похоже на самодел и должен быть метод, позволяющий при загрузке этого Excel-файла автоматически выполнять какую-то другую функцию.
Буду благодарен за помощь!

Вы можете объявить необходимые при сохранении модели действия

# admin.py

from .models import ModelName
from django.contrib import admin

class SaveData(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        pass # вместо pass то, что нужно делать, когда модель сохраняется черед админку
        super().save_model(request, obj, form, change)

admin.site.register(ModelName, SaveData)

При сохранении данных через админку Django будет вызываться метод
save_model указанного дочернего для
ModelAdmin класса (в данном случае -
SaveData)
Это также можно оформить с использованием декоратора:

# admin.py

from .models import ModelName
from django.contrib import admin

@admin.register(ModelName)
class SaveData(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        pass # вместо pass то, что нужно делать, когда модель сохраняется черед админку
        super().save_model(request, obj, form, change)

Исходный ответ


Есть стандартный layout для python проектов?
Есть стандартный layout для python проектов? Например, для golang такой сделан.
Меня интересует структура проекта для микросервиса.

На Питоне разрабатываются проекты для разных задач и под разные платформы с использованием различных фреймворков, движков и прочих технологий. Структуры проектов ничто не ограничивает и мало кто регламентирует, поэтому зачастую они получаются очень специфическими для конкретного проекта.
Среди фреймворков, свою стандартную структуру проектов продвигает Django (там она формируется автоматически командой
django-admin startproject mysite). Схематично это выглядит так:

[projectname]/
├── [projectname]/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

Подробнее о ней можно узнать в соответствующем вопросе на enSO и в этой доке. Однако стоит заметить, что ничто не мешает создать Django-проект с любой другой структурой.
Также, структуру проекта задаёт Flask, но не стандартно и автоматически, а только небольшим описанием в документации.
Большинство других фреймворков никак не регламентируют структуру проектов (вероятно, в виду не такой популярности, как у того же Django), и разработчики-пользователи_библиотек сами выбирают подходы руководствуясь опытом, спецификой проекта и здравым смыслом. Например, как в этом обсуждении структуры проектов на PyGame.


Нужно узнать тип (расширение) файла с FTP-сервера
Делаю
FTP-client на python и PyQt5. Нужно определять что является папкой(каталогом), а что является файлом((На сервере))?
FTP.mlsd() не работает(сервер не поддерживает)

Получение имени файла из url и его расширения:

filename = QUrl("ftp://myserver.com/myfile.txt").fileName()
if filename:
    print(f{"url contains a file {filename}"}) # выведет myfile.txt
    # Получение расширения файла
    print(f'extention={QFileInfo(filename).completeSuffix()}) # выведет txt
else:
    print("url is not a file")

Вот такой вариант тоже вернет имя файла:

filename = QUrl("ftp://myserver.com/myfile").fileName()
if filename:
    print(f{"url contains a file {filename}"}) # выведет myfile

А вот такой в результате выдаст пустую строку:

filename = QUrl("ftp://myserver.com/myfile/").fileName()
print(filename) # пустая строка

Такие вызовы просто распарсят строку и вернут результат, в частности имя файла.
Для получения ресурсов на ftp-сервере надо воспользоваться классом QFtp
как вот в этом примере
Схематично работу с QFtp можно изобразить так:

# Слот. Вызывается для каждого ресурса ftp-сервера
def readFtpResource(urlInfo):
    urlInfo.name() # Вернет url-строку, которую можно отправить в QUrl как описано выше
    urlInfo.isFile() # Сразу скажет является ли ресурс файлом
    urlInfo.isDir() # Является ли ресурс директорией
    # и так далее

ftp = QFtp(<адрес ftp-сервера>)

# Соединяем сигнал обработки ресурсов сервера
ftp.listInfo.connect(readFtpResource)

# Подключение к серваку
ftp->connectToHost(hosturl, port);


Задача на динамическое программирование - Вася и конструктор чисел

У Васи есть любимый конструктор чисел. Он представляет из себя табличку длины
  N и неограниченный запас цифр от 0 до 9.
Для каждого числа Вася считает его крутость. Крутость  — это сумма произведений всех пар соседних цифр в числе, но при этом числа, в которых рядом стоят две одинаковые цифры, всегда имеют крутость 0. Вася очень любит играть с конструктором, поэтому он износился, и в некоторых позициях застряли цифры. Вася хочет узнать, насколько максимальная крутость числа в изношенном конструкторе меньше крутости самого крутого числа в новом конструкторе, в котором нет застрявших цифр.

Входные данные:

В первой строке записано число 1≤N≤10^5. Во второй строке содержится S длины N, в которой на позиции i стоит ∗ если позиция свободна, и на неё можно ставить любую цифру, в противном случае на i-й позиции записана цифра от 0 до 9.

Выходные данные:

Выведите единственное целое число: разницу между крутостью самого крутого числа в новом конструкторе и конструкторе Васи.

Мой код:
<code>
n = int(input())
table = input()
if table.replace('*', '') == '':
    print(0)
else:
    table = table.split()
    maximum = 72 * (n - 1)
    masked = 0

    # Что тут?

    print(maximum - masked)
</code>
Это задача на динамическое программирование, но я не знаю, какой массив создать и какие в нём рекуррентные соотношения. Буду рад любой подсказке. Желательно сегодня :)
P.S. Способы решения не важны, главное - эффективность.

Фрагменты между предопределёнными числами независимы, поэтому Вам достаточно создать функцию, которая находит наилучшую последовательность длиной p, ограниченную слева и справа заданными числами. Например, для куска 9*8 это 7, для 9**9 это 87  и т.д.