Некоректный вывод скринов на майл с помощью MIMEImage
Суть программы: Каждые 10 сек отправлять на майл по одному скрину.
Проблема: Начиная со второй отправки, программа отправляет уже не одно, а два скрина, т.е. добавляет текущий скрин к предыдущему.
<code>
msg = MIMEMultipart()

while True:
    pyautogui.screenshot('screen.png')
    img_data = open('screen.png', 'rb')
    image = MIMEImage(img_data.read(), name=os.path.basename('screen.png'))
    msg.attach(image)
    img_data.close()
    os.remove(os.path.basename('screen.png'))

    server = smtplib.SMTP('smtp.mail.ru')
    server.starttls()

    server.login(msg['From'], password)
    server.sendmail(msg['From'], msg['To'], msg.as_string())

    server.quit()
    time.sleep(10)
</code>

Одним из решений будет пересоздание
MIMEMultipart в цикле, но придется заново заполнять его поля:

while True:
    msg = MIMEMultipart()
    ...

Однако, посмотрев исходники увидел недокументированный способ в
Lib\email\message.py:

    #
    # Payload manipulation.
    #
    def attach(self, payload):
        """Add the given payload to the current payload.

        The current payload will always be a list of objects after this method
        is called.  If you want to set the payload to a scalar object, use
        set_payload() instead.
        """
        if self._payload is None:
            self._payload = [payload]
        else:
            try:
                self._payload.append(payload)
            except AttributeError:
                raise TypeError("Attach is not valid on a message with a"
                                " non-multipart payload")

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

while True:
    if msg._payload:
        msg._payload.clear()
    ...


Как можно сделать ответ на событие в discord.py?
Хочу добавить в бота для discord, написаного на python (discord.py) событие, которое совершается при входе пользователя на сервер и выводит приветственное сообщение по типу "Добро пожаловать! Чтобы узнать команды бота введите: !com". В документации я нашел как сделать подобное событие (on_member_join), но в этом случае нельзя выводить сообщение в чат, метод send() не работает.
Вот что я сделал:

import discord
from discord.ext import commands

client = commands.Bot(command_prefix='!')

@client.event
async def on_member_join(ctx, member):
    """Ввывод информации об выходе пользователя."""
    await ctx.send(f'Добро пожаловать {member}! Напиши !com чтобы узнать мои команды.')

client.run("Token") # Токен бота

Выходит такая ошибка:

TypeError: on_member_join() missing 1 required positional argument: 'ctx'

Как ее обойти?

<code>
@client.event
async def on_member_join(member):
    """Ввывод информации об выходе пользователя."""
    await member.send(f'Добро пожаловать {member}! Напиши !com чтобы узнать мои команды.')
</code>
UPD: Если кому интересна полная реализация, она находится на моем репозитории GitHub. Если есть вопросы, задавайте в Discussion репозитория. Буду рад если поддержите звездочкой :)


Ошибка /N в адресе файла
При запуске файла таким образом:
<code>
import os
    os.startfile('C:\Python27\BUY\Nine.py',)
</code>
Выдает ошибку что он не может нормально работать (я утрирую) из-за "/N", как оказалось что речь идет про "/Nine.py", а точнее начало слова "Nine". Но почему питон обращает на это внимание я так и не понял.
Как это можно избежать или всегда придется назвать файл без "N"?

Добавьте
r перед строкой.

import os
os.startfile(r'C:\Python27\BUY\Nine.py',)

Ошибка у Вас из-за того, что интерпретатор интерпретирует последовательность символов
\N как какой-то один спецсимвол, а не как 2 разных символа. Если бы у Вас в пути встретилась последовательность символов
\n, то это интерпретировалось бы как перенос строки. Думаю, понятно объяснил.
Буква
r перед строкой обозначает
raw, т.е. воспринимать строку "как есть" (интерпретировать символы
\ как полноценные символы, а не как часть спецсимволов).


При записи данных в файл значение не изменяется
Выполняю задание из книги «A Byte of Python» и столкнулась со следующей проблемой.
При изменении данных в файле (в методе
change_item) не меняется значение данного ключа. При выводе функции
read_book печатается словарь без изменений.
Само задание:

Создайте собственную программу «Адресная книга», работающую из командной строки и позволяющую просматривать, добавлять, изменять, удалять или искать контактные данные ваших знакомых.
Создайте класс для хранения персональных данных. Объекты визитных карточек храните в словаре, в котором имена контактов будут служить ключами.
Для длительного хранения этих объектов на жёстком диске воспользуйтесь модулем pickle.
Для добавления, изменения или удаления контактов применяйте встроенные методы словаря.

Код:

import pickle

addressBook = {}

def read_book():
    with open('addressbook.pkl', 'rb') as book:
        addressBook = pickle.load(book)
        for name, number in addressBook.items():
            print(name, '-', number)

class Person():
    def __init__(self, name, number):
        self.name = name
        self.number = number
        with open('addressbook.pkl', 'wb') as book:
            pickle.dump(addressBook, book)
            addressBook[name] = number
            print('saved')

    def change_item(self, name, number):
        with open ('addressbook.pkl', 'wb') as book:
            pickle.dump(addressBook, book)
            addressBook[name] = number

    def delete_item(self, name):
        with open ('addressbook.pkl', 'rb') as book:
            addressBook = pickle.load(book)
            if name in addressBook:
                del addressBook[name]
                with open('addressbook.pkl', 'wb') as book:
                    pickle.dump(addressBook, book)

    def search(self, name):
        with open ('addressbook.pkl', 'rb') as book:
            addressBook = pickle.load(book)
            for i in addressBook:
                if i == name:
                    print(i, addressBook[i])

Вы перепутали местами строки в
__init__:

    def __init__(self, name, number, addressBook):
        self.name = name
        self.number = number
        with open('addressbook.pkl', 'wb') as book:
            addressBook[name] = number # сначала меняем "записную книжку"
            pickle.dump(addressBook, book) # потом записываем

            print('saved')


Как проверить наличие значения переменной в списке?
Допустим есть такой код:
<code>
variable = 'Яблоко'
mylist = ['Морковь', 'Яблоко', 'Мандарин']
</code>
Как проверить, есть ли значение, равное значению переменной в списке?
Извиняюсь за столь глупый вопрос :)

Дополню комментарий к Вашему вопросу. Действительно, самый лёгкий способ - использовать оператор
in:
variable in mylist (вызывает
mylist.__exists__).
Также можно использовать метод list.count() в конструкции if наподобии:

if mylist.count(variable) > 0:
    ...


pygame: AttributeError: 'int' object has no attribute 'health_restart'
это main

import pygame
import random
import show_text
import loading
import window
import health

pygame.init()

FPS = 60
FPSclock = pygame.time.Clock()

display_width = 1920
display_height = 1080
display = pygame.display.set_mode((display_width, display_height),
pygame.HWSURFACE|pygame.DOUBLEBUF|pygame.FULLSCREEN)

def run_game():
    game = True
    health = 100
    health_max = 100
    while game:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        display.fill(12, 16, 10)

        window.button_ghost_minus("- health", (39, 176, 11), (39, 176, 64), 'font4', 50, 855, 540, 1, 'health')
        window.button_ghost("restart health", (39, 176, 11), (39, 176, 64), 'font4', 50, 855, 640, health.health_restart)
        health.health_bar(health, health_max, (50, 50, 50), (50, 120, 30), 100, 100, 20)

        pygame.display.update()
        FPSclock.tick(FPS)

это window

import pygame
import show_text
import health

pygame.init()

FPS = 60
FPSclock = pygame.time.Clock()

display_width = 1920
display_height = 1080
display = pygame.display.set_mode((display_width, display_height),
pygame.HWSURFACE|pygame.DOUBLEBUF|pygame.FULLSCREEN)

def button_ghost_minus(text, color_text1, color_text2, font, font_size, x, y, minus, obj):
    width = len(text) * font_size
    height = font_size
    mouse = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()
    if x < mouse[0] < x + width and y < mouse[1] < y + height:
        show_text.message(text, color_text2, x + 5, y + 5, font, font_size)
        if click[0] == 1:
            show_text.message(text, color_text1, x + 5, y + 5, font, font_size)
            if action is not None:
                if obj == 'health':
                    health.health1 -= minus
                else:
                    pass
    else:
        show_text.message(text, color_text1, x + 5, y + 5, font, font_size)

это health

import pygame
import show_text
import window

display_width = 1920
display_height = 1080
display = pygame.display.set_mode((display_width, display_height),
pygame.HWSURFACE|pygame.DOUBLEBUF|pygame.FULLSCREEN)

pygame.init()

health1 = 100
health1_max = 100

def health_bar_rect(color_max, color, x, y, height):
    global health1
    global health1_max
    pygame.draw.rect(display, color_max, (health1_max + 10, height + 10, x, y))
    pygame.draw.rect(display, color, (health1, height, x + 5, y + 5))

def health_restart():
    global health1
    global health1_max
    health1 = health1_max
    return health1

вот это show_text

import pygame

pygame.init()

display_width = 1920
display_height = 1080
display = pygame.display.set_mode((display_width, display_height),
pygame.HWSURFACE|pygame.DOUBLEBUF|pygame.FULLSCREEN)

def message(text, color, x, y, font, font_size): # функция(текст, цвет, x позиция, y позиция, 'шрифт', размер шрифта)
    font1 = pygame.font.Font('Monaco.ttf', font_size)   # 'шрифт1'
    font2 = pygame.font.Font('Marske.ttf', font_size)   # 'шрифт2'
    font3 = pygame.font.Font('hack.ttf', font_size)    # 'шрифт3'
    font4 = pygame.font.Font('ArcadeInterlaced.ttf', font_size)    # 'шрифт4'
    font_none = pygame.font.Font(None, font_size)   # 'любое число или текст в кавычках'
    if font == 'font1':    # Для того, чтобы выбирать шрифты
        show = font1.render(text, True, (color))
    elif font == 'font2':
        show = font2.render(text, True, (color))
    elif font == 'font3':
        show = font3.render(text, True, (color))
    elif font == 'font4':
        show = font4.render(text, True, (color))
    else:
        show = font_none.render(text, True, (color))
    display.blit(show, [x, y])    # Выводит текст на экран в нужную позицию на экране

а это ошибка
window.button_ghost("restart health", (39, 176, 11), (39, 176, 64), 'font4', 50, 855, 640, health.health_restart)
AttributeError: 'int' object has no attribute 'health_restart'
Сразу скажу я разделила игру на модули, а вот когда сделала жизни то хотела затестить, но вылезла вот такая ошибка ПОМОГИТЕ     ｡･ﾟﾟ*(>д<)*ﾟﾟ･｡

У вас ошибка
AttributeError: 'int' object has no attribute 'health_restart' в main.py. Из-за одинаковых имен импортированного модуля
health.py и переменной
health, смотрите:

import health

...

    health = 100

...

    window.button_ghost("restart health", (39, 176, 11), (39, 176, 64), 'font4', 50, 855, 640, health.health_restart)

В
health -- у вас число, а конкретно
health = 100, т.е. код у вас пытался сделать
100.health_restart. Нужно решить проблему с коллизией имен модуля и переменных.
Поэтому нужно исправить коллизии названия в main.py, например:

import pygame
import random
import show_text
import loading
import window
import health

pygame.init()

FPS = 60
FPSclock = pygame.time.Clock()

display_width = 1920
display_height = 1080
display = pygame.display.set_mode((display_width, display_height),
pygame.HWSURFACE|pygame.DOUBLEBUF|pygame.FULLSCREEN)

def run_game():
    game = True
    health_current = 100
    health_max = 100
    while game:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        display.fill(12, 16, 10)

        window.button_ghost_minus("- health", (39, 176, 11), (39, 176, 64), 'font4', 50, 855, 540, 1, 'health')
        window.button_ghost("restart health", (39, 176, 11), (39, 176, 64), 'font4', 50, 855, 640, health.health_restart)
        health.health_bar(health_current, health_max, (50, 50, 50), (50, 120, 30), 100, 100, 20)

        pygame.display.update()
        FPSclock.tick(FPS)

PS.
А насчет классов... Можно завести класс
Health, добавить ему свойства и методы.
Накидал простенький пример:

display = ...

class Health:
    def __init__(self, value: int = 100, max_value: int = 100):
        self.value = value
        self.max_value = max_value

    def restart(self):
        self.value = self.max_value

    def draw(self, color_max, color, x, y, height):
        pygame.draw.rect(display, color_max, (self.max_value + 10, height + 10, x, y))
        pygame.draw.rect(display, color, (self.value, height, x + 5, y + 5))

    def __repr__(self):
        return f'<Health value={self.value} max_value={self.max_value}>'

health = Health()
print(health)
# <Health value=100 max_value=100>

health.value -= 10
print(health)
# <Health value=90 max_value=100>

health.restart()
print(health)
# <Health value=100 max_value=100>

health = Health(value=50, max_value=150)
print(health)
# <Health value=50 max_value=150>


Как сохранить экземпляр класса в файл?

class MyClass:

    a = 1

A = MyClass()

Я хочу сохранить
A в какой-нибудь файл чтобы при загрузке он автоматически стал объектом. Как это сделать, и загрузить его потом из этого файла?

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

Пример:

import pickle

class MyClass:
    def __init__(self, param1, param2, *args):
        self.param1 = param1  # Какие-то переменные экземпляра класса
        self.param2 = param2
        self.args = args

    def __str__(self) -> str:  # Для наглядности print'а
        return "I am {}\nMy param1 is {}\nParam2 is {}\nargs is {}".format(
            self.__class__,
            self.param1,
            self.param2,
            self.args
        )

    def __getstate__(self) -> dict:  # Как мы будем "сохранять" класс
        state = {}
        state["param1"] = self.param1
        state["param2"] = self.param2
        state["args"] = self.args
        return state

    def __setstate__(self, state: dict):  # Как мы будем восстанавливать класс из байтов
        self.param1 = state["param1"]
        self.param2 = state["param2"]
        self.args = state["args"]

a = MyClass("val1", 42, "test", "yee")
print(a, end="\n========\n")  # Выведет информацию о классе
serialized = pickle.dumps(a)  # Сериализуем
print(serialized, end="\n========\n")  # Выведет какие-то байты
b = pickle.loads(serialized)  # Восстанавливаем экземпляр класса из байтов
print(b)  # Смотрим, что восстановилось

Для записи в файл:

with open("file.pkl", "wb") as fp:
    pickle.dump(a, fp)

Для восстановления класса из файла:

with open("file.pkl", "rb") as fp:
    a = pickle.load(fp)


Как сделать проверку на работу класса?
Делаю программу на Python 3.8.1 с помощью GUI Tkinter. Есть одно окно tk.Toplevel, которое должно открываться в одном единственном экземпляре, то есть таких окон не может быть запущено больше одного одновременно. Как сделать проверку на наличие одного открытого экземпляра этого окна при открытии следующего?

enSO:
<code>
import tkinter as tk
from tkinter import ttk

wind2 = None

def startwind1():
    #global wind2
    #wind2 = None

    wind1 = tk.Tk()
    wind1.title('Window 1')

    w1button1 = ttk.Button(wind1,text='Launch Window 2', command=startwind2)
    w1button1.pack()

    w1button2 = ttk.Button(wind1,text='Check if Window 2 exists',command=checkwind2)
    w1button2.pack()

    wind1.mainloop()

def startwind2():
    global wind2

    wind2 = tk.Toplevel()
    wind2.title('Window 2')

def checkwind2():
    if (wind2 is not None) and wind2.winfo_exists():
        print('Window 2 exists')
    else:
        print('Window 2 not exists')

startwind1()
</code>


Нужно оптимизировать небольшой код в Python
Я написал рабочий код на языке Python, но для его сдачи мне нужно его оптимизировать. Коротко про код: есть список, в котором лежат цифры, нужно найти суму этого списка и вывести в другой список, потом снова найти суму списка но без первого элемента. И так далее.
 Вот сам код:
<code>
def parts_sums(ls):
    a = []
    while ls != []:
        b = sum(ls)
        a.append(b)
        del ls[0]
    return a+[0]
</code>
Задача: оптимизация кода.

Необязательно считать сумму списка на каждой итерации.
Следующий элемент можно найти, вычитая из суммы предыдущий.
Пример:
<code>
def parts_sums(li):
    t = sum(li)

    result = []
    for x in li:
        result.append(t)
        t -= x

    return result + [0]
</code>


Сравнение трех словарей
есть три словаря

dict1={'key1':'5.00','key2':'84.00'}
dict2={'key3':'24.00','key4':'21.00'}
dict3={'key5':'100.00','key6':'50.00'}

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

converted_to_num = dict((k, float(v)) for k,v in dict1.items()) # Конвертируем значения в число

print(min(converted_to_num, key=converted_to_num.get)) # получаем минимальное значение

как сравнить сразу все три словаря ?
т.е чтобы на выходе было : key1

Можно объединить словари и найти минимальное значение:
<code>
dict1={'key1':'5.00','key2':'84.00'}
dict2={'key3':'24.00','key4':'21.00'}
dict3={'key5':'100.00','key6':'50.00'}

dict1.update(dict2)
dict1.update(dict3)
converted_to_num = dict((k, float(v)) for k,v in dict1.items())
print(min(converted_to_num, key=converted_to_num.get))
</code>


Как правильно указать путь к изображению в Django + HTML
Здравствуйте. Нужно указать путь для изображения в HTML при использовании Django.  Вроде бы звучит не сложно, на деле как я ни пытался, ничего не выходит. Мне нужно указать следующий путь к изображению -
"main_page/MCStore logo.png". Изображение хранится по пути
"media/main_page/MCStore logo.png". В итоге изображение не выводит, хотя путь прописан правильно. Пробовал ставить
"media/main_page/MCStore logo.png", тогда на главной странице сайта всё в порядке, работает, но на других пытается вывести по адресу
"news/media/main_page/MCStore logo.png". Первое слово в пути (в примере указано news) меняется в зависимости от url адреса страницы сайта. Вопрос в следующем: как мне указать путь, который не будет изменятся. Вариант с P:/... пробовал, не пашет. Есть предположение, что дело в settings.py. Вот мои настройки, надеюсь поможет в решении проблемы.
settings.py:

STATIC_DIR = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = [STATIC_DIR, ]
STATIC_URL = '/static/'
STATIC_ROOT = 'statics'

MEDIA_ROOT = 'media'
MEDIA_URL = '/media/'

Очень надеюсь на вашу помощь. Заранее всем спасибо за активность!

в settings.py
<code>
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
</code>


Аналог end = '\r' в input в python
В python, как известно у команды print() есть end = '\r'. Если она есть, то строка не начнётся с новой строки, а продолжится. Так вот.
Есть ли аналог такого же end = '\r'? То есть например:
    string = input(end = '\r')
Вообще, хочется чтобы он реагировал примерно так же, как и в print. Пример. Я напишу в коде к примеру:

string = input(end = '\r')

l = len(string)
print(string + " one two")

И введу:

...

И я хотел бы, чтобы в этом случае он бы мне вывел:

... one two

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

...

... one two

А так:

... one two

Сразу скажу - я пытался такое написать. Но код говорит, что нет end у input. Есть ли аналог end для input в python?

import sys

string = input()
sys.stdout.write("\033[F")
l = len(string)
print(string + " one two")


Как сделать музыку или звук на python [закрыт]

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

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

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

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

Как сделать музыку или звук на python?
И еще один вопрос, если вдруг можно написать то что будет весить меньше .mp3 или .py ?

Попробуй модули playsound, winsound, pyaudio.


Прошу помочь найти ошибку в типе данных str и int [закрыт]

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

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

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

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

<code>
print("Tere see on SkyNet programm")
print("Kui te tahate saata terminator T-1000 aastasse 1995, sisestage'Jah'")
print("Palun, ära proovige sisestada 'Ei', või midagi veel")

jah = ""
jah == "Jah" == "JAH" == "jah"
katsesid = 3

while jah != "Jah" and katsesid > 0:
    katsesid = katsesid - 1
    print("SkyNet palub sind, teil on jäänud" + katsesid + "veel")

    jah = input()

    if jah == "jah":
        print("Aitah, et aidasite meile apokalüpsuse tegemises")
    else:
        print("See saab negatiivselt teile effektida")
</code>

print("Tere see on SkyNet programm")
print("Kui te tahate saata terminator T-1000 aastasse 1995, sisestage'Jah'")
print("Palun, ära proovige sisestada 'Ei', või midagi veel")

jah = ""
jah == "Jah" == "JAH" == "jah"
katsesid = 3

while jah != "Jah" and katsesid > 0:
    katsesid = katsesid - 1
    print("SkyNet palub sind, teil on jäänud" + str(katsesid) + "veel")

    jah = input()

    if jah == "jah":
        print("Aitah, et aidasite meile apokalüpsuse tegemises")
    else:
        print("See saab negatiivselt teile effektida")


Как удалить объект класса?
Допустим, я создаю объект некого класса:
sania=Chelovek()
Как удалить этот объект?

Используя ключевое слово
del:

del sania


Предупреждение IDE в самодельном декораторе
Есть класс QtPy5, в нём есть методы. Перед тем как их выполнить нужно проверить загружен ли пользователь.
Декоратор вида:

def is_active_user(func):
    """декоратор для определения активен ли юзер"""
    def wrapper(self):
        if not self.USER_active:
            return self.statusbar.showMessage('Загрузи хоть одного пользователя', 2000)
        else:
            return func(self)
    return wrapper

PyCharm выдаёт предупреждение над
func(self):

This inspection highlights attempts to call objects which are not callable, like, for example, tuples.

Когда декорирую метод:

@is_active_user - подсвечивается:

This inspection reports discrepancies between declared parameters and actual arguments, as well as incorrect arguments (e.g. duplicate named arguments) and incorrect argument order. Decorators are analyzed, too.

и вроде всё работает, но что-то я не понимаю.

Попробуйте так:
<code>
import sys
import threading

import functools                                                 # +++

from PyQt5.QtCore import QObject, QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication

def is_active_user(func):
    """декоратор для определения активен ли юзер"""

    print(f'\nfunc   : name={func.__name__}, \n\t module={func.__module__}, \n\t doc={func.__doc__}, \n\t dict={func.__dict__}')

    @functools.wraps(func)
    def wrapper(self):
        if not self.USER_active:
            return print('Загрузи хоть одного пользователя', 2000)
        else:
            print('++++++++++')
            return func(self)

    print(f'\nwrapper: name={wrapper.__name__}, \n\t module={wrapper.__module__}, \n\t doc={wrapper.__doc__}, \n\t dict={wrapper.__dict__}')
    return wrapper

class Worker(QObject):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.USER_active = True                   # True or False

    @is_active_user
    def some_function(self):
        print(f'some_function is running on thread -> {threading.current_thread().name}')

class Main(QObject):
    signal_for_function = pyqtSignal()

    def __init__(self):
        super().__init__()

        print(f'\nThe main thread is -> {threading.current_thread().name}')

        self.thread = QThread(self)
        self.worker = Worker()
        self.worker.moveToThread(self.thread)
        self.thread.start()

        self.signal_for_function.connect(self.worker.some_function)

app = QApplication(sys.argv)
m = Main()
m.signal_for_function.emit()

QThread.msleep(1000)
m.thread.quit()
m.thread.wait()
</code>


Почему не происходит спавн объектов?

import pygame

pygame.init()

win = pygame.display.set_mode((500, 500))

pygame.display.set_caption("ДЕГРАДАЦИЯ")

x = 50
y = 400
weight = 40
height = 60
speed = 5

isJump = False
jumpCount = 10

lastMove = "right"

bullets = []

class snaryad():
    def __init__(self, x, y, radius, color, facing):
        self.x = x
        self.y = y
        self.radius = radius
        self.color = color
        self.facing = facing
        self.vel = 8 * facing

    def draw(self, win):
        pygame.draw.circle(win, self.color, (self.x, self.y), self.radius)

def drawWindow():
    for bullet in bullets:
        bullet.draw(win)

run = True
while run:
    pygame.time.delay(100)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    for bullet in bullets:
        if bullet.x < 500:
            if bullet.x > 0:
                bullet.x += bullet.vel
            else:
                bullets.pop(bullets.index(bullet))
        else:
            bullets.pop(bullets.index(bullet))

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and x > 5:
        x -= speed
        lastMove = "left"
    if keys[pygame.K_a] and x > 5:
        x -= speed
        lastMove = "left"
    if keys[pygame.K_RIGHT] and x < 500 - weight - 5:
        x += speed
        lastMove = "right"
    if keys[pygame.K_d] and x < 500 - weight - 5:
        x += speed
        lastMove = "right"
    if not isJump:
        if keys[pygame.K_SPACE]:
            isJump = True
    else:
        if jumpCount >= -10:
            if jumpCount < 0:
                y += (jumpCount ** 2) / 2
            else:
                y -= (jumpCount ** 2) / 2
            jumpCount -= 1
        else:
            isJump = False
            jumpCount = 10
    if keys[pygame.K_f]:
        if lastMove == "right":
            facing = 1
        else:
            facing = -1
        if len(bullets) < 3:
            bullets.append(snaryad(round(x + weight / 2), round(y + height / 2), 5, (255, 0, 0), facing))

    win.fill((0, 0, 0))
    pygame.draw.rect(win, (0, 0, 255), (x, y, weight, height))
    pygame.display.update()

pygame.quit()

Я хочу добавить в игру стрельбу при нажатии на кнопку F

if keys [pygame.K_f]:
        if lastMove == "right":
            facing = 1
        else:
            facing = -1
        if len(bullets) < 3:
            bullets.append(snaryad(round(x + weight / 2), round(y + height / 2), 5, (255, 0, 0), facing))

но при нажатии f почему-то ничего не происходит, помогите исправить код

У вас не отрисовываются пули потому что вы их не рисуете, посмотрите в метод

drawWindow().
Решение простое:

win.fill((0, 0, 0))
pygame.draw.rect(win, (0, 0, 255), (x, y, weight, height))
drawWindow()
pygame.display.update()


Как добавлять в список элемент из DataFrame при условии, что сумма элементов из соседнего столбца больше определенного значения?
Есть DataFrame, например:

    geo distance
0   0.000001    0.11132
1   0.000002    0.11132
2   0.000003    0.11132
3   0.000004    0.11132
4   0.000005    0.11132
5   0.000006    0.11132
6   0.000007    0.11132
7   0.000008    0.11132
8   0.000009    0.11132
9   0.000010    0.11132
10  0.000011    0.11132
11  0.000012    0.11132
12  0.000013    0.11132
13  0.000014    0.11132
14  0.000015    0.11132
15  0.000016    0.11132
16  0.000017    0.11132
17  0.000018    0.11132
18  0.000019    0.11132
19  0.000020    0.11132

Мне надо создать алгоритм, который будет проходится по столбцу
distance и считать сумму элементов.
Как только сумма превышает значение 1, мы записываем в новый список значение в столбце
geo, на котором отчет начинался и на котором было это превышение, а так же сумму элементов. Далее, алгоритм повторяется (считаем сумму с элемента следующего после элемента, на котором было превышение).
Т. е. результат должен быть таким:

[
[0.000001, 0.000009, 1.00188],
[0.0000010, 0.000018, 1.00188],
....

]

Как можно это сделать?


Можно ли переопределить сериализатор JSONEncoder для стандартных типов?
Можно ли как-нибудь переопределить поведение JSONEncoder для стандартных типов? Например, хочу, чтобы словарь сериализовывался не через
{}, а через
<>, чтобы строки не были обёрнуты в
" и т.д. Причём, как-то особенно обрабатывать необходимо только некоторые из стандартных типов

Например, код:

import json

print(json.dumps({"a": "5", "b": {"c": "d", "e": "f", "g": ["1", "2", 3]}}, indent=4))

Вывод:

{
    "a": "5",
    "b": {
        "c": "d",
        "e": "f",
        "g": [
            "1",
            "2",
            3
        ]
    }
}

Я же хочу получить:

<
    a: 5,
    b: <
        c: d,
        e: f,
        g: [
            1,
            2,
            3
        ]
    >
>

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

Находил, как можно добавить сериализацию нестандартных типов, но как поменять поведение именно для стандартных типов (
dict,
list,
str,
int,
float,
True,
False,
None) не нашёл.

Разобрался. Переопределять надо было методы
encode и
iterencode класса
JSONEncoder.

Мой, очень костыльный вариант:

import json

class CustomEncoder(json.JSONEncoder):  # Определяем собственный кодировщик
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.current_level = 0  # Текущий уровень отступа

    def encode(self, o):  # Как я понял, правило кодирования типов, кроме list и dict
        if isinstance(o, str):  # Наше правило кодирования строки
            return o  # Не оборачиваем в "
        else:  # Иначе кодируем правилом по умолчанию
            return super().encode(o)

    def iterencode(self, o, _one_shot=False):  # Правило кодирования list и dict
        if isinstance(o, dict):  # Наше правило кодирования словаря
            yield "<\n"  # Начинаем сериализацию словаря с <
            self.current_level += 1  # Увеличиваем текущий уровень отступа
            for key, val in o.items():
                yield "{indent}{key}{key_separator}{value}{item_separator}\n".format(
                    indent=" " * self.indent * self.current_level,  # Вычисляем отступ
                    key=self.encode(key),  # Кодируем ключ словаря по нашему правилу
                    key_separator=self.key_separator,
                    value=self.encode(val),  # Кодируем значение по ключу по нашему правилу
                    item_separator=self.item_separator
                )
            self.current_level -= 1
            yield "{indent}>".format(  # Делаем отступ и
                indent=" " * self.indent * self.current_level. # Закрываем словарь символом >
            )
        else:
            yield from super().iterencode(o)

mydict = {
    "a": "5",
    "b": {
        "c": "d",
        "e": "f",
        "g": {
            "1": "one",
            "2": "two",
        }
    }
}
print(json.dumps(
    obj=mydict,  # Что сериализуем
    cls=CustomEncoder,  # Кастомный кодировщик
    indent=4,  # Количество пробелов в отступе
))

Вывод:

<
    a: 5,
    b: <
        c: d,
        e: f,
        g: <
            1: one,
            2: two,
        >,
    >,
>

Для моей задачи работает очень даже хорошо, но будет беда с отступами, если в сериализуемом объекте где-нибудь будет список.


Django ссылаться на одно view, независимо от наличия слэша
В Django приходят
callback на один урл, то со слэшом, то без cлэша.

./sub_callback/ и
./sub_callback
Можно ли как-то сделать, чтобы на слэш django не обращало внимание и выполняло одно
view, кроме случая когда надо писать 2 записи в
urls.py

APPEND_SLASH=TRUE -  отключал, но так работает только один урл.

Вы можете использовать регулярные выражения, чтобы записывать путь один раз. Для этого используется
re_path вместо
path

from django.urls import path, re_path
from . import views

urlpatterns = [
  re_path(r'^sub_callback/?$', views.view_name),
]


Как из одного шаблона jinja передать значения другому (Django, Python)
Есть два шаблона (home и card), через функцию views.py я передаю модель главному шаблону home. В home встроен цикл, который создает card. Как передать значения в card?
То есть я хочу передавать в home.html только модель, чтобы home.html создавало карточку и рисовала card.html. Проблема в том что я не могу из home.html задать параметры jinja для card.html

{% extends 'homepage.html' %}
{% block content %}
    <div class="container">
        <div class="row">
        {% for program in programs %}
            <div class="col">
                {% include 'card.html' %}
            </div>
        {% endfor %}
        </div>
    </div>
{% endblock %}

{% block content %}
<div class="card" style="width: 18rem;">
  <img src = '{{ image }}' class="card-img-top" alt='{{ image_text }}'>
  <div class="card-body">
    <h5 class="card-title">{{ card_title }}</h5>
    <p class="card-text">{{ card_text }}</p>
    <a href = '{{ card_btn_link }}' class="btn btn-primary">{{ card_btn_text }}</a>
  </div>
</div>
{% endblock %}

У вас в
card используются переменные (например,
{{ image }}), которые не объявлены в
home.
Попробуйте перед включением шаблона объявлять эти переменные. Не знаю, как у вас реализована модель
program, но объявление переменных будет выглядеть примерно так:

{% extends 'homepage.html' %}
{% block content %}
    <div class="container">
        <div class="row">
        {% for program in programs %}
            <div class="col">
                {% with image = program.image %}
                {% with image_text = program.image_text %}
                {% with card_btn_link = program.card_btn_link %}
                {% with card_btn_text = program.card_btn_text %}

                {% include 'card.html' %}

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

Подробнее о переменных в jinja2 можно почитать тут


почему возвращает не самое минимальное?
<code>
dict1 = {'ссылка1': '4.50', 'ссылка2': '6.00', 'ссылка3': '19.60', 'ссылка4': '17.40'}

print(min(dict1, key=dict1.get))
</code>
выводит: ссылка4
почему так, если минимальное значение у ключа 'ссылка1'
и как это исправить?

Сортировка в данном случае проходит верно, так как значения в словаре являются строками, а не числами и всё сортируется по алфавиту..
Ну а чтобы получить реально минимальное значение, сперва нужно все значения в словаре конвертировать в число:
<code>
d = {
    'ссылка1': '4.50',
    'ссылка2': '6.00',
    'ссылка3': '19.60',
    'ссылка4': '17.40'
}

# Конвертируем значения в число
converted_to_num = dict((k, float(v)) for k, v in d.items())

# получаем минимальное значение
print(min(converted_to_num, key=converted_to_num.get))
</code>


field 'id' expected a number but got 'slug'
Ошибка в реализации слагирования, в чём - не понимаю
TRACEBACK

Traceback (most recent call last):
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/fields/__init__.py", line 1772, in get_prep_value
    return int(value)
ValueError: invalid literal for int() with base 10: 'bytovaya-tehnika'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/views/generic/base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/rest_framework/views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/rest_framework/views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/rest_framework/views.py", line 476, in raise_uncaught_exception
    raise exc
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/rest_framework/views.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/rest_framework/generics.py", line 199, in get
    return self.list(request, *args, **kwargs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/rest_framework/mixins.py", line 38, in list
    queryset = self.filter_queryset(self.get_queryset())
  File "/home/artyomlazovikov/internet_shop/e_shop/products/views.py", line 37, in get_queryset
    queryset = Product.objects.filter(category=category)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/query.py", line 904, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/query.py", line 923, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/sql/query.py", line 1350, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/sql/query.py", line 1381, in _add_q
    check_filterable=check_filterable,
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/sql/query.py", line 1311, in build_filter
    condition = self.build_lookup(lookups, col, value)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/sql/query.py", line 1165, in build_lookup
    lookup = lookup_class(lhs, rhs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/lookups.py", line 22, in __init__
    self.rhs = self.get_prep_lookup()
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/fields/related_lookups.py", line 115, in get_prep_lookup
    self.rhs = target_field.get_prep_value(self.rhs)
  File "/home/artyomlazovikov/internet_shop/.venv/lib/python3.7/site-packages/django/db/models/fields/__init__.py", line 1776, in get_prep_value
    ) from e
ValueError: Field 'id' expected a number but got 'bytovaya-tehnika'.

Модели Product, Category. Отношение M2M.

class Category(models.Model):
    name = models.CharField(max_length=255)
    slug = models.SlugField(max_length=255, db_index=True)
    parental_category = models.ManyToManyField('self',
                                                blank=True,
                                                verbose_name='Категория-родитель',
                                                )

    def __str__(self):
        return self.name

class Product(models.Model):
    name = models.CharField(max_length=150, db_index=True,
                            verbose_name='Название')
    slug = models.SlugField(max_length=150, db_index=True)
    category = models.ForeignKey(Category,
                                 related_name='category',
                                 null=True,
                                 blank=True,
                                 verbose_name='Категория',
                                 on_delete=models.SET_NULL,
                                 )

    def __str__(self):
        return self.name

Serializers

class ProductSerializer(serializers.ModelSerializer):
    category = CategorySerializer(many=True, read_only=True)

    class Meta:
        model = Product
        fields = ['id','name','slug',
                  'category']

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ['name', 'parental_category']

views

class ProductList(ListAPIView):
    serializer_class = ProductSerializer

    def get_queryset(self):
        queryset = Product.objects.all()
        category = self.kwargs['category_slug']
        if category is not None:
            queryset = Product.objects.filter(category=category)
        return queryset

Вы берёте значение
slug из реквеста и пытаетесь фильтровать query set по полю Foreign key с этим значением, а в Foreign key связь через id. Так что либо перед фильтрованием модели Product нужно найти id нужного объекта Category, либо ничего не менять, но указать, чтобы фильтр искал по полю
slug:

       if category is not None:
            # обратите внимание, там двойное подчёркивание
            queryset = Product.objects.filter(category__slug=category)


Запуск файла на хостинге
На хостинге есть файл, написанный на питоне try.py. Как можно запустить его через консоль, чтобы можно было её закрыть, его выполнение продолжалось, а потом можно было подключиться к его выполнению (к примеру файл каждую минуту выводит текст на экран, а мне необходимо его увидеть)?

systemd
Для запуска на systemd создайте файл /etc/systemd/system/try.service

[Unit]
Description=Try Server

[Service]
Type=simple
ExecStart=/usr/bin/python3 /opt/try/try.py
WorkingDirectory=/opt/try/

[Install]
WantedBy=multi-user.target

Старт

systemctl start try.service

Автозапуск

systemctl enable try.service

Посмотреть журнал (вывод)

journalctl -u try.service -e

Для работы в окружении пользователя:

loginctl enable-linger

В
~/.config/systemd/user/try.service пишем

[Unit]
Description=Try User Server

[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/user/try/try.py
WorkingDirectory=/home/user/try/

[Install]
WantedBy=basic.target

Старт

systemctl start --user try.service

Автостарт

systemctl enable --user try.service

screen
Для интерактивных скриптов, которые требуют вмешательства пользователя лучше воспользоваться screen
Запуск

screen -d -m -A -S try_screen /opt/try/try.py

Подключиться - посмотреть, ответить на вопросы

screen -r try_screen


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

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

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

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

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

Мне нужно написать код который будет прибовлять числа Пример:я вписываю любое число на пример 5 - 1+2+3+4+5 и ответ, и я в ступоре , я новичек еще, пока не разобрался.


Программа не может выйти из цикла
Есть программа:
<code>
import pandas as pd
from datetime import time

flag = True
while flag:

    # информация  поездах
    a = [{'train_code': '887B', 'station': 'Lipki', 'time_arrive': time(12, 00)},
         {'train_code': '411C', 'station': 'Kyiv   ', 'time_arrive': time(10, 00)},
         {'train_code': '743L', 'station': 'Lipki', 'time_arrive': time(12, 00)},
         {'train_code': '113F', 'station': 'Rivne', 'time_arrive': time(11, 00)}]

    # вводим диапазон времени приходящих поездов

    start_time = time(hour=int(input("Enter start hours: ")), minute=int(input("Enter start minutes: ")))
    end_time = time(hour=int(input("Enter last hours: ")), minute=int(input("Enter last minutes: ")))
    s = sorted(a, key=lambda x: x['time_arrive'])

    # проверяем прибытие каких поездов совпадает с заданым нами диапазоном

    for train in s:
        if start_time <= train.get('time_arrive') <= end_time:
            print(train)
            df = pd.DataFrame(a)
            res = df.groupby(["time_arrive", "station"]).filter(lambda x: len(x) > 1)

    # если среди маршрутов есть такие, что приходят на одну станцию в одно и то же время, выводим ошибку и просим ввести новые данные

    for i in res["time_arrive"].to_list():
        if start_time <= i <= end_time:
            count = len(res)

            if count >= 2:
                print(f'There are {count} wrong destinations')
                print('Accident error. Choose the other time range please.')

                flag = True

            # если "ошибочных маршрутов" нет, прекращаем работу программы

            else:
                flag = False
                break

</code>
Проблема заключается в том, что при отсутствии "ошибочных маршрутов" программа все-равно запрашивает повторный ввод. Подскажите пожалуйста где я мог упустить что-то. Заранее спасибо.

Вот, нашел нужное решение:
<code>
import pandas as pd
from datetime import time

flag = True
while flag:

    # информация o поездах
    a = [{'train_code': '887B', 'station': 'Lipki', 'time_arrive': time(12, 00)},
         {'train_code': '411C', 'station': 'Kyiv   ', 'time_arrive': time(10, 00)},
         {'train_code': '743L', 'station': 'Lipki', 'time_arrive': time(12, 00)},
         {'train_code': '113F', 'station': 'Rivne', 'time_arrive': time(11, 00)}]

    # вводим диапазон времени приходящих поездов

    start_time = time(hour=int(input("Enter start hours: ")), minute=int(input("Enter start minutes: ")))
    end_time = time(hour=int(input("Enter last hours: ")), minute=int(input("Enter last minutes: ")))
    s = sorted(a, key=lambda x: x['time_arrive'])

    # проверяем прибытие каких поездов совпадает с заданым нами диапазоном

    for train in s:
        if start_time <= train.get('time_arrive') <= end_time:
            print(train)
            df = pd.DataFrame(a)
            res = df.groupby(["time_arrive", "station"]).filter(lambda x: len(x) > 1)
            count = len(res)

    # если среди маршрутов есть такие, что приходят на одну станцию в одно и то же время, выводим ошибку и просим ввести новые данные

    for i in res["time_arrive"].to_list():

        if (start_time <= i <= end_time) and (count >= 2):
                print(f'There are {count} wrong destinations')
                print('Accident error. Choose the other time range please.')
                break

                flag = False

            # если "ошибочных маршрутов" нет, прекращаем работу программы

        else:
                flag = False
                break
</code>
Программа не могла выйти из цикла, потому что res["time_arrive"].to_list() все время возвращало 2 аргумента, что в свою очередь триггерило соответствующее условие.


Замена параметров в файле из файла
Всем привет. Есть файл param.txt вида:

PARAM1=value1
PARAM2=value2

И есть файл example.txt в котором нужно заменить параметры из файла param.txt
Файл вот такого вида:

 Some text to example. PARAM1, PARAM2

И соответственно в нём нужно заменить PARAM1 на value1 и PARAM2 на value2 соответственно.
Как это можно сделать средствами bash или Python?

Попробуйте так на Python:

import re #используем регулярное выражение

f1 = open("Путь к файлу 1.txt", "r") #Поменяйте на путь к файлу 1
f2 = open("Путь к файлу 2.txt", "r") #Поменяйте на путь к файлу 2
rf1 = f1.read()
rf2 = f2.read()
f1.close()
f2.close()
regular1 = re.findall(r'PARAM1=(\S+)', rf1)[0] #PARAM1 замените на ваш параметр1
regular2 = re.findall(r'PARAM2=(\S+)', rf1)[0] #PARAM2 замените на ваш параметр2
new_text = rf2.replace('PARAM1', regular1).replace('PARAM2', regular2) #заменить PARAM1, PARAM2 на ваши параметры1,2
f2 = open("Путь к файлу 2.txt", "w") #Поменяйте на путь к файлу 2
f2.write(new_text)
f2.close()

Данный код предполагает, что в файле 1 после
value1 и после
value2 есть какой-нибудь знак табуляции. Это может быть перенос строки(т.е. PARAM1=value1 на отдельной строке), пробел, и т.д., что может говорить о конце данного value.


Конвертация .XLSX в .XLS
У меня скрипт для обработки XLS, но некоторые прайсы приходят в XLSX. Из них нужны только строки и числа, никаких формул не нужно. Попробовал пару решений - вроде бы переводит в файл с типом .xls, но программа на него ругается как на .xlsx.
Вот код, сделано как тут:

$ pip install pyexcel-xlsx

import pyexcel as p

for name in os.listdir(".\\prices"):
    if name.endswith('.xlsx'):
        p.save_book_as(file_name=".\\prices\\"+name,
               library='pyexcel-xlsx',  # <--- note 1
               skip_hidden_row_and_column=True,  # <--- note 2
               dest_file_name=".\\prices\\"+ (name.replace(".xlsx",".xls")))
        os.remove(".\\prices\\"+name)

Воспользуйтесь модулем Pandas:
<code>
import pandas as pd   # pip install pandas

filename = "/path/to/file.xlsx"
pd.read_excel(filename).to_excel(filename[:-1])
</code>


with open('lot_lang_distance.csv', 'w') as file:
    file.write('\n'.join(', '.join(str(j) for j in i) for i in s))


Нужно от имени пользователя автоматический отправлять сообщения в определенный промежуток времени
Вопрос: Есть пользователь в Telegram. Не бот! Нужно от имени пользователя автоматический отправлять сообщения в определенный промежуток времени.

Какое API для этого использовать и возможно ли это вообще? Telegram BOT API не подходит.

Написал такого бота который в принципе выполняет то что я прошу, но оказывается мне нужно от имени пользователя а не от имени бота.
<code>
import time
import telebot

bot = telebot.TeleBot('|TOKEN|')

@bot.message_handler(content_types=['text'])
def send_text(message):
    if message.text == '/SOME TEXT/':
        while True:
            time.sleep(60)
            bot.send_message(message.chat.id, '/SOME TEXT/')

bot.polling()
</code>
Важно: я не прошу сделать за меня. Опишите пожалуйста что можно сделать, что прочитать дабы решить это.

Нашел ответ. Этот код выполняет то что я прошу

@danilshik подсказал что можно использовать библиотеку Telethon
<code>
from telethon import TelegramClient
import time
# Use your own values from my.telegram.org
api_id = ВАШ ID
api_hash = 'ВАШ ХЭШ'

# The first parameter is the .session file name (absolute paths allowed)
with TelegramClient('anon', api_id, api_hash) as client:
    client.loop.run_until_complete(client.send_message('me', 'Hello, myself!'))

async def main():
    while True:
        await client.send_message(ID группы, '/Любой текст/')
        await client.send_message(ID группы, '/Любой текст')
        time.sleep(60)

with client:
    client.loop.run_until_complete(main())
</code>


Python Как получить текст между разделителями
Скажем у меня есть текст:
<code>
*Text_one # не должен вывестись

Separator:

Text_two # хочу получить

Separator:

Text_three #хочу получить

Separator:*
</code>
Я хочу получить текст только между разделителями. Как это можно реализовать?

Можно по простому:

t = """Text_oneSeparatorText_twoSeparatorText_threeSeparator"""
tt = t.split("Separator")[1:-1] #вместо Separator вставить свой разделитель
print(tt)

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

import re
t = """Text_oneSeparatorText_twoSeparatorText_threeSeparator"""
rr = re.findall(r'(?s)(?<=Separator).*?(?=Separator)', t) #вместо Separator вставить свой разделитель
print(rr)


Удаление строк по срезу Pandas
Как удалить строки из датафрейма по срезу? Работаю с ексель файлом большим. Первый столбец и первые 4 строки пустые, хочу их удалить через pandas(хотя можно на VBA или xlwings).
Интуитивно хочу сделать так:
<code>
del df[:3]
</code>
Вопрос по сути в том, как обращаться к таблице не только по названиям столбцов и индексам(ключам\уникальным значениям), а по порядковым номерам. Думал проиндексировать все от 0 до конца, и удалить просто по индексу(но я не знаю как проиндексировать от 0 до последней строки)=))

Первый столбец и первые 4 строки пустые, хочу их удалить через pandas

воспользуйтесь df.iloc[...]:

df = df.iloc[4:, 1:]

еще лучше вообще не читать ненужные строки и столбцы:

df = pd.read_excel(filename, skiprows=4, usecols="B:ZZZ")

UPDATE:
Пример использования:

In [50]: pd.read_excel(fn)
Out[50]:
   Unnamed: 0  Unnamed: 1  Unnamed: 2  Unnamed: 3
0         NaN         NaN         NaN         NaN
1         NaN         NaN         NaN         NaN
2         NaN         NaN         NaN         NaN
3         0.0         1.0         2.0         3.0
4         0.0         4.0         5.0         6.0

In [51]: pd.read_excel(fn, skiprows=4, usecols="B:ZZZ")
Out[51]:
   1  2  3
0  4  5  6


Выполнение функции по расписанию в Flask
Веб-приложение не плохо разрослось, и для сокращения обращений к базе хочу запилить кэш некоторых таблиц и время от времени вызывать функцию, которая будет этот кэш обновлять, однако есть одна маленькая неприятность: я не знаю как в приложении Flask вызывать функцию по расписанию, чтобы она не была привязана к конкретному обращению от клиента.
Вот как например в данном коде вызывать функцию cache каждые 20 секунд? Объясните пожалуйста подробно. Заранее благодарю
<code>
from flask import Flask

app = Flask(__name__)

def cache():
    somecode()

@app.route('/index.html')
def root():
     return 'page'

if __name__ == '__main__':
    app.run(debug=True)
</code>

Создать отдельный поток, в него поместить функцию с циклом.
Примерно так:
<code>
from threading import Thread
import time
from flask import Flask

app = Flask(__name__)

def cache():
    while True:
        somecode()
        time.sleep(20)

thread = Thread(target=cache)
thread.start()

@app.route('/index.html')
def root():
     return 'page'

if __name__ == '__main__':
    app.run(debug=True)
</code>


Как исправить алгоритм ML k-ближайших соседей (kNN)?
Есть код k-ближайших соседей (kNN) и набор данных, разбитый на два набора (для обучения (X, Y) и проверки (x_test, y_test)). А также условие
y_knn_filt = np.max(knn.predict_proba(x_test), axis=1) == 1, для прогнозирования меток классов только для тех выборок из x_test, у которых два ближайших соседа
n_neighbors=2 имеют одинаковые метки.

from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import cross_val_score

knn = KNeighborsClassifier(n_neighbors=2, n_jobs=-1, weights='distance').fit(X, Y)
y_knn = knn.predict(x_test)
print('все предсказания', y_knn)

y_knn_filt = np.max(knn.predict_proba(x_test), axis=1) == 1
print('фильтр уверенных предсказаний', y_knn_filt)
print('только уверенные предсказания', np.array(y_knn)[y_knn_filt])
AA = accuracy_score(a[y_test], y_knn)
print('score по всем предсказаниям', AA)
AA_filt = accuracy_score(np.array(y_test)[y_knn_filt], np.array(y_knn)[y_knn_filt])
print('score по уверенным предсказаниям', AA_filt)

Либо добавлял вот такое условие для определения одинаковости меток у ближайших соседей:

from sklearn.neighbors import NearestNeighbors
neigh = NearestNeighbors(n_neighbors=2).fit(X)
AA = neigh.kneighbors(x_test)
print(AA)
for i in AA[1]:
   if np.unique(Y[i]).size == 1:
       print('da', Y[i])
   else:
       print('net')

Проблема, не могу эти условия (условия по прогнозированию меток только для тех выборок, у которых ближайшие соседи имею одинаковые метки) переписать для kNN с перекрестной проверкой
"Все кроме одного" -  from sklearn.model_selection import LeaveOneOut

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import LeaveOneOut

knn = KNeighborsClassifier(n_neighbors=2, n_jobs=-1, weights='distance').fit(X, Y)
scores = cross_val_score(knn, X, Y, cv=LeaveOneOut())
print(scores.mean())

Кто-нибудь знает как это можно реализовать?

LeaveOneOut просто предоставляет вам последовательность
train/test наборов, вы можете итерироваться по ним, делать
fit,
predict и вычислять
score внутри цикла по этим наборам:

from sklearn.model_selection import LeaveOneOut
score_list = []
loo = LeaveOneOut()
skipped = 0
for train_index, test_index in loo.split(X):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    knn.fit(X_train, y_train)
    y_knn = knn.predict(X_test)
    y_knn_filt = np.max(knn.predict_proba(X_test), axis=1) == 1
    if not any(y_knn_filt):
      skipped += 1
      continue
    score = accuracy_score(np.array(y_test)[y_knn_filt], np.array(y_knn)[y_knn_filt])
    score_list.append(score)
print(np.mean(score_list))
print('пропущено', skipped, 'неуверенных сэмплов из', X.shape[0])

Постарайтесь на будущее использовать в коде
X большое, потому что это матрица, и
y маленькое, потому что это вектор. Так принято. :)
UPDATE: Добавил в ответ проверку, что нашлось хотя бы одно "уверенное" предсказание. С учётом того, что LeaveOneOut выдаёт по всему одному тестовому сэмплу, вероятность того, что этот сэмпл окажется неуверенным предсказанием и score придётся считать от пустого множества, очень велико и такие случаи надо пропускать.


Регулярные выражения, фунция string.ascii_letters
Как сделать так, чтобы функция string.ascii_letters не трогала пробелы

import string
s = '321eqweds***! .1dewq'
result = ''.join(c for c in s if c in string.ascii_letters)
print(result)

Выведет на экран:
eqwedsdewq
А нужно что бы :
eqweds dewq

Регулярка:

[^a-z ] поиск символов, что не относятся к диапазону от
a до
z и к пробелу (
)

Пример:

import re

text = '321eqweds***! .1dewq'

new_text = re.sub('[^a-z ]', '', text)
print(new_text)
# eqweds dewq


Циклы в python (анализ данных)
Всем добрый день, у меня есть такой код (я горе програмист, но я стараюсь)

import pandas as pd
from collections import Counter

dataset_path = r"C:\Users\admin\Desktop\Robotu\EURUSD_zagrusit.csv"
df = pd.read_csv(dataset_path)

# Убираем ненужные данные
df = df.drop(["TIME"], axis=1)
df = df.drop(["HIGH"], axis=1)
df = df.drop(["LOW"], axis=1)
# print(df.head(5))

# Записываем OPEN and CLOSE в массивы
Open = []
Close = []

for i in df["OPEN"]:
    Open.append(i)

for i in df["CLOSE"]:
    Close.append(i)

# Промаркируем бары (Бычий - 2, Медвежий - (-1), Нулевой - 0)
Prom_massiv = [(Close - Open) for Close, Open in zip(Close, Open)]
Markirovka_barov = []

for i in Prom_massiv:
    if i > 0:
        Markirovka_barov.append(2)
    elif i < 0:
        Markirovka_barov.append(-1)
    else:
        Markirovka_barov.append(0)

# print("Массив с индексами баров (какой именно бар)", Markirovka_barov)
# print(Counter(Markirovka_barov))

# Получим список индексов на которых произошел разворот бара
Indeksu_razvorot = []

Prom_sres_1 = Markirovka_barov[:-1]
Prom_sres_2 = Markirovka_barov[1:]

PM_2 = [abs(Prom_sres_2 - Prom_sres_1) for Prom_sres_2, Prom_sres_1 in zip(Prom_sres_2, Prom_sres_1)]

for i in range(len(PM_2)):
    if PM_2[i] != 0:
        Indeksu_razvorot.append(i+1)

# print("Получили индексы смены свечей", Indeksu_razvorot)
# print(len(Indeksu_razvorot))

# Получим индексы свечей разворота, которые точно либо медвежии либо бычии
PM_3 = []                                     # - Дельта между ценами, для проверки реально ли это поглощение
for i in Indeksu_razvorot:
    PM_3.append(Close[i] - Open[i-1])

PM_4 = []                                     # - Маркировки свечей, которые поменялись
for i in Indeksu_razvorot:
    PM_4.append(Markirovka_barov[i])

print("Дельта между ценами, для проверки реально ли это поглощение", PM_3)
print("Маркировки свечей, которые поменялись", PM_4)
# print(len(PM_3), len(PM_4))

Itog_indeksu_poglos = []                               # - Итоговые индексы свечей, которые точно, либо мед-погл, б-п
for i in range(len(PM_4)):
    if PM_4[i] < 0 and PM_3[i] < 0:
        Itog_indeksu_poglos.append(Indeksu_razvorot[i])
    elif PM_4[i] > 0 and PM_3[i] > 0:
        Itog_indeksu_poglos.append(Indeksu_razvorot[i])
    else:
        break

print("Итоговые индексы свечей, которые точно, либо мед-погл либо быч-поглощ", Itog_indeksu_poglos)

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

tog_indeksu_poglos = []                               # - Итоговые индексы свечей, которые точно, либо мед-погл, б-п
for i in range(len(PM_4)):
    if PM_4[i] < 0 and PM_3[i] < 0:
        Itog_indeksu_poglos.append(Indeksu_razvorot[i])
    elif PM_4[i] > 0 and PM_3[i] > 0:
        Itog_indeksu_poglos.append(Indeksu_razvorot[i])
    else:
        break

print("Итоговые индексы свечей, которые точно, либо мед-погл либо быч-поглощ", Itog_indeksu_poglos)

выдает просто пустой массив

Итоговые индексы свечей, которые точно, либо мед-погл либо быч-поглощ []

Буду очень благодарен, если подскажите, как в начале где дропаю колонки в ДФ, как дропнуть в одну строчку, а не как у меня
Заранее благодарен

Во-первых:

df = df.drop(["TIME"], axis=1)
df = df.drop(["HIGH"], axis=1)
df = df.drop(["LOW"], axis=1)

можно заменить на:

df = df.drop(["TIME", "HIGH", "LOW"], axis=1)

Во-вторых, в последнем цикле сразу срабатывает последнее условие и происходит выход из цикла по break. Отсюда и пустой список. Уберите последнее условие, чтобы было как то так:

for i in range(len(PM_4)):
    if PM_4[i] < 0 and PM_3[i] < 0:
        Itog_indeksu_poglos.append(Indeksu_razvorot[i])
    elif PM_4[i] > 0 and PM_3[i] > 0:
        Itog_indeksu_poglos.append(Indeksu_razvorot[i])


Ошибка: Trailling coma not allowed without surrounding parenthness
В программе QtDesigner создал файл, перекинул из формата
.ui в
.py , зашел в Visual Studio Code, и ничего не работает из за ошибки при
from PySide2.QtGui import QFontDatabase выдает ошибку
Trailling coma not allowed without surrounding parenthness

from PySide2 import QtCore, QtGui
import sys
from ui import Ui_Form
from PySide2.QtCore import QCoreApplication, QMetaObject, QObject, QPoint, QSize, QUrl, Qt
from PySide2.QtGui import QBrush, QColor, QConicalGradient, QCursor, QFont
from PySide2.QtGui import QFontDatabase, QIcon, QLinearGradient, QPalette, QPainter, QPixmap,
from PySide2.QtGui import QRadialGradient
from PySide2.QtWidgets import *

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(370, 426)
        MainWindow.setStyleSheet(u"QPushButton{\n"
"height: 70px;\n"
"widght: 70px;\n"
"font-size: 14 px;\n"
"font-weight: bold;\n"
"text-align: center;\n"
"borders: none;\n"
"}\n"
"\n"
"QPushButton:hover{\n"
"   background-color: silver;\n"
"}\n"
"\n"
"QPushButton:pressed{\n"
"   background-color:gold;\n"
"}")
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.gridLayoutWidget = QWidget(self.centralwidget)
        self.gridLayoutWidget.setObjectName(u"gridLayoutWidget")
        self.gridLayoutWidget.setGeometry(QRect(20, 80, 331, 301))
        self.gridLayout = QGridLayout(self.gridLayoutWidget)
        self.gridLayout.setObjectName(u"gridLayout")
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.pushButton_3 = QPushButton(self.gridLayoutWidget)
        self.pushButton_3.setObjectName(u"pushButton_3")

    self.gridLayout.addWidget(self.pushButton_3, 2, 2, 1, 1)

    self.pushButton_2 = QPushButton(self.gridLayoutWidget)
    self.pushButton_2.setObjectName(u"pushButton_2")

    self.gridLayout.addWidget(self.pushButton_2, 2, 1, 1, 1)

    self.pushButton_6 = QPushButton(self.gridLayoutWidget)
    self.pushButton_6.setObjectName(u"pushButton_6")

    self.gridLayout.addWidget(self.pushButton_6, 1, 2, 1, 1)

    self.pushButton_4 = QPushButton(self.gridLayoutWidget)
    self.pushButton_4.setObjectName(u"pushButton_4")

    self.gridLayout.addWidget(self.pushButton_4, 1, 0, 1, 1)

    self.pushButton_7 = QPushButton(self.gridLayoutWidget)
    self.pushButton_7.setObjectName(u"pushButton_7")

    self.gridLayout.addWidget(self.pushButton_7, 0, 0, 1, 1)

    self.pushButton_8 = QPushButton(self.gridLayoutWidget)
    self.pushButton_8.setObjectName(u"pushButton_8")

    self.gridLayout.addWidget(self.pushButton_8, 0, 1, 1, 1)

    self.pushButton_9 = QPushButton(self.gridLayoutWidget)
    self.pushButton_9.setObjectName(u"pushButton_9")

    self.gridLayout.addWidget(self.pushButton_9, 0, 2, 1, 1)

    self.pushButton_5 = QPushButton(self.gridLayoutWidget)
    self.pushButton_5.setObjectName(u"pushButton_5")

    self.gridLayout.addWidget(self.pushButton_5, 1, 1, 1, 1)

    self.pushButton = QPushButton(self.gridLayoutWidget)
    self.pushButton.setObjectName(u"pushButton")

    self.gridLayout.addWidget(self.pushButton, 2, 0, 1, 1)

    self.pushButton_10 = QPushButton(self.gridLayoutWidget)
    self.pushButton_10.setObjectName(u"pushButton_10")

    self.gridLayout.addWidget(self.pushButton_10, 3, 1, 1, 1)

    self.verticalLayoutWidget = QWidget(self.centralwidget)
    self.verticalLayoutWidget.setObjectName(u"verticalLayoutWidget")
    self.verticalLayoutWidget.setGeometry(QRect(19, 9, 331, 61))
    self.verticalLayout = QVBoxLayout(self.verticalLayoutWidget)
    self.verticalLayout.setObjectName(u"verticalLayout")
    self.verticalLayout.setContentsMargins(0, 0, 0, 0)
    MainWindow.setCentralWidget(self.centralwidget)
    self.statusbar = QStatusBar(MainWindow)
    self.statusbar.setObjectName(u"statusbar")
    MainWindow.setStatusBar(self.statusbar)

    self.retranslateUi(MainWindow)

    QMetaObject.connectSlotsByName(MainWindow)
# setupUi

def retranslateUi(self, MainWindow):
    MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
    self.pushButton_3.setText(QCoreApplication.translate("MainWindow", u"9", None))
    self.pushButton_2.setText(QCoreApplication.translate("MainWindow", u"8", None))
    self.pushButton_6.setText(QCoreApplication.translate("MainWindow", u"6", None))
    self.pushButton_4.setText(QCoreApplication.translate("MainWindow", u"4", None))
    self.pushButton_7.setText(QCoreApplication.translate("MainWindow", u"1", None))
    self.pushButton_8.setText(QCoreApplication.translate("MainWindow", u"2", None))
    self.pushButton_9.setText(QCoreApplication.translate("MainWindow", u"3", None))
    self.pushButton_5.setText(QCoreApplication.translate("MainWindow", u"5", None))
    self.pushButton.setText(QCoreApplication.translate("MainWindow", u"7", None))
    self.pushButton_10.setText(QCoreApplication.translate("MainWindow", u"0", None))
# retranslateUi

Уберите запятую в конце строки импорта:

from PySide2.QtGui import QFontDatabase, QIcon, QLinearGradient, QPalette, QPainter, QPixmap,

т.е.

from PySide2.QtGui import QFontDatabase, QIcon, QLinearGradient, QPalette, QPainter, QPixmap

Или добавив скобки:

from PySide2.QtGui import (QFontDatabase, QIcon, QLinearGradient, QPalette, QPainter, QPixmap,)


Не могу понять как решить задачу по Python
Есть условие задачи:
Система «Контроль движения поездов» сохраняет информацию о поездах, которые шифруются
именами, названиями станций прибытия и плановым временем прибытия поезда на конечную
станцию. Написать программу, которая по введенному диапазону времени выводит на экран время
прибытия каждого поезда в заданном диапазоне, наименование поезда, пункт его
прибытия. Время прибытия поездов в заданном диапазоне расположить в порядке возрастания.
Считать, что поезда прибывают в моменты времени, кратные 30 минутам. Если при вводе
выходных данных следует, что, хотя бы два поезда одновременно прибывают в один пункт, то
должно выводиться сообщение об аварийной ситуации и запрос на ввод новых данных.
Не могу понять, как определить то, что хотя бы два поезда одновременно прибывают в один пункт.
Написал такой код, пытаясь идентифицировать значения времени по счетчикам:

from datetime import time
from collections import Counter

a = [{'train_code': '887B', 'station': 'Lipki', 'time_arrive': time(10, 00)},
     {'train_code': '411C', 'station': 'Kyiv   ', 'time_arrive': time(12, 00)},
     {'train_code': '887B', 'station': 'Lipki', 'time_arrive': time(10, 00)},
     {'train_code': '113F', 'station': 'Rivne', 'time_arrive': time(11, 30)}]

start_time = time(hour=int(input("h: ")), minute=int(input("m: ")))
end_time = time(hour=int(input("h: ")), minute=int(input("m: ")))
s = sorted(a, key=lambda x: x['time_arrive'])

for train in s:
    if start_time <= train.get('time_arrive') <= end_time:
        print(train)

s_tuple = tuple(k.get('time_arrive') for k in s)
train_counter = {k: s_tuple.count(k) for k in set(s_tuple)}
print(train_counter)

Идея со счетчиками показалась мне наиболее разумной, но даже ее я не могу нормально реализовать. Жду ваших идей.
UPD: нужно сравнить каждый словарь в списке друг с другом по значениям station и time. Если эти значения совпадают в разных словарях, вывести в консоль сообщение об этом этом.
Примечание: Есть идея создать копию списка и сравнить словари копии со словарями основного списка, но не ясно как применить это в коде. Буду благодарен за любую помощь.

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

import pandas as pd
from datetime import time

flag = True
while flag:

  a = [{'train_code': '887B', 'station': 'Lipki', 'time_arrive': time(12, 00)},
      {'train_code': '411C', 'station': 'Kyiv   ','time_arrive': time(10, 00)},
      {'train_code': '743L', 'station': 'Lipki', 'time_arrive': time(12, 00)},
      {'train_code': '113F', 'station': 'Rivne', 'time_arrive': time(11, 00)}]

  start_time = time(hour=int(input("h: ")), minute=int(input("m: ")))
  end_time = time(hour=int(input("h: ")), minute=int(input("m: ")))
  s = sorted(a, key=lambda x: x['time_arrive'])

  for train in s:
    if start_time <= train.get('time_arrive') <= end_time:
      print(train)
      df = pd.DataFrame(a)
      res = df.groupby(["time_arrive", "station"]).filter(lambda x: len(x) > 1)
  print(res)
  print(res["time_arrive"].to_list())

  for i in res["time_arrive"].to_list():
    if start_time <= i <= end_time:
        count = len(res)
        print(count)
        if count >= 2:
            print('Error')
            break
            flag == True

        else:
            flag == False
            break

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

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

In [12]: import pandas as pd   #  pip install pandas

In [13]: df = pd.DataFrame(a)

Исходный DataFrame:

In [14]: df
Out[14]:
  train_code station time_arrive
0       887B   Lipki    10:00:00
1       411C    Kyiv    12:00:00
2       887B   Lipki    10:00:00
3       113F   Rivne    11:30:00

поиск строк с одинаковым временем прибытия:

In [15]: res = df.groupby("time_arrive").filter(lambda x: len(x) > 1)

результат:

In [16]: res
Out[16]:
  train_code station time_arrive
0       887B   Lipki    10:00:00
2       887B   Lipki    10:00:00


Почему при импорте второго скрипта, происходит выполнение программы?
Есть два простейших скрипта prover.py:

import gsmgps

#gsmgps.hello()

И gsmgps.py:

print("hello")

Почему при запуске скрипта prover.py он заходит во второй скрипт и выводит print? Ведь файл prover.py закомментирован и я явно не указываю ему выводить что-либо из второго файла?

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

if __name__ == "__main__":
    print("hello")

Тогда, только при запуске код в
if __name__ == "__main__": будет выполняться

PS.
А в случае импортирования файла, у него в
__name__ будет его имя без расширения.
Проверить просто:

print(__name__)

PPS.
Это, кст, полезно для скриптов, из которых можно получить переменные/функции/классы и запускать их как самостоятельные единицы.
Например, у нас есть модуль для математических выражений и в нем же мы вызываем их, а чтобы код вызова не выполнился при импортировании обернули в
if __name__ == "__main__", calc.py:

def calc(text):
    ...

if __name__ == "__main__":
    print(calc("2+2*2"))
    ...

И есть другой модуль, что импортирует первый для своих нужд, main.py:

from calc import calc

print(calc("3**9+1"))


Как мне использовать функцию на двух классах? [закрыт]

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

 Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример.

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

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

У меня есть вот такой код

class Radio(QRadioButton):
    def __init__(self, icon, size, margin, parent=None):
        super(Radio, self).__init__(parent)
        change_color(self)
        self._animation = QtCore.QVariantAnimation(
            startValue=QtGui.QColor("red"),
            endValue=QtGui.QColor("white"),
            valueChanged=self._on_value_changed,
            duration=400,
        )
        self._update_stylesheet(QtGui.QColor("blue"), QtGui.QColor("black"))
        self.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))

    def _on_value_changed(self, color):
        foreground = (
            QtGui.QColor("yellow")
            if self._animation.direction() == QtCore.QAbstractAnimation.Forward
            else QtGui.QColor("green")
        )
        self._update_stylesheet(color, foreground)

    def _update_stylesheet(self, background, foreground):
        self.setStyleSheet(
        """
            background-color: %s;
            color: %s;
        """
            % (background.name(), foreground.name())
        )

    def enterEvent(self, event):
        self._animation.setDirection(QtCore.QAbstractAnimation.Backward)
        self._animation.start()
        super().enterEvent(event)

    def leaveEvent(self, event):
        self._animation.setDirection(QtCore.QAbstractAnimation.Forward)
        self._animation.start()
        super().leaveEvent(event)

class Label(QLabel):
    def __init__(self, icon, size, margin, parent=None):
        super(Label, self).__init__(parent)
        change_color(self)
        self._animation = QtCore.QVariantAnimation(
            startValue=QtGui.QColor("red"),
            endValue=QtGui.QColor("white"),
            valueChanged=self._on_value_changed,
            duration=400,
        )
        self._update_stylesheet(QtGui.QColor("blue"), QtGui.QColor("black"))
        self.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))

    def _on_value_changed(self, color):
        foreground = (
            QtGui.QColor("yellow")
            if self._animation.direction() == QtCore.QAbstractAnimation.Forward
            else QtGui.QColor("green")
        )
        self._update_stylesheet(color, foreground)

    def _update_stylesheet(self, background, foreground):
        self.setStyleSheet(
        """
            background-color: %s;
            color: %s;
        """
            % (background.name(), foreground.name())
        )

    def enterEvent(self, event):
        self._animation.setDirection(QtCore.QAbstractAnimation.Backward)
        self._animation.start()
        super().enterEvent(event)

    def leaveEvent(self, event):
        self._animation.setDirection(QtCore.QAbstractAnimation.Forward)
        self._animation.start()
        super().leaveEvent(event)

И я хочу написать функцию чтобы сократить код

def color(self):
    def face_init(self):
        self._animation = QtCore.QVariantAnimation(
            startValue=QtGui.QColor("red"),
            endValue=QtGui.QColor("white"),
            valueChanged=self._on_value_changed,
            duration=400,
        )
        self._update_stylesheet(QtGui.QColor("blue"), QtGui.QColor("black"))
        self.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))

    def _on_value_changed(self, color):
        foreground = (
            QtGui.QColor("yellow")
            if self._animation.direction() == QtCore.QAbstractAnimation.Forward
            else QtGui.QColor("green")
        )
        self._update_stylesheet(color, foreground)

    def _update_stylesheet(self, background, foreground):
        self.setStyleSheet(
        """
            background-color: %s;
            color: %s;
        """
            % (background.name(), foreground.name())
        )

    def enterEvent(self, event):
        self._animation.setDirection(QtCore.QAbstractAnimation.Backward)
        self._animation.start()
        super().enterEvent(event)

    def leaveEvent(self, event):
        self._animation.setDirection(QtCore.QAbstractAnimation.Forward)
        self._animation.start()
        super().leaveEvent(event)

class Radio(QRadioButton):
    def __init__(self, icon, size, margin, parent=None):
        super(Radio, self).__init__(parent)
        color(self)

class Label(QLabel):
    def __init__(self, icon, size, margin, parent=None):
        super(Label, self).__init__(parent)
        color(self)

Но проблема в том что я все еще плохо знаю как работать с классами.
Я могу обработать только то что находится внутри одного метода

def color(self):
    self._animation = QtCore.QVariantAnimation(
        startValue=QtGui.QColor("red"),
        endValue=QtGui.QColor("white"),
        valueChanged=self._on_value_changed,
        duration=400,
    )
    return self

Но как запихнуть в функцию все методы _on_value_changed, _update_stylesheet,enterEvent,leaveEvent.
Я не знаю.

Это типичная задача ООП -- наследование.
Оформляйте
color как класс от
QWidget и указываете его предком для
Radio и
Label.
Пример:

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

        self.face_init()

    def face_init(self):
        self._animation = QtCore.QVariantAnimation(
            startValue=QtGui.QColor("red"),
            endValue=QtGui.QColor("white"),
            valueChanged=self._on_value_changed,
            duration=400,
        )
        self._update_stylesheet(QtGui.QColor("blue"), QtGui.QColor("black"))
        self.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))

    def _on_value_changed(self, color):
        foreground = (
            QtGui.QColor("yellow")
            if self._animation.direction() == QtCore.QAbstractAnimation.Forward
            else QtGui.QColor("green")
        )
        self._update_stylesheet(color, foreground)

    def _update_stylesheet(self, background, foreground):
        self.setStyleSheet(
        """
            background-color: %s;
            color: %s;
        """
            % (background.name(), foreground.name())
        )

    def enterEvent(self, event):
        self._animation.setDirection(QtCore.QAbstractAnimation.Backward)
        self._animation.start()
        super().enterEvent(event)

    def leaveEvent(self, event):
        self._animation.setDirection(QtCore.QAbstractAnimation.Forward)
        self._animation.start()
        super().leaveEvent(event)

class Radio(QRadioButton, MyColor):
    def __init__(self, icon, size, margin, parent=None):
        super().__init__()

class Label(QLabel, MyColor):
    def __init__(self, icon, size, margin, parent=None):
        super().__init__()

Пример запуска

from PyQt5.QtWidgets import QWidget, QRadioButton, QLabel, QApplication
from PyQt5 import QtCore
from PyQt5 import QtGui

...

app = QApplication([])

b = Radio(1, 2, 3)
b.setText('[Button] Hello World!')
b.show()

l = Label(1, 2, 3)
l.setText('[Label] Hello World!')
l.show()

app.exec()

PS.
Для отлова ошибок советую использовать
sys.excepthook. Пока отлаживал ответ, мне очень пригодилось.
Пример:

from PyQt5.QtWidgets import QMessageBox

...

def log_uncaught_exceptions(ex_cls, ex, tb):
    text = '{}: {}:\n'.format(ex_cls.__name__, ex)
    import traceback
    text += ''.join(traceback.format_tb(tb))

    print(text)
    QMessageBox.critical(None, 'Error', text)
    quit()

import sys
sys.excepthook = log_uncaught_exceptions

...

app = QApplication([])


Как вывести изображение вместо имени файла python django
В models.py

class profile(models.Model):
    name = models.CharField(max_length = 20, null = True)
    photo = ThumbnailerImageField(default='photo',
                              resize_source= dict(quality=95,
                                                 size=(600,600),
                                                 sharpen=True))

views.py

def profile1(request, category):
    idc=decode(category)
    person = profile.objects.get(id = idc)
    return render(request, 'register/profile.html', context={"name":person.name,"photo":person.photo})

forms.py

class form2(forms.Form):
    name = forms.CharField(label = "логин")
    photo = forms.ImageField(label="фото")

в шаблоне(profile.html)

{{name}}
{{photo}}

settings.py

STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL = '/media/'

urls.py

app_name = "register"

urlpatterns = [
    path("<int:category>/", views.profile1, name = "profile"),
]

У меня работает регистрация и вход в созданный аккаунт, выводится имя пользователя, но вместо картинки(аватарки пользователя) выводится имя файла. Можно ли это исправить?

попробуйте выводить так

<img src="{{photo.url}}">

и добавьте в url проекта

+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


Выведение построчного txt файла в консоль [закрыт]

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

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

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

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

Здраствуйте. Есть txt файл в котором каждая буква написана с новой строки. Как вывести информацию в одну строку?
Что есть в файле:
h
e
l
l
o
Что хочу получить:
hello

Примерно так, если не сохранять строку в переменную, а сразу выводить

with open('filename', 'r') as f:
    for line in f:
        print(line.rstrip(), end='')

С сохранением в переменную:

s = ''
with open('filename', 'r') as f:
    for line in f:
        s += line.rstrip()

print(s)

Или:

s = ''
with open('filename', 'r') as f:
    s = ''.join([line.rstrip() for line in f.readlines()])

print(s)


Как сделать чтобы каждое действие пользователя приходило к тебе на твой аккаунт
Сразу уточняю, то что язык программирования python, и библиотека вроде бы telebot или pyTelegramApi. И интересно есть ли решение на данную задачку, если есть будьте добры помочь
Тут объясню по конкретнее, допустим есть пользователь, она нажимает на кнопку и мне надо чтобы на аккаунт мой приходили его все действия которые он будет делать

Могу сказать как сделать логи,
Вот функция логов:

def log(message):
    print("<!------!>")
    from datetime import datetime
    print(datetime.now())
    print("Сообщение от {0} {1} (id = {2}) \n {3}".format(message.from_user.first_name,
                                                              message.from_user.last_name,
                                                              str(message.from_user.id), message.text))

Вот пример вызова функции(на эхо боте):

import telebot
import config

bot = telebot.TeleBot(config.TOKEN)

@bot.message_handler(content_types=['text'])

def lalala(message):
    log(message) #Вот сама функция логов
    bot.send_message(message.chat.id, message.text)
    bot.send_message((message.from_user.first_name, message.from_user.last_name, str(message.from_user.id), message.text))

bot.polling(none_stop=True)

И вот что оно вам примерно пишет:

<!------!>
2020-03-24 22:45:36.516786
Сообщение от Иван Иванов None (id = 99999999)
 /start
<!------!>
2020-03-24 22:45:55.408640
Сообщение от Иван Иванов None (id = 99999999)
 привет


Как проверить все ли элементы в массиве numpy одинаковые? Python
Дан массив:

import numpy as np

a = np.array([1, 0, 1, 1, 0])

[1 0 1 1 0]

Подскажите, пожалуйста, каким способом можно проверить одинаковые ли все элементы в массиве или нет?

np.all(a == a[0])
Выражение внутри скобок строит массив из значений
True, если соответствующий элемент равен
a[0], и
False в противном случае.
npa.all возвращает
True если все элементы в этом массиве равны
True.
Работает даже в случае многомерных массивов.
UPDATE
Сравнение производительности с решением из принятого ответа. Массив длиной 1 миллион элементов, в котором элемент на позиции 500_000 отличается от остальных.

np.all оказался в 25+ раз быстрее, чем
np.unique

Python 3.6.8 (default, Jan 14 2019, 11:02:34)
IPython 5.5.0 -- An enhanced Interactive Python.

In [1]: import numpy as np

In [2]: x = np.full(1000000, 1)

In [3]: x
Out[3]: array([1, 1, 1, ..., 1, 1, 1])

In [4]: x[500000]=0

In [6]: np.unique(x).size
Out[6]: 2

In [7]: %timeit np.unique(x).size
100 loops, best of 3: 9.26 ms per loop

In [8]: np.all(x == x[0])
Out[8]: False

In [9]: %timeit np.all(x == x[0])
1000 loops, best of 3: 420 µs per loop

In [10]: %timeit np.all(x == x[0])
1000 loops, best of 3: 414 µs per loop


Узнать индекс самого большого элемента
У меня есть два массива:

data = array([10654, 10437, 10604, 10735, 10936, 10279])
index = array([448, 449, 450, 451, 452, 453])

Элементы и их индексы, нужно написать программу, которая будет находить индекс большего элемента в
data.
Нужно ли использовать
pd.Series? Или можно каким-то другим способом это реализовать?


Аргумент функции зависящий от флага
Например нужно найти массовый расход через трубопровод для жидкости и газа. Где-то ранее объявлен класс
Fluid со свойством
density и другими такими, что создание класса Gas не будет подразумевать наследование
Fluid. Тогда класс
Gas будет иметь своё свойство
density.
Тогда получается так:

v = velocity  # не является свойством какого-либо из классов
F = section_area  # не является свойством какого-либо из классов

def fluid_mass_flow(fluid):
   return fluid.density * v * F

def gas_mass_flow(gas):
   return gas.density * v *F

Это очевидно дублирование кода (по сути это методы классов). Есть ли способ с помощью какого-то флага принимать какой класс я хочу использовать и уже для него определять расход? Что-то вроде
q = mass_flow("working mass").
Либо я неверно создал класс, но подразумевается, что площадь поперечного сечения и скорость не являются свойствами этих рабочих тел.

Если интерфейсы объектов совместимы, то всеравно что вы там передаете.

def mass_flow(gas_or_fluid):
   return gas_or_fluid.density * v *F

Если интерфейсы не совместимы, то isinstace

def mass_flow(gas_or_fluid):
   if isinstace(gas_or_fluid, GasClass):
        return gas_or_fluid.density * v *F

   elif isinstace(gas_or_fluid, FluidClass):
        return gas_or_fluid.density * u *F


Поиск пары значений в DataFrame
Есть DataFrame:

col_1|col_2|info|
-----------------
val1 | val2| 33 |
val4 | val3| 32 |

И есть пара значений, информацию по которым надо извлечь
(val4, val3).
Какой оптимальный запрос составить, чтобы получить информацию из колонки
info?
Кроме как использовать дважды метод
query() на ум ничего не приходит.

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

res = df.query("col_1 == 'val4' and col_2 == 'val3'")["info"]

пример:

In [81]: df
Out[81]:
  col_1 col_2  info
0  val1  val2    11
1  val4  val3    22

In [82]: res = df.query("col_1 == 'val4' and col_2 == 'val3'")["info"]

In [83]: res
Out[83]:
1    22
Name: info, dtype: int64


Как убрать ошибку при отсутствии нужного ключа в словаре?
Существуют словари

file = {"One":"1" , "Two":"2", "Three": "3"}

file_two = {"One" : 1, "Two" : "2"}
Дальше необходимо сравнить значение ключей

if (file['One']) > (file_two['One']):
    print ("Yes")
else:
    print("No")

Но при такой ситуации

if (file['Three']) > (file_two['Three']):
    print ("Yes")
else:
    print("No")

Появляется ошибка, так как во втором словаре отсутствует ключ "Three".
Как можно сделать, что бы при отсутствии ключа, не выдавалась ошибка? Спасибо.

Можно использовать метод
.get() словарей

if file.get('Three', 0) > file_two.get('Three', 0):
    print ("Yes")
else:
    print("No")

Метод
.get() принимает ключ для поиска и значение, которое будет, если ключа нет, т.е.
file.get('Three', 0) вернет
0, если ключ
Three не найден в словаре.


Как вывести построчно каждый ip-адрес из диапазона например 192.168.1.5-10
Есть файл со списком ip-адресов. Написаны они могут быть в нескольких форматах: просто ip (192.168.1.1), диапазон (192.168.2.80-200) или вся подсеть (192.168.3.*). В случае варианта с подсетью, выполнил код следующим образом:
<code>
if line.find("*"):
    a = 0
    while a < 255:
        a += 1
        print(line.replace('*', str(a)).strip())
</code>
В случае с диапазоном не могу понять как вывести в переменные значения слева и справа от знака "-"


Как перевести строку с датой в формат YYYY-MM-DD?
Есть специальный модуль календаря для tkinter под названием tkcalendar. При взятии данных из такого календаря, я получаю строку вида DD.MM.YYYY, но для БД на SQLite мне нужна строка вида YYYY-MM-DD. К сожалению модуль
dateutil.parser не всегда переводит строку с датой верно. Например: я беру дату за сегодня, то получаю:
2020-03-18 00:00:00, но если я возьму другую дату(
08.04.2004), то на выход идёт мешанина:
2004-08-04 00:00:00. Парсер почему-то неверно переводит DD.MM.YYYY в YYYY-MM-DD и иногда меняет месяц и день местами. Подскажите, пожалуйста, более точный парсер даты, который не будет допускать таких ошибок.

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

import datetime as DT

dt = DT.datetime.strptime('10.11.2019', '%d.%m.%Y')
print(dt)
# 2019-11-10 00:00:00

print(dt.strftime('%Y-%m-%d'))
# 2019-11-10


Цикл в python, не получается правильно получить индексы выходного списка
Есть такие массивы:

r1 = [2, 2, -1, -1, -1, -1, -1, 2, 2, 2, -1]
t = [2, -1, -1, -1, -1, -1, 2, 2, 2, -1, -1]

Я их попарно вычел, получил:

er = [0, -3, 0, 0, 0, 0, 3, 0, 0, -3, 0]

А теперь хочу вывести индексы тех элементов, отличные от нуля, но выводит вот такое:

[1, 6, 1]

1 и
6 правильно, а почему в конце
1 тоже?
Код:

zc = []

r1 = r[:-1]
t = r[1:]

print(r1)
print(t)

er = [(t - r1) for t, r1 in zip(t, r1)]
print(er)

for i in er:
    if i != 0:
        zc.append(er.index(i))

print(zc)

Лучше всего в данном случае воспользоваться конструкцией for i in range(n):
<code>
for i in range(len(er)):
    if er[i] != 0:
        zc.append(i)
</code>
А в вашем коде вы получаете список с лишней, по вашему мнению, единицей в конце, ибо элементов, равных -3 в вашем списке несколько, и метод index находит индекс первого из них.


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

Напрашивается что-то типо того (при условии, что числа вводятся через пробел или другой нечисловой разделитель):

import random
import re

@bot.message_handler(content_types=['text'])
def randomizer(message):
    r = re.findall(r'\d+', message.text)
    if len(r) < 2:
        print('Придумайте, что делать, если введено меньше 2 чисел')
        return
    if len(r) > 2: #обрезание до 2-х, если чисел введено больше 2
        r = r[:2]
    r_min = min([int(i) for i in r]) #если вдруг числа введены в порядке убывания
    r_max = max([int(i) for i in r])
    bot.send_message(message.chat.id, 'Ваше случайное число: {}'.format(random.randint(r_min, r_max)))

Если нужно ввести первым числом количество случайных чисел, а затем 2 числа, образующих интервал, то так:

@bot.message_handler(content_types=['text'])
def randomizer(message):
    r = re.findall(r'\d+', message.text)
    if len(r) < 1:
        print('Придумайте, что делать, если не введено чисел')
        return
    elif len(r) == 1: #если введено 1 число, то просто что-нибудь рандомим
        bot.send_message(message.chat.id, 'Ваше случайное число: {}'.format(random.randint(0, int(r[0])**2)))
    else:
        quantity = int(r[0])
        r = r[1:3]
        r_min = min([int(i) for i in r]) #если вдруг числа введены в порядке убывания
        r_max = max([int(i) for i in r])
        rand_string = [str(random.randint(r_min, r_max)) for i in range(quantity)]
        bot.send_message(message.chat.id, 'Ваши случайные числа: {}'.format(' '.join()))


Перестройка pandas DataFrame
Есть датафрейм типа:

name1|name2|contact|
-------------------
  a  |  b  |  3   |
  a  |  c  |  4   |
  a  |  d  |  3   |
  b  |  d  |  1   |
  b  |  c  |  2   |
  c  |  d  |  5   |

Можно заметить, что все элементы имеют какой-то контакт друг с другом, однако они не повторяются,  т.е. существует, например, строчка a  |  b  |  3   | и нет строки b  |  a  |  3   |. Подскажите, как можно ее сделать? Может, есть какой-то элегантный способ в стиле pandas?
Выход должен быть таким:

name1|name2|contact|
-------------------
  a  |  b  |  3   |
  a  |  c  |  4   |
  a  |  d  |  3   |
  b  |  a  |  3   |
  b  |  d  |  1   |
  b  |  c  |  2   |
  c  |  a  |  4   |
  c  |  b  |  2   |
  c  |  d  |  5   |
  d  |  a  |  3   |
  d  |  b  |  1   |
  d  |  c  |  5   |

Выбираем матрицу имен (первые два столбца DF) и сортируем ее по столбцам два раза
 - один раз в алфавитном порядке, второй раз в обратном. Создаем из отсортированной матрицы DataFrame, добавляем столбец с
contact и объединяем два полученных DataFrame'а.
Пример:

names = df[['name1','name2']].to_numpy()
res = pd.concat([
    pd.DataFrame(np.sort(names, axis=1), columns=df.columns[:2],
                 index=df.index)
      .assign(contact=df["contact"]),
    pd.DataFrame(np.sort(names, axis=1)[:, ::-1], columns=df.columns[:2],
                 index=df.index)
      .assign(contact=df["contact"])
])

результат:

In [72]: res
Out[72]:
  name1 name2  contact
0     a     b        3
1     a     c        4
2     a     d        3
3     b     d        1
4     b     c        2
5     c     d        5
0     b     a        3
1     c     a        4
2     d     a        3
3     d     b        1
4     c     b        2
5     d     c        5


Python pandas проверить значение на None

import math
import numpy as np
from scipy.spatial import distance

#Создаю Dataframe
a = [0,1] * 10
b = [1,0] * 10
df = pd.DataFrame({'S': np.arange(100,500,20),
                  'A': np.arange(20,80,3),
                  'V': np.arange(60,120,3),
                  'N': np.arange(986,45876,2300),
                  'B': a,
                  'B_1': b},
                 index=[np.arange(0,20)])

#Создаю пропущенное значение в таблице через np.nan
df['S'].iloc[1] = np.nan
df.head()

      S    A    V   N      B    B_1
0   100.0 20    60  986    0    1
1   nan   23    63  3286.  1    0
2   140.0 26    66  5586.  0    1
3   160.0 29    69  7886.  1    0
4   180.0 32    72  10186. 0    1

Теперь мне необходимо пройтись по всем столбцам и проверить значение каждого элемента на
None.
Здесь и возникла проблема. Как правильно указать в условии?
Я пробывал следующими способами, но не один не дает положительного результат.

for i in df.columns:
    for i in df[i]:
        if(i == None):
            print(i)
#2
for i in df.columns:
    for i in df[i]:
        if(i == np.nan):
            print(i)

#3
for i in df.columns:
    for i in df[i]:
        if(i == 'nan'):
            print(i)

Подскажите пожалуйста, что необходимо указать в условии?

У меня получилось только так:
<code>
np.isnan(i)
pd.isnull(i)
pd.isna(i)
</code>
По факту там лежит np.nan, но впрямую сравнивать значения с np.nan нельзя, можно только тестировать специальными функциями.


подскажите пожалуйста можно ли сжать код?
<code>
playsound('1.mp3')

playsound('2.mp3')

playsound('3.mp3')

playsound('4.mp3')

playsound('5.mp3')

playsound('6.mp3')

playsound('7.mp3')

playsound('8.mp3')

playsound('9.mp3')

playsound('10.mp3')

playsound('11.mp3')

playsound('12.mp3')

playsound('13.mp3')

playsound('14.mp3')

playsound('15.mp3')

playsound('16.mp3')

playsound('17.mp3')

playsound('18.mp3')

playsound('19.mp3')

playsound('20.mp3')

playsound('21.mp3')

playsound('22.mp3')

playsound('23.mp3')

playsound('24.mp3')

playsound('25.mp3')

playsound('26.mp3')

playsound('27.mp3')

playsound('28.mp3')

playsound('29.mp3')

playsound('30.mp3')

playsound('31.mp3')

playsound('32.mp3')

playsound('33.mp3')

playsound('34.mp3')

playsound('35.mp3')

playsound('36.mp3')

playsound('37.mp3')

playsound('38.mp3')

playsound('39.mp3')

playsound('40.mp3')

playsound('51.mp3')

playsound('52.mp3')

playsound('53.mp3')

playsound('54.mp3')

playsound('55.mp3')

playsound('56.mp3')
</code>

for i in range(1, 57):
    playsound("{}.mp3".format(i))


Некоторая проблема с чат ботом в вк на python
Я не самый сведущий в делах программирования, так что прошу заранее меня простить если вопрос покажется глупым, а мои ответы на ваши решения ещё более глупыми, спасибо за понимание.
Проблема состоим в следующем: есть некоторый код, благодаря которому бот отсылает сообщение в ответ на любое другое сообщение в беседе. Так вот, я бы хотел узнать каким образом я могу сделать так, чтобы бот отвечал не на все сообщения, а на определённые, заданные в коде?
В VkLongPoll для этого есть событие text, в VkBotLongPoll я этой альтернативы не нашёл, увы.
Сам код:
<code>
from random import random
from vk_api import VkApi
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType

vk_session = VkApi(token="токен бота")
longpoll = VkBotLongPoll(vk_session, "id группы бота")
vk = vk_session.get_api()

for event in longpoll.listen():
    if event.type == VkBotEventType.MESSAGE_NEW and event.from_chat:

        random_id = round(random() * 10 ** 9)
        chat_id = int(event.chat_id)
        message = "ваше сообщение"

        vk.messages.send(
            random_id=random_id,
            chat_id=chat_id,
            message=message,
        )
    ```

</code>

Разобрался сам. В условии отбора нужно было использовать
event.object.message['text'] == "нужное сообщение"