Не получается сделать так что бы текст в kivy появлялся по символу ,а не весь сразу
<code>
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label

from kivy.clock import Clock

class MyBox(BoxLayout):
    def __init__(self, my_text, **kwargs):
        super().__init__(orientation="vertical", padding=10, spacing=10, **kwargs)
        self.letters = []
        for i in my_text:
            self.letters.append(i)
        self.label = Label()
        self.add_widget(self.label)
        self.a=0
        self.label.text= ""
        while self.a < len(self.letters):
            try:
                Clock.schedule_once(self.change_text, 0.1)
                self.a=self.a+1
            except:
                break

    def change_text(self,dt):
        try:

            self.label.text = self.label.text + self.letters[self.a]
        except:
            print(self.a)

class MyApp(App):
    def build(self):
        box = MyBox("пример текста")
        return box

app = MyApp()
app.run()
</code>

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput

from kivy.clock import Clock

class MyBox(BoxLayout):

    def __init__(self, **kwargs):
        super().__init__(orientation="vertical", padding=10, spacing=10, **kwargs)
        self.label = Label()
        self.button = Button(text = 'Run')
        self.button.bind(on_release = self.run)
        self.text_input = TextInput()
        self.add_widget(self.label)
        self.add_widget(self.text_input)
        self.add_widget(self.button)

    def run(self, *args):
        self.label.text = ''
        self.start = Clock.schedule_interval(self.change_text, 0.2)

    def change_text(self, instance, *args):
        my_text = self.text_input.text
        len_text = len(self.label.text)+1
        if len_text == len(my_text) or len(my_text) == 0:
            self.start.cancel()
            return
        self.label.text = f'{self.label.text}{my_text[len_text]}'

class MyApp(App):
    def build(self):
        box = MyBox()
        return box

app = MyApp()
app.run()


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

name
value

x
(1,2,3)

x
(4,5,6)

x
(7,8,9)

в итоге нужно получить
<code>
x    | (1,2,3,4,5,6,7,8,9)
</code>
на самом деле таблица полигонов, нужно сделать в итоге что-то типа мультиполигональной
буду признательна за любую помощь/подсказку/направление

Если у вас есть датафрейм:

import pandas as pd

df = pd.DataFrame({"name":["x", "x", "x"], "value":[(1,2,3), (4,5,6), (7,8,9)]})

  name      value
0    x  (1, 2, 3)
1    x  (4, 5, 6)
2    x  (7, 8, 9)

то, достаточно просто сделать группировку с суммированием:

res = df.groupby("name", as_index=False).sum()

res:

 name                        value
0    x  (1, 2, 3, 4, 5, 6, 7, 8, 9)


Как вводить в список сразу несколько числовых значений?
Цель: сделать так, чтобы пользователь вводил (уже после запуска кода) в список сразу несколько числовых значений, и при этом, чтобы они все были в формате чисел (int, как я понимаю), а не str.
Пытался сделать через такой код:

list=[int(input('Введите числа, из которых будет состоять список: '))]
print(list)

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

ValueError: invalid literal for int() with base 10: '1 2 3' - это числа, которые я пытаюсь ввести. Не важно, есть междуними запятая, или нет, всё равно ошибка :(

Помогите написать корректный код.

Самый примитивный способ при условии, что все вводимые данные будут числами:

list_data = [int(value) for value in input().split()]
print(list_data)

Пояснение:

вводите числа через пробел.
.split() - вернет список элементов, разделенных пробелом
при помощи генератора вы пробегаетесь по каждому элементу и интуете их.
Результат ложится в переменную list_data, где все числа будут интовыми

ЛИБО по сложнее, но с проверкой:

list_data = input().split()
int_lst = []
for element in list_data:
    if element.isdigit():
        int_lst.append(int(element))
    else:
        print(f'{element} - не является числом! ')
        print('Ошибка формирования списка чисел!')
        exit()
print(f'Ваш список чисел:', int_lst)


Чем обусловлено столь странное поведение при сложении list и tuple?
Заметили такую странную штуку:
<code>
>>> a = [3]
>>> a += (1,2)
>>> print(a)
[3, 1, 2]
>>> (1,2) + [3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate tuple (not "list") to tuple
>>> [3] + (1,2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "tuple") to list
</code>
Может ли кто-то объяснить почему так странно работает их сложение? -_-

a = [1, 2, 3]
type(a)
<class 'list'>

Тут тип list

a += (4, 5)
type(a)
<class 'list'>

Логично предположить, что если переменная была типа list, то она и останется list.
А вот какой результат был бы при сложении
[1, 2] + (3, 4)? Tuple или list? А если наоборот сложить сначала кортеж, а потом список? Чтоб не морочить программистам головы разработчики python решили просто запретить складывать их напрямую и все.


ЕГЭ, Python "Построение алгоритмов и практические вычисления" [закрыт]

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

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

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

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

Само задание:
Автомат обрабатывает натуральное число N (0 ≤ N ≤ 255) по следующему алгоритму:

Строится восьмибитная двоичная запись числа N.
Все цифры двоичной записи заменяются на противоположные (0 на 1, 1 на 0).
Полученное число переводится в десятичную запись.
Из нового числа вычитается исходное, полученная разность выводится на экран.
Какое число нужно ввести в автомат, чтобы в результате получилось 111?

Пожалуйста объясните, что я сделал не так.
<code>
def f(N):
    n = bin(N)[2:]
    n = str.maketrans('01', '10')
    return int(n, 2)

for N in range (1, 255):
    if f(N) == 111:
        print(N)
</code>

Вы забыли вычислить разность
Из нового числа вычитается исходное, полученная разность
Кроме того, строки там вообще не нужны, биты можно инвертировать с помощью оператора "исключающего или" - xor (
^). Вся функция:

def f(N):
    n = N ^ 255
    return N - n


Как отправить сообщения юзерам при старте бота Aiogram
Допустим, создал я бота. Хочу, чтобы обособленно от готовых хендлеров, бот отправлял всем пользователем подготовленное сообщение. Допускаю, что это можно сделать, во время перезапуска бота
Пробовал этот способ, ничего не вышло и ничего не понял:
<code>
from aiogram import Bot

token = 'token'
bot = Bot(token)

async def gg():
    while True:
        await bot.send_message(id, msg)
        asyncio.sleep(10)

asyncio.run(gg()) ```
</code>

Вам нужна бд с юзер айди для того чтобы сделать это. У aiogram есть встроенные способы сделать что-то при старте бота и при завершении это on_startup и on_shutdown.
Вот примерный код как это должно работать.
<code>
from aiogram import Bot, Dispatcher, executor
from aiogram.contrib.fsm_storage.memory import MemoryStorage
import asyncio

from data import config

bot = Bot(token=config.BOT_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)

async def on_startup(_):
    arr = []  # абстрактный массив с юзер_айди
    for user_id in arr:
        await bot.send_message(chat_id=user_id, text="Бот запущен!")
        await asyncio.sleep(1)

if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True, on_startup=on_startup)

</code>


Условие генерации строки
Есть код, который генерирует последовательность символов. Но в нем должно быть условие, что буквы не могут идти больше 4-х раз подряд (т.е может быть строчка 'aaa', но не должно быть 'aaaa'). Сама программа реализована на Python, код прикладываю ниже. Реализация происходит при помощи модуля random.
<code>
import random

text = 'abcdef'
num = '1234567890'

qua = 10

sym = []
sym.extend(list(text))
sym.extend(list(num))

random.shuffle(sym)
key = []

for yx in range(qua):
    key.append(''.join([random.choice(sym) for x in range(32)]))

file = open('Password.txt', 'w')
file.write('\n'.join(key))
file.close()

print('\n'.join(key))
print('\n')
</code>
Что следует добавить в код, чтобы вывод был с условием?

Очевидно, что добавить счетчик количества одинаковых элементов. Обратите внимание, что первый элемент мы добавляем в список до цикла, чтобы нам было с чем сравнивать последующие
<code>
import random

text = 'ab'
num = '12'

qua = 10

sym = []
sym.extend(list(text))
sym.extend(list(num))

random.shuffle(sym)
key = []

counter = 1  # Добавляем счетчик
key.append(''.join([random.choice(sym) for x in range(32)]))
for yx in range(qua):
    sumbol = [random.choice(sym) for x in range(32)] # Генерируем символ
    if sumbol == key[-1] and counter <3: # Если символ повторяется, и счетчик меньше трех, то добавляем увеличивая счетчик
        counter += 1
        key.append(''.join(sumbol))
    elif sumbol != key[-1]: # Если символ другой, то обнуляем счетчик
        counter = 1
        key.append(''.join(sumbol))
    else: # Иначе генерируем символы до тех пор, пока, не сгенерируется символ отличающийся от последних трех
        while sumbol == key[-1]:
            sumbol = [random.choice(sym) for x in range(32)]
        key.append(''.join(sumbol))
        counter = 1

print('\n'.join(key))
print('\n')
</code>


Зациклить состояниe FSM aiogram [закрыт]

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

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

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

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

Я новичок в aiogram, можете подсказать, как зациклить одно состояние FSM машины, например, пользователь вводит количество участников и по очереди имена участников в отдельных сообщениях. И бот будет принимать имена участников, пока их не станет столько же, сколько пользователь ввёл изначально.
Подскажите, пожалуйста!😖

Ну так оставьте одно состояние и всё. Запишите в дату стейта количество которое он ввел и сделайте массив, в который будут добавляться те кого он вписывает. Это буквально два хендлера и два состояния.
Что-то вроде этого
<code>
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import StatesGroup, State

from data import config

bot = Bot(token=config.BOT_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)

class InputWhatever(StatesGroup):
    kolvo = State()
    name_user = State()

@dp.message_handler(commands=["start"])
async def start(message: types.Message):
    await message.answer("Введите кол-во юзеров")
    await InputWhatever.kolvo.set()

@dp.message_handler(state=InputWhatever.kolvo)
async def get_number(message: types.Message, state: FSMContext):
    if message.text.isdigit():
        if int(message.text) > 0:
            await InputWhatever.name_user.set()
            async with state.proxy() as data:
                data["number"] = int(message.text)
                data['user_array'] = []
            await message.answer("Введите юзера!")
        else:
            await message.answer("Введите число больше 0!")
    else:
        await message.answer("Введите кол-во!")

@dp.message_handler(state=InputWhatever.kolvo)
async def get_user_name(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        if len(data['user_array']) <= data['number']:
            data['user_array'].append(message.text)
            ...

if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)
</code>


Не могу забирать запросы Aiohttp из цикла - ошибка ValueError: I/O operation on closed file + aiohttp.payload.LookupError
Когда пробую перебрать список с API ключами в цикле, то вылазит две ошибки: ValueError: I/O operation on closed file AND aiohttp.payload.LookupError...
Вот функция запроса к API:

async def get_api_response(photo_bytes, api_key, language):
    async with aiohttp.ClientSession() as session:
        async with session.post(URL_API,
                                data={
                                    "picture.png": photo_bytes,
                                    "apikey": api_key,
                                    "language": language
                                }) as response:
            return await response.text()

И вот цикл перебора апи ключей (находится в хендлере aiogram, но это ничего не решает):

for api_key in API_KEYS:
    response = json.loads(await get_api_response(photo_bytes=photo_bytes, api_key=api_key, language=photo_lang))
    print(response)

Когда пробую вставить цикл в функцию с запросом, то возникает такая же ошибка. Но когда вызываю функцию без цикла, то ошибки нету. Какие есть предложения, как исправить ошибку с минимальными изминениями?
Логика такая кода такая: если при переборе API ключей в цикле API ключ работает, то брейкаем(break) цикл.
UPD: В ХОДЕ МНОГОЧАСОВЫХ ИССЛЕДОВАНИЙ Я ПОНЯЛ, ЧТО ОШИБКА ВЫЛАЗИТ, ПОТОМУ ЧТО ПОСЛЕ ПЕРВОГО ЦИКЛА ЗАКРЫВАЕТСЯ PHOTO_BYTES
Вот сама инициализация photo_bytes:

photo = cv2.imread(photo_path)
unused_var, compressed_image = cv2.imencode('.png', photo, [1, 90])
photo_bytes = io.BytesIO(compressed_image)

ну типа что-то такого
<code>
with io.BytesIO(compressed_image) as f:
    photo_bytes = f.read()
</code>


Помогите исправить дрожание шарика
Нужно справить шарик который ДРОЖИТ по оси X, в независимости от радиуса. Чем больше я увеличиваю fps тем быстрее шарик падает
<code>
import random as rnd

WIDTH, HEIGHT = 1200, 800

fps = 60

# ship
ship_w = 125
ship_h = 35
ship_speed = 15
ship = pygame.Rect(WIDTH // 2 - ship_w // 2, HEIGHT - ship_h - 10, ship_w, ship_h)
# ball
ball_radius = 10
ball_speed = 6
ball_rect = int(ball_radius * 2 ** 0.5)
print(rnd.randint(ball_rect, WIDTH - ball_rect))
dx, dy = 1, -1
ball = pygame.Rect(rnd.randint(ball_rect, WIDTH - ball_rect), HEIGHT // 2, ball_rect, ball_rect)
pygame.init()
sc = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()

# image
img = pygame.image.load('SPACE228.jpg').convert()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
    sc.blit(img,(0, 0))
    # то что нарисованно (корабль)
    pygame.draw.rect(sc, pygame.Color('purple'), ship)
    pygame.draw.circle(sc, pygame.Color('green'), ball.center, ball_radius)
    # передвижение ball'a
    ball.x += ball_speed * dx
    ball.y += ball_speed * dy
    if ball.centerx < ball_radius or ball.centerx < WIDTH - ball_radius:
        dx = -dx
    if ball.centery < ball_radius:
        dy = -dy
    if ball.colliderect(ship) and dy > 0:
        dy = -dy

    # управление
    key = pygame.key.get_pressed()
    if key[pygame.K_LEFT] and ship.left > 0:
        ship.left -= ship_speed
    if key[pygame.K_RIGHT] and ship.right < WIDTH:
        ship.right += ship_speed
    # screen update
    pygame.display.flip()
    clock.tick(fps)```
</code>

Смотрите, вся ошибка в этих 4 строках,

if ball.centerx < ball_radius or ball.centerx < WIDTH - ball_radius:
    dx = -dx
if ball.centery < ball_radius:
    dy = -dy

ball.centerx - это координаты центра шарика. А радиус не связян с координатами шарика, а из-за того что шарик постоянно выполняет эти условия он дрожжит (меняет свое направление 1 раз за проход цикла)
Если ты хочешь отталкивание от стенок то напиши:

if ball.right >= WIDTH or ball.left <= 0:
    dx = -dx
if ball.top <= 0 or ball.bottom >= HEIGHT:
    dy = -dy

Этот код будет работать


Cпарсить C-подобный формат на python
Нужно сделать парсер вот такого формата, как это можно сделать? Заранее спасибо!

"Users"
{
    "STEAM_0:0:15256262"
    {
        "name"   "polly"
        "expires"   "0"
        "flags"   "0a0b0c0d0h0n0p0t0w0x1b1e1f1h1k1n0z"
    }
    "STEAM_0:1:24536789"
    {
        "name"   "test_user"
        "expires"   "0"
        "flags"   "0a0b0c0d0h0n0p0t0w0x1b1e1f1h1k1n0z"
    }

}

Нужно, чтобы на выходе парсер выдавал что-то типо:

[{"steam_id": "STEAM_0:0:15256262", "name": "polly", "expires": "0", "0a0b0c0d0h0n0p0t0w0x1b1e1f1h1k1n0z"},
 {"steam_id": "STEAM_0:1:24536789", "name": "test_user", "expires": "0", "0a0b0c0d0h0n0p0t0w0x1b1e1f1h1k1n0z"}]

Накидал простенький парсер:

Перебираем построчно и считаем количество открывающих и закрывающих скобок
Заполняем данные в зависимости от текущего уровня вложенности

Для первого уровня, т.е.
steam_id достаточно вернуть строку без первого и последнего символа
Для вытаскивания ключ-значений типа
name используется регулярное выражение
"(.+?)"\s+"(.+?)", которое означает поиск в строке пары кавычек с текстом внутри (
"(.+?)"), разделенными пробелами (
\s+)

Пример:

import re

text = """\
"Users"
{
    "STEAM_0:0:15256262"
    {
        "name"   "polly"
        "expires"   "0"
        "flags"   "0a0b0c0d0h0n0p0t0w0x1b1e1f1h1k1n0z"
    }
    "STEAM_0:1:24536789"
    {
        "name"   "test_user"
        "expires"   "0"
        "flags"   "0a0b0c0d0h0n0p0t0w0x1b1e1f1h1k1n0z"
    }
}
"""

items = []
current_level = 0

for line in text.splitlines():
    line = line.strip()
    if line == '{':
        current_level += 1
        continue
    elif line == '}':
        current_level -= 1
        continue

    if current_level == 1:
        steam_id = line[1:-1]
        items.append({'steam_id': steam_id})

    elif current_level == 2:
        m = re.search(r'"(.+?)"\s+"(.+?)"', line)
        key, value = m.group(1), m.group(2)
        items[-1][key] = value

print(items)

Результат:

[{'steam_id': 'STEAM_0:0:15256262', 'name': 'polly', 'expires': '0', 'flags': '0a0b0c0d0h0n0p0t0w0x1b1e1f1h1k1n0z'}, {'steam_id': 'STEAM_0:1:24536789', 'name': 'test_user', 'expires': '0', 'flags': '0a0b0c0d0h0n0p0t0w0x1b1e1f1h1k1n0z'}]

PS.
Если считывать из файла, то есть такие варианты:

Считать в переменную:

with open('путь до файла', encoding='utf-8') as f:
    text = f.read()
    ...

Считывать из файла построчно:

with open('путь до файла', encoding='utf-8') as f:
    items = []
    current_level = 0

    for line in f:
        ...

Второй вариант особенно подходит, когда файл не влезет в память


Сравнение (==) двух неотсортированных массивов
Нужна ваша консультация)
Есть ли алгоритм позволяющий сравнить (равно или нет) содержимое двух неотсортированных массивов?
Т.е.
[3, 2, 1] == [1, 2, 3], но можно ли получить в таком случае
True, не сортируя эти массивы заранее?

Можно использовать встроенный модуль collections,
<code>
import collections

l1 = [10, 99, 20, 30, 40, 50]
l2 = [10, 20, 30, 99, 50, 40]

if collections.Counter(l1) == collections.Counter(l2):
    print ("Списки l1 и l2 одинаковые")
else:
    print ("Списки l1 и l2 неодинаковые")
</code>


Python как загрузить переменные з файла и убрать переменные в файл
в приложении есть класс с переменными global_variables в нем около 50 важных переменных, что-то вроде настроек программы, как можно эти переменные забирать из JSON файла и убирать их туда?
Чтобы в момент работы программы можно было поменять что-то в JSON файле, и из функции обновить текущие переменные, и соответственно убирать в файл текущее настройки.
Я нашел решение через for и длинный список присваиваний, но может быть есть решение в пару строк кода?

import json

class global_variable:
    work_dir = ''
    limit_time = 600
    cash_min_time = 300

properties = {
    item: getattr(global_variable, item)
    for item in dir(global_variable) if not item.startswith('__')
}

with open('file.json', 'w', encoding='utf-8') as file:
    json.dump(properties, file,  indent=2)
# -- Сохранили в файл

file.json

{
  "cash_min_time": 300,
  "limit_time": 600,
  "work_dir": ""
}

Читаем

# Мы получили класс с такими значениями
class global_variable:
    work_dir = ''
    limit_time = 400
    cash_min_time = 100

# Теперь Мы читаем значения из файла
with open('file.json', 'r', encoding='utf-8') as file:
     data = json.load(file)

# Присваиваем новые значения
for key, value in data.items():
    setattr(global_variable, key, value)

# Проверяем
print(
    global_variable.limit_time,
    global_variable.cash_min_time,
    sep='\n'
)
# 600
# 300


Питон, нужна помощь [закрыт]

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

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

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

Сообщество рассмотрело необходимость повторного открытия этого вопроса 1 год назад и оставило его закрытым:

Исходные причины закрытия не были исправлены

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

Как сделать так,что бы когда появляется один текст,другой пропадал я не могу допедреть

import os
import time as t

print("Текст 1")
t.sleep(3)       #задержка в 3 секунды, чтобы мы смогли разглядеть текст 1
os.system("cls") #очищяет экран
print("Текст 2")


цвет фона окна и текста [закрыт]

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

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

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

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

встала задача поменять цвет фона окна и текста.
попробовал вот-так:
<code>
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from untitled import Ui_Dialog

app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
Dialog.setStyleSheet("#Dialog{color: rgb(170, 255, 0);,background-color: rgb(0, 0, 0);}")
</code>
заранее спасибо

Зачем запятые между свойствами?
<code>
("#Dialog{color: rgb(170, 255, 0);,background-color: rgb(0, 0, 0);}"
</code>
Разделителем служит \n а не запятая!
Формы проще и удобнее создавать через qtcreator


Демонизация python бота в systemd в его venv
всем хорошего дня, прошу помочь в следующем
Имеется debian
Имеются дериктории
С venv
/home/vladsu/.virtualenvs/vlad/bin/activate
C ботом
/home/vladsu/SM_8ject/SM-8/SM_8.py
Файл службы в /etc/systemd/system

[Unit]
Description=SM_803
After=network.target

[Service]
User=root
Group=root
WorkingDirectory=/home/vladsu/SM_8ject/SM-8
ExecStart=/home/vladsu/.virtualenvs/vlad/bin/python3 /home/vladsu/SM_8ject/SM-8/SM_8.py
Restart=always
RestartSec=240
[Install]
WantedBy=multi-user.target

Но почему-то бот не видит зависимостей в своей директории
И как указать файл для логов?

Рабочий пример

[Unit]
Description=Otomoto.pl ad publicher and remover
StartLimitIntervalSec=1h
StartLimitBurst=60

[email protected]
[email protected]

OnFailure=fail@%i.service
StartLimitIntervalSec=10 min
StartLimitBurst=10

[Service]
Type=simple

User=developer
Group=developer

# ===  На самом деле, ответ на Ваш вопрос здесь ===

Environment=VIRTUAL_ENV=/srv/smai/venv
Environment=PYTHONPATH=/srv/smai
ExecStart=/srv/smai/venv/bin/python /srv/smai/portals/publishing/tasks/%i/run.py
# ==============================

ExecStop=/srv/smai/venv/bin/python /srv/smai/extras/services/exec_stop.py %i

WatchdogSec=3600

Restart=on-failure
RestartSec=10

LogLevelMax=err
SyslogLevel=err

[Install]
WantedBy=default.target

Полагаю Ваш файл должен выглядеть так

[Unit]
Description=SM_803
After=network.target

[Service]
# Запуск от root производится по умолчанию
# User=root
# Group=root

Environment=VIRTUAL_ENV=/home/vladsu/.virtualenvs/vlad
Environment=PYTHONPATH=/home/vladsu/SM_8ject/SM-8

# WorkingDirectory=/home/vladsu/SM_8ject/SM-8
ExecStart=/home/vladsu/.virtualenvs/vlad/bin/python3 /home/vladsu/SM_8ject/SM-8/SM_8.py

Restart=always
RestartSec=240

[Install]
WantedBy=multi-user.target


Как можно перезаписывать переменную из функции счётчика и выводить пользователю значение переменной?
<code>
def start_process():  # Запуск Process
    p1 = Process(target=Str_schedule.start_schedule, args=()).start()

class Str_schedule():  # Class для работы с schedule

    def start_schedule():  # Запуск schedule
        # Параметры для schedule
        schedule.every(1).seconds.do(Str_schedule.func)

        while True:  # Запуск цикла
            schedule.run_pending()
            time.sleep(1)

    # Функции для выполнения заданий по времени
    class Func():
        def __init__(self):
            self.c = 0

        def __call__(self):
            self.c += 1
            global a
            a = self.c
            return self.c

    func = Func()

@bot.message_handler(commands=['start'])
def start(message):
    bot.send_message(message.chat.id, str(a))

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

Спустя долгого поиска пути решения, выяснил следующее. Если ваш бот на heroku, то нет смысла пытаться делать счетчик, так как heroku каждые 6 часов уходит в сон и счетчик остановится. Если же вы решите сделать счетчик через записывание данных счетчика в файл или с помощью sqlite3 файла , вас ждет тоже неудача. Heroku так устроен, что после перезагрузки проекта, все данные сбрасываются к начальным состояниям.
Поэтому единственное решение это использовать БД .  Например, в heroku бесплатно можно использовать PostgreSQL. Но если не хотите настраивать БД, можете использовать бесплатный json-хостинг сервис - jsonstorage.net.


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

С использованием класса M_set решить задачи:
a) найти символ, входящий в строку S максимальное количество раз;
b) проверить, состоят ли строки S1, S2 из одних и тех же символов,
которые входят в эти строки одинаковое количество раз;
c) проверить, верно ли, что все символы строки S1, входят также в
строку S2, причем не меньшее количество раз, чем у S1

Я пока сделала только а

class M_set(dict):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.__dict__ = self

a = M_set()
S = 'I love my mommm'
for a.b in S:
    a[a.b] = a.get(a.b,0)+1
#здесь я получила вот это, но я не понимаю почему 1 элемент словаря такой поэтому я решила его
#просто удалить
del a['b']#{'b': 'm', 'I': 1, ' ': 3, 'l': 1, 'o': 2, 'v': 1, 'e': 1, 'm': 5, 'y': 1}
print(a)
print(max(a, key=a.get))

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

Ключ
'b' равный
m у вас появился из-за
a.b в цикле. До цикла у вас словарь
a пустой, а при первой итерации у него появится значение
'b' = 'I', т.к. при итерации
for a.b in S: в
a.b будут присваиваться значения:

a.b = S[0]
a.b = S[1]
...
a.b = S[n-1]

Если не использовать
a.b, то это не создаст тот ключ:

class M_set(dict):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.__dict__ = self

a = M_set()
S = 'I love my mommm'
for c in S:
    a[c] = a.get(c, 0)+1

print(a)
print(max(a, key=a.get))
# {'I': 1, ' ': 3, 'l': 1, 'o': 2, 'v': 1, 'e': 1, 'm': 5, 'y': 1}
# m

Кст, если же
a.b необходимо, то это можно обойти, если у
M_set убрать
self.__dict__ = self, тогда присваивание в
a.b не будет создавать ключ
b


Помогите оптимизировать код (время выполнения более 2 сек.) Python
Задача:
Условия
Каждый пароль должен состоять из четного количества символов, и при этом первая половина пароля должна быть «анаграммно меньше» второй его половины. Теперь Василию нужен алгоритм, проверяющий, удовлетворяет ли придуманный пароль заданному условию.
Вам дано n пар строк одинаковой длины (каждая строка – половина пароля).
Строка s считается анаграммно меньше строки t, если существуют строка s' и строка t' такие что:

    s' получается из s перестановкой букв
    t' получается из t перестановкой букв
    s' лексикографически меньше, чем t'

Для каждой пары строк si, ti определите правда ли, что si анаграммно меньше чем ti.
Формат входных данных
В первой строке задано целое число n - число пар строк в тесте (1 < n < 100).
В следующих 3n строках содержатся описания пар строк. Каждое описание состоит из трех последовательных строк. В первой строке каждого описания дана длина строк m_i (1 < m_i < 100), затем в следующих двух строках записаны строки  s_i, t_i длины m_i, состоящие из строчных латинских букв.
Формат выходных данных
Для каждой пары строк из входных данных, выведите в i-й строке Yes, если строка s_i анаграммно меньше строки t_i. Иначе выведите No.
Собственно говоря код:

from collections import Counter
from itertools import permutations
#Получаем исходные данные
list_1 = []
n = int(input())
for i in range(n):
    list_1.append([int(input()), input(), input()])
#Удаляем лишние элементы
for item in list_1:
    item.pop(0)
#Определяем условия для нахождения анаграммы
#Строка s считается анаграммно меньше строки t,
#если существуют строка s' и строка t' такие что:
for item in list_1:
    #s' получается из s перестановкой букв
    #t' получается из t перестановкой букв
    s_1, s_2 = ''.join(sorted(item[0])), ''.join(sorted(item[1]))
    #s' лексикографически меньше, чем t'
    e, f = min(permutations(item[0])), max(permutations(item[1]))

    if Counter(s_1) == Counter(item[0]) and Counter(s_2) == Counter(item[1]) and e < f:
        print('Yes')
    else:
        print('No')

Код вроде работает, но при больших объемах данных выходит за рамки отведенного времени на выполнение.

Отсортируйте первую строку по возрастанию, а вторую по убыванию, и сравните результаты.


Необходимо вывести длину наибольшей подстроки, находящейся между символами *
Этот код работает, но если введённая строка заканчивается символом *, то выдается ошибка:
IndexError: string index out of range

text = input("string ")
max_stars = 0
b = 0
print(len(text))
for i in range(len(text)):
    if text[i] == "*":
        b = i + 1
        count = 0
        r = ""
        while text[b] != "*" and b+1 != len(text):
            count += 1
            b += 1
            r = text[b]
        if count > max_stars and r == "*":
            max_stars = count
print(max_stars)

<code>
text = input("string ")
max_stars = 0
b = 0
print(len(text))
for i in range(len(text) - 1):
    if text[i] == "*":
        b = i + 1
        count = 0
        r = ""
        while text[b] != "*" and b+1 != len(text):
            count += 1
            b += 1
            r = text[b]
        if count > max_stars and r == "*":
            max_stars = count
print(max_stars)
</code>
Ты обращаешься к элементу, которого по номеру в строке нет, т.к. ты к элементу из цикла for прибавляешь 1, поэтому при обнаружении "*", у тебя вылетает ошибка. чтобы обратиться к i + 1, тебе надо в range добавить
'len(text) - 1'
Если я правильно тебя понял.


Как произвести обработку данных столбца, содержащих значения?
Необходимо убрать в колонке name кавычки и квадратные скобки и преобразовать в список, не изменяя ячейки с отсутствующими значениями (как добавить пустое значение на этапе создания df не знаю, поэтому поставил вместо NaN - ''):
<code>
d = {
    'name': [
        '',
        ['tot', 'piter', 'carl'],
        ['brick', 'nick'],
        ['rick', 'reaven', 'bart', 'homer'],
        ['rick', 'morty']
    ],
    'Date': [
        '11/05/2011',
        '9/02/2010',
        '1/01/2014',
        '12/20/2020',
        '9/30/2009'
    ],
    'Address': [
        'BY',
        'YU',
        'RU',
        'BY',
        'BY'
    ]
}
df = pd.DataFrame(data = d)
</code>
Ответ должен выглядеть как:

name
Date
Address

NaN
11/05/2011
BY

[tot, piter, carl]
9/02/2010
YU

[brick, nick]
1/01/2014
RU

[rick, reaven, bart, homer]
12/20/2020
BY

[rick, morty]
9/30/2009
BY

Желательно, не использовать циклы.

Поскольку не сказано, что делать с
NA, то допустим пускай превращается в строку:

df['name'] = df['name'].str.join(', ')

Результат:

name
Date
Address

<NA>
11/05/2011
BY

tot, piter, carl
9/02/2010
YU

brick, nick
1/01/2014
RU

rick, reaven, bart, homer
12/20/2020
BY

rick, morty
9/30/2009
BY


Помогите с ошибкой новичку в Python/Питон
Сейчас изучаю множества. Снизу прикреплен проблемный отрывок. Почему-то когда я объединяю множества после строки if, полученное объединение не определяется("is not defined").

team1={'Илья', 'Некит', 'Влад'}
team2={'Артём', 'Санёк'}
if (((input('Желаете объединить команды? ')).upper) == 'ДА'):
    union = team1.union(team2)
print(', '.join(union))

NameError: name 'union' is not defined

Причём когда я пишу без строки с if, всё получается:

team1={'Илья', 'Некит', 'Влад'}
team2={'Артём', 'Санёк'}
union = team1.union(team2)
print(', '.join(union))

Итог: Илья, Некит, Влад, Артём, Санёк.

Вопрос: почему не получается вариант кода с использованием if? Как это можно решить?

Во первых, надо добавить скобки к
upper-у. Во вторых, у Вас много лишних скобок.
Работающий и правильный код выглядит так:

team1={'Илья', 'Некит', 'Влад'}
team2={'Артём', 'Санёк'}
if input('Желаете объединить команды? ').upper() == 'ДА':
    union = team1.union(team2)
try:
    print(', '.join(union))
except NameError:
    print('Команды не объединены.')


Сложение списка словарей
Есть два списка:

list_one = [{"name": "Alex", "value": 1}, {"name": "Bob", "value": 2}]

list_two = [{"name": "Alex", "value": 1}, {"name": "Bob", "value": 2}]

Нужно их сложить так что бы получился третий такого вида:

list_three = [{"name": "Alex", "value": 2}, {"name": "Bob", "value": 4}]

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

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

import pandas as pd
list_one = [{"name": "Alex", "value": 1}, {"name": "Bob", "value": 2}]
list_two = [{"name": "Alex", "value": 1}, {"name": "Bob", "value": 2}]
res = pd.DataFrame(list_one+list_two).groupby("name", as_index=False).sum().to_dict("records")
print(res)

[{'name': 'Alex', 'value': 2}, {'name': 'Bob', 'value': 4}]

UPDATE:
Если нужно складывать значения по модулю (абсолютные), то делаем так:

res = pd.DataFrame(list_one+list_two).groupby("name", as_index=False)["value"].apply(lambda x:x.abs().sum()).to_dict("records")

UPDATE 2:
Для вычитания можно сделать так (принимая во внимание, что списков всего два):

res = pd.DataFrame(list_one+list_two).groupby("name", as_index=False)["value"].apply(lambda x:x.iloc[0] - x.iloc[-1]).to_dict("records")


Таймер, без паузы
Я пишу telegram бота на aiogram (Python). Мне нужен секундомер или таймер который будет работать при команде /game. Но при этом не останавливал другие команды например /start. Есть такие модули ? Помогите пожалуйста! Заранее спасибо!
<code>
@bot.message_handler(commands=['start'])
def send_welcome(message):
  bot.send_message(message.chat.id, 'Привет')

@bot.message_handler(commands=['game'])
def send_game(message):
  for q in range(60):
    time.sleep(1)
    i += 1
    if i == 10:
      await bot.send_message(message.chat.id, 'Осталось 30 секунд')

</code>

Вот ответ:
<code>
import asyncio

@bot.message_handler(commands=['start'])
async def send_welcome(message):
    await bot.send_message(message.chat.id, 'Привет')

@bot.message_handler(commands=['game'])
async def send_game(message):
    i = 0
    for q in range(60):
        await asyncio.sleep(1)
        i += 1
        if i == 10:
            await bot.send_message(message.chat.id, 'Осталось 30 секунд')
</code>


Как проверить возрастание цифр в числе? [закрыт]

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

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

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

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

Все числа из последовательности, которые составлены из цифр, идущих
по возрастанию необходимо перевернуть и вывести на экран.
Пример. Вход: 4 87 129 33 45 Выход: 921 54.

Предлагаю такой вариант.
<code>
def increases(number):
    flag = True
    for i in range(1, len(number)):
        if not number[i] > number[i-1]:
            flag = False
            break
    return flag and len(number) >= 2

lst = input().split()
new_lst = []
for num in lst:
    if increases(num):
        new_lst.append(num[::-1])
print(*new_lst)
</code>


Помогите решить 4-ую задачу из Проекта Эйлера
Задача звучит так:

"Число-палиндром с обеих сторон (справа налево и слева направо) читается одинаково. Самое большое число-палиндром, полученное умножением двух двузначных чисел – 9009 = 91 × 99.
Найдите самый большой палиндром, полученный умножением двух трехзначных чисел."

def up(x, y):
    if y == 999:
        x += 1
        return x, y
    else:
        y += 1
        return x, y
def four(x, y):
    while x != 1000:
        num = str(x*y)
        if num == num[::-1]:
            guess = num
            x, y = up(x, y)
            print(guess)
        else:
            x, y = up(x, y)
    return guess
print(four(100, 100))

Выдает ошибку "local variable 'guess' referenced before assignment", хотя если уменьшить передаваемое значение при вызове функции до десяти всё работает как надо.

print(four(10, 10)) #вот так вот

Я так и не смог понять почему в первом случае работает, а во втором нет.

При вызове
four(100, 100) функция не находит ни одного кандидата в ответы, а в этой ситуации код не определяет переменную
guess и возникает ошибка в операторе
return guess.
Распечатка пар
x * y показывает что перебираются пары вида
100 * y и вида
x * 999:

100 * 100
100 * 101
...
100 * 998
100 * 999
101 * 999
102 * 999
...
998 * 999
999 * 999

Среди этих пар нет нужной.


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

dict = {'a':'abc', 'b':'def', 'c':'ghi'}

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

def reverse(k, v):
    for k, v in dict.items():
        dict[v] = k
reverse("b", "def")
print(dictionary)

Получаю такую ошибку:
RuntimeError: dictionary changed size during iteration

dict1 = {'a':'abc', 'b':'def', 'c':'ghi'}
dict2 = {v: k for k, v in dict1.items()}
print(dict2)

Можно даже так:

dict1 = {'a':'abc', 'b':'def', 'c':'ghi'}
dict1 = {v: k for k, v in dict1.items()}
print(dict1)


Смена изображения на нажатие кнопки
Помогите, пожалуйста. Использую изображения вместо кнопки, которая реализована через
Label. Как сделать эффект клика, чтобы при нажатии кнопки первое изображение менялось на второе, и при отпускании кнопки оно возвращалось к первому? На данный момент в
def происходит смена изображения и дальше кнопка зависает нажатой (второе изображение) и не нажимается.

import random
import textwrap
import tkinter as tk
from PIL import ImageTk, Image
from tkinter import messagebox

list = ['Text1', 'Text2', 'Text3']

def self(output):
    text = random.choice(list)
    msg = textwrap.fill(text, width=38)
    canvas.itemconfigure(id, text=msg)
    button2 = tk.Label(canvas, image=button_active)
    canvas.create_window(145, 47, width=130, height=60, anchor="nw", window=button2)

def on_closing():
    if messagebox.askokcancel('Выход из приложения', 'Хотите выйти из приложения?'):
        root.destroy()

path = 'background.jpg'

root = tk.Tk()
root.protocol("WM_DELETE_WINDOW", on_closing)
root.title('name')
root.iconbitmap('icon.ico')
root.resizable(0, 0)
root.wm_attributes('-topmost', 1)
image = Image.open(path)
width = 420
height = 240
image = image.resize((width, height), Image.ANTIALIAS)
image = ImageTk.PhotoImage(image)
button_image = ImageTk.PhotoImage(file='btn.png')
button_active = ImageTk.PhotoImage(file='btn_a.png')

canvas = tk.Canvas(root, width=width, height=height)
canvas.pack(side="top", fill="both", expand="no")
canvas.create_image(0, 0, anchor="nw", image=image)

button = tk.Label(canvas, image=button_image)
button.bind('<Button-1>', self)

id = canvas.create_text(210, 175, text="", font='Georgia 14', justify='center')
canvas.create_window(145, 47, width=130, height=60, anchor="nw", window=button)

root.mainloop()

Вы в функции def self(output): создаёте метку button2 поверх метки button, поэтому она и перестает работать. Вам надо просто сменить изображение в метке командой button.config(image=button_active). Для возвращения изображения, нужно добавить обработчик события отпускания кнопки мыши button.bind(
'<ButtonRelease-1>', selfrel)  и добавить функцию def selfrel(event): которая вернет изображение обратно button.config(image=button_image).


Ввод данных в Python (в решении задачи) [закрыт]

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

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

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

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

Не соображу как это реализовать в коде:
"Формат входных данных
В первой строке задано целое число n - число пар строк в тесте (1 < n < 100).
В следующих 3n строках содержатся описания пар строк. Каждое описание состоит из трех последовательных строк. В первой строке каждого описания дана длина строк m_i (1 < m_i < 100), затем в следующих двух строках записаны строки  s_i, t_i длины m_i, состоящие из строчных латинских букв."

что-то вроде этого?

lis = []
n = int(input())
for i in range(n):
    b = []
    b.append(int(input()))
    b.append(input())
    b.append(input())
    lis.append(b)
print(lis)

После этого можно обратиться к данным через
lis[k][i], где k - номер пары строки, i - тип данных. При i = 0, Вы получите m_i от k-той пары; при 1 - s_i ; при 2 - t_i.


бот не выводит информацию из бд python telegram
вот кусок кода не могу найти проблему.ПОМОГИТЕ!!!
<code>
if message.text=="скидки":
   connect = sqlite3.connect('bdBot.db')
    #вывод из базы данных
   cursorObj = connect.cursor()
   cursorObj.execute("SELECT * FROM skidka_tabl")
   rows = cursorObj.fetchall()

   messege_str=""
   i=0
   while i<5:
     messege_str += f"rows\n"
   bot.send_message(message.chat.id,messege_str, reply_markup = markup)
</code>

Зачем вам:

 i=0
 while i<5:

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

time.sleep(время в секундах)
а решение очень простое уберите эту часть кода(указанна выше)


Сбор информации по json импорт в csv [закрыт]

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

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

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

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

Есть такого рода json

{
    "version": 2,
    "states": {
        "A область": {
            "enabled": false,
            "type:": "state",
            "districts": {
                "A район": {
                    "enabled": false,
                    "type": "district",
                    "enabled_at": null,
                    "disabled_at": null
                },
                "B район": {
                    "enabled": false,
                    "type": "district",
                    "enabled_at": null,
                    "disabled_at": null
                },
                "C район": {
                    "enabled": false,
                    "type": "district",
                    "enabled_at": null,
                    "disabled_at": null
                },

            },
            "enabled_at": null,
            "disabled_at": "2022-03-27T19:56:37+00:00"
        },
        "B область": {
            "enabled": false,
            "type:": "state",
            "districts": {
                "A район": {
                    "enabled": false,
                    "type": "district",
                    "enabled_at": null,
                    "disabled_at": null
                },
                "B район": {
                    "enabled": false,
                    "type": "district",
                    "enabled_at": null,
                    "disabled_at": null
                },
                "C район": {
                    "enabled": false,
                    "type": "district",
                    "enabled_at": null,
                    "disabled_at": null
                },

            },
            "enabled_at": null,
            "disabled_at": "2022-03-27T19:56:37+00:00"
        },

нужно пробежаться по файлу и перенести информацию в
csv файл

(states,type,districts,enabled,enabled_at,disabled_at)

буду очень признателен если поможете с циклом сбора информации. Спасибо

    with open(path, 'r') as f:
        data = json.loads(f.read())
        print(data["states"])
        States = data["states"]
        States = States.keys()
        for state in States:
            list_states.append(state)
            for i in data["states"]:
                State = i
                for x in data["states"][i]:
                    Alert = x.get("enabled")
                    Type = x.get("type")
                    Enabled_at = x.get("enabled_at")
                    Disabled_at = x.get("disabled_at")
                    list_all_states.append(
                        {
                            "State": State,
                            "Alert": Alert,
                            "Type": Type,
                            "Enabled_at": Enabled_at,
                            "Disabled_at": Disabled_at
                        }
                    )

я пытался сделать след образом, но выдает такого рода ошибку

    Alert = x.get("enabled")
AttributeError: 'str' object has no attribute 'get'

for x in data["states"][i]:

Этот цикл не нужен, он выдаёт ключи словаря, к которым вы там ниже всё-равно вручную обращаетесь. Можно починить так:

x = data["states"][i]

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


Ошибка Python (pygame)

import time
from pygame import mixer
import pygame
import pyglet
from tkinter import *
from tkinter import messagebox
import mixer

pygame.mixer.init()
pygame.init()
pygame.mixer.music.set_volume(100)

mixer.music.load('D:\Programs\games\Python\Projects\MEDIA\Sm.ogg')
mixer.music.play(-1)

screen = pygame.display.set_mode((10000, 10000))

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            screen = pygame.display.set_mode((10000, 10000))
            mixer.music.play(-1)

    pygame.display.update()

Текст ошибки:

Traceback (most recent call last):
  File "D:\Programs\games\Python\Projects\PY FILES\StonsV2.py", line 14, in <module>
    mixer.music.load('D:\Programs\games\Python\Projects\MEDIA\Sm.ogg')
AttributeError: module 'mixer' has no attribute 'music'

from pygame import mixer
...
import mixer # <-- mixer из pygame теперь уже не виден как просто mixer

...
mixer.music.load('D:\Programs\games\Python\Projects\MEDIA\Sm.ogg')
mixer.music.play(-1)

Вы последним импортом перекрыли
mixer из
pygame каким-то другим
mixer-ом, в котором видимо нет
music и т.д. Используйте полное имя, начиная с
pygame, как это у вас в коде выше сделано, чтобы питону было понятно, о каком миксере тут речь:

pygame.mixer.music.load('D:\Programs\games\Python\Projects\MEDIA\Sm.ogg')
^^^^^^^
pygame.mixer.music.play(-1)
^^^^^^^


Реализация групп потоков
Есть 5 групп потоков по несколько потоков в группе. Я пытаюсь добиться того, чтобы эти группы работали в цикле.То есть, 1 группа заканчивает работу, потоки убиваются и запускается следующая группа, потом следующая и т.д. и эти группы идут друг за другом.
<code>
import threading

from main import main
from settings import number_of_threads

def multithread(somedata):
    lock = threading.RLock()

    for _ in range(number_of_threads):
        t = threading.Thread(target=main, args=(lock, somedata))
        t.start()

if __name__ == '__main__':

    while True:
        for group in range(1,6)):
            multithread(somedata)
</code>
Я пытаюсь сделать это таким образом, но это работает не так как требуется. Группы не ждут завершения всех предыдущих потоков группы. Как можно реализовать данную идею?

Попробуйте сделать так
<code>
import threading

from main import main
from settings import number_of_threads

def multithread(somedata):
    lock = threading.RLock()
    threading_list = []

    for _ in range(number_of_threads):
        t = threading.Thread(target=main, args=(lock, somedata))
        t.start()
        threading_list.append(t)

    for t in threading_list():
        t.join()

if __name__ == '__main__':

    while True:
        for group in range(1,6):
            multithread(somedata)
</code>


Врятли кто-то остаться переписывать Ваше творчество, но могу дать пару советов:

Используйте списки. Это первое что бросается в глаза. a1,a2,…,a9 - замените одним списком и обращайтесь по индексу вместо цифры в название переменной.

Замените ваши многочисленные if на логичное математическое действие. Вы проверяете: если х1 = 1, то делаете что-то. Но ведь можно просто a[1] += x[1], если реализовать переменные как списки.
Не особо понимаю зачем Вам тут конструкция if. Если она Вам действительно необходима, то используйте elif.

Кажется, это не похоже на какой либо проект. Скорее задача. Стоит ли это упрощать, если оно работает? А вообще советую подучить базовые вещи в python.


Установка модуля в Python
Подскажите, есть ли способ задать установку модуля/библиотеки для Python через код. К примеру, если код запускается на машине, где модуль ещё не установлен, то он сначала устанавливается автоматически при запуске кода.

Я бы посоветовал Вам воспользоваться pyinstaller’ом. Это действительно хорошая вещь, которая компилирует ваш код вместе с дополнительными библиотеками в (.exe). Фишка в том, что для открытия такой программы на другом компьютере не требуется установленный python. Кажется, это именно то, что вам нужно.
А теперь ближе к теме:
<code>
import os
os.system('pip install *библиотека*')
</code>
Но все же советую первый способ!


Как сделать чтобы рандомайзер бесконечно генерировал цифры
Я написал простенький рандомайзер, но после генерирования числа программа завершается. Мне нужно чтобы рандомайзер выдавал новое число на нажатие кнопки enter (тоесть пустую строку - ""). У меня получилось сделать это с помощью return, но в таком случае программа просит заново ввести числа. Заранее спасибо.
<code>

print("Добро пожаловать в randomizer! Выберите опцию:")
print("1 - Случайное число")

num = input()

def random_number():
    first_num = int(input("Введите первое число:"))
    second_num = int(input("Введите второе число:"))
    gennum = random.randint(first_num,second_num)
    print("Число: " + str(gennum))

if num == "1":
    random_number()
else:
    print("Ошибка")

</code>

from random import randint

lower = int(input("Введите первое число: "))
upper = int(input("Введите второе число: "))

while not input('Для продолжения нажмите Enter: '):
    print(randint(lower, upper))


Удаление лишних частей строки по разделителям. Data Frame, pandas
Есть dataframe, в нем столбик "Объем мозга" в котором имеются строковые данные нескольких видов. Нужно убрать то, что находится в скобках, оставить только число без скобок и без тире. Если комбинации ')-' или '-(' не было, то ничего вообще делать не нужно.
При выполнении следующего кода:
<code>
def del_part_str(x):
  l = x.find(')-')
  r = x.rfind('-(')
  x = x[l+2:r]
  return(x)

df['new'] = df['Объем мозга'].apply(del_part_str)
</code>
Там где с двух сторон имеются скобки, получается нужный результат, остается только число которое было без скобок по середине. В других же случаях захватываются и удаляются лишние части.
Исходник:

(850-870?-900-930-935?)-940-(953-1000??)
(750-850-900?)-908
1488.0
1518-(1520)

Результат:

940
90
488
518

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


Почему round не округляет?
Написал такой код для учебы. Но столкнулся с проблемой, что во втором варианте вывода round не работает. В первом работает, а во втором - нет. Почему?

import math

radius = float(input('Введите радиус случайной планеты: '))
v = 4 / 3 * math.pi * radius ** 3
if v > 10.8321 * 10 ** 11:
  answer = round(v / 10.8321 * 10 ** 11, 3)
else:
  answer = round(10.8321 * 10 ** 11 / v, 3)
print('Объём планеты Земля больше в', answer, 'раз')

В таком варианте начало работать:

import math

radius = float(input('Введите радиус случайной планеты: '))
v = 4 / 3 * math.pi * radius ** 3
earth = 10.8321 * 10 ** 11

if v > earth:
  answer = round(v / earth, 3)
else:
  answer = round(earth / v, 3)

print('Объём планеты Земля больше в', answer, 'раз')

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

import math

radius = float(input('Введите радиус случайной планеты: '))
v = 4 / 3 * math.pi * radius ** 3
earth = 10.8321 * 10 ** 11

if v < earth:
  answer = round(earth / v, 3)
  print('Объём планеты Земля больше в', answer, 'раз')
else:
  answer = round(v / earth, 3)
  print('Объём планеты Земля меньше в (1/' + str(round(1/answer, 3)) + ')', answer, 'раз')

Округляет, только вы этого не видите.
Из-за общего формата вывода, и из-за неверных вычислений.
<code>
answer = round(v / (10.8321 * 10 ** 11), 3)
</code>
И логику сообщения (кто больше) надо бы поправить


Как в декораторе в Python определить счетчик другой функции?
Реализую нахождение корней уравнения с одной переменной методом дихотомии. Там суть: отрезок несколько раз делится пополам. Если функция на середине отрезка составляет ноль либо меньше заданной погрешности - корень найден. Иначе деление продолжаем, и за границы отрезка принимается то левый, то правый его "рубежи".
Вывод результатов организовал в функции-обертке, чтобы данный функционал вывода не влиял на расчет времени исполнения главной задачи - поиска корней.
Требуется, кроме прочего, указать количество итераций (сколько раз делили отрезок пополам). Как сделал сейчас (и понимаю сам, что неверно), не получается. Ошибка:

NameError: name 'counter' is not defined

Как быть? Код:
<code>
import numpy as np

def print_dichotomy(dichotomy):
    def wrapper(a,b,n, eps):
        print('Корни по методу дихотомии находятся в точках:')
        print(', '.join(map(lambda x: f'{x:.4f}', res)))
        print('Количество итераций: ', counter)   # ЗДЕСЬ ОШИБКА
    return wrapper

def f(x):
    return 1.2-np.log(x)-4*np.cos(2*x)

@print_dichotomy
def dichotomy (a,b,n, eps): # отрезок от a до b делим на n частей, погрешность eps
    """
    Функция отделения и уточнения корня
    """
    assert a!=0,  'a равно 0'
    assert b!=0, 'b равно 0'

    # сначала отделим корни
    grid=np.linspace(a, b, n)

    # далее уточним корни
    counter=0
    for x,y in zip(grid, grid[1:]):
        if f(x) * f(y) > 0: # если на отрезке нет корня, смотрим следующий
            continue
        root = None
        while ( abs(f(y)-f(x)) )>eps:     # пока отрезок больше заданной погрешности, выполняем нижестоящие операции:
            mid = (y+x)/2                   # получаем середину отрезка
            if f(mid) == 0 or f(mid)<eps:    # если функция в середине отрезка равну нулю или меньше погрешности:
                root = mid                  # корень равен серединному значению
                counter+=1
                break
            elif (f(mid) * f(x)) < 0:       # иначе если произведение функции в середине отрезка на функцию в т. а <0
                y = mid                     # серединой становится точка b
            else:
                x = mid                     #в другом случае - точка а
        if root:
            yield root
</code>

Вы получаете сообщение об ошибке, потому что counter является локальной переменной функции dichotomy. Она существует только внутри области видимости этой функции. Вне этой функции, данная переменная не видна.
И поскольку функция dichotomy не возвращает в результате своей работы наружу значение переменной counter никаким образом, то по завершении работы функции, переменная counter перестает существовать.
Следовательно, нужно переопределить counter таким образом, чтобы она находилась не в локальной, а в глобальной области видимости. Для этого можно использовать инструкцию global внутри функции dichotomy. Это не самое красивое решение, но оно позволит решить поставленную вами задачу. Таким образом, counter становится глобальной переменной, и мы инициализируем ее до вызова функции dichotomy. Теперь мы сможем использовать значение переменной counter после выполнения функции dichotomy.
Второй момент, на который хотел бы обратить внимание - я не увидел, чтобы внутри функции-обертки wrapper вы вызывали передаваемую в нее функцию. По этой причине возникает еще одна ошибка, что переменная res не определена. Вместо нее нужно как раз поместить вызов исходной функции, полученной в параметрах функции print_dichotomy.
В результате сказанного, код может выглядеть следующим образом:
<code>
import numpy as np

def print_dichotomy(func):
    def wrapper(*args, **kwargs):
        print('Корни по методу дихотомии находятся в точках:')
        print(', '.join(map(lambda x: f'{x:.4f}', func(*args, **kwargs))))
        print('Количество итераций: ', counter)

    return wrapper

def f(x):
    return 1.2 - np.log(x) - 4 * np.cos(2 * x)

@print_dichotomy
def dichotomy(a, b, n, eps):  # отрезок от a до b делим на n частей, погрешность eps
    """
    Функция отделения и уточнения корня
    """
    global counter
    assert a != 0, 'a равно 0'
    assert b != 0, 'b равно 0'

    # сначала отделим корни
    grid = np.linspace(a, b, n)

    # далее уточним корни
    for x, y in zip(grid, grid[1:]):
        if f(x) * f(y) > 0:  # если на отрезке нет корня, смотрим следующий
            continue
        root = None
        while (abs(f(y) - f(x))) > eps:  # пока отрезок больше заданной погрешности, выполняем нижестоящие операции:
            mid = (y + x) / 2  # получаем середину отрезка
            if f(mid) == 0 or f(mid) < eps:  # если функция в середине отрезка равну нулю или меньше погрешности:
                root = mid  # корень равен серединному значению
                counter += 1
                break
            elif (f(mid) * f(x)) < 0:  # иначе если произведение функции в середине отрезка на функцию в т. а <0
                y = mid  # серединой становится точка b
            else:
                x = mid  # в другом случае - точка а
        if root:
            yield root

counter = 0
dichotomy(1, 11, 15, 0.01)
</code>


Как с message хендлера перейти в query?
Возник вопрос - как реализовать переход с message хендлера на квери? Концепт следующий - пользователь вводит ФИО, далее message хендлер это обрабатывает, и должен дать сигнал другому хендлеру, что пользователь правильно ввел свое фио, и функция в этом хендлере заносит человека в бд. Если неправильное ФИО - то код возвращается в начало
Код:
<code>
@dp.callback_query_handler(text="vipcount")
async def checkname(query: CallbackQuery):
    keyboard = InlineKeyboardMarkup(row_width=1).add(
        InlineKeyboardButton(text="Назад", callback_data="Купить билет")
    )
    await query.message.answer("Введите свое ФИО")
    await InputData.input_fio.set()

@dp.message_handler(state=InputData.input_fio)
async def process_name(message: types.Message, state: FSMContext):
    print("od")
    keyboard = InlineKeyboardMarkup(row_width=1).add(
        InlineKeyboardButton(text="Продолжить оплату", callback_data="vipfinally"),
        InlineKeyboardButton(text="Назад", callback_data="vipcount")

    )
    global teleid
    global xd
    teleid = message.from_user.id
    xd = message.text
    if xd == "/start":
        return
    print("od")

    await bot.send_message(
        message.chat.id,

        md.text(
            md.text("Проверьте данные"),
            md.text("Ваше имя -", md.bold(xd))
        ),
        parse_mode = ParseMode.MARKDOWN, reply_markup=keyboard
    )
    await InputData.next()

@dp.callback_query_handler(text="Продолжить оплату")
async def vipfin(query: CallbackQuery):
    print("okkkk")
    conn = await aiomysql.connect(host='localhost', port=3306, user='root', password='',
                                  db='aiodb',
                                  loop=loop)
    cur = await conn.cursor()
    sql = "SELECT name FROM users WHERE teleid=(%s)"
    await cur.execute(sql, (teleid))
    row = await cur.fetchone()
    name = xd
    print(row)
    row = row[0]
    print("olk")
    teled = teleid
    start_sql = "UPDATE users set name = (%s) where teleid=(%s)"
    conn = await aiomysql.connect(host='localhost', port=3306, user='root', password='',
                                  db='aiodb',
                                  loop=loop)
    cur = await conn.cursor()
    await cur.execute(start_sql, (name, teled))
    await conn.commit()
</code>

Собственно вам кажись не нужно возвращаться в колбек (кстати это невозможно).
Просто оставьте юзера в том же стейте в котором он вводил фио и в зависимости от введенных данных либо пишите что всё ок и закрываете стейт, либо не трогаете стейт и сообщаете юзеру что он неверно ввел фио.
<code>
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import StatesGroup, State

from data import config

bot = Bot(token=config.BOT_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)

class InputFio(StatesGroup):
    FIO = State()

@dp.message_handler(commands=["start"])
async def start(message: types.Message):
    await message.answer("Введите ФИО")
    await InputFio.FIO.set()

@dp.message_handler(state=InputFio.FIO)
async def get_FIO(message: types.Message, state: FSMContext):
    if message.text == "lalala":
        await state.finish()
        # заносим в бд
        ...
    else:
        await message.answer("неверно! Введите ФИО правильно!")

if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)
</code>


Почему импортируя модуль sys символ "!" переходит на след. строку?
Код:
<code>
import sys

name = sys.stdin.readline()
print('Hi', name + '!')
</code>
Результат (например):
Hi James
!
А мне нужно:
Hi James!
Причём нужно именно с sys, т.к. сейчас изучаю его. Скажите почему восклицательный знак переходит на след. строку, вместо того чтобы оставться на той же. Надеюсь вы поняли, сори я чайник xD.

Можно сделать например так, отредактируйте аргументы rstrip() под свои нужды.
<code>
import sys

name = sys.stdin.readline()
print('Hi', str(name).rstrip('\n') + '!')
</code>


Связь html формы с моделью Django
Есть модель:

class Order(models.Model):

f_name = models.CharField(max_length=20)
l_name = models.CharField(max_length=20)
company = models.CharField(blank=True, max_length=20)
country = models.CharField(max_length=20)
adress = models.CharField(max_length=20)
zip = models.PositiveIntegerField(blank=True)
city = models.CharField(max_length=40)
province = models.CharField(max_length=40)
phone = models.CharField(max_length=15)
email = models.EmailField()

Как сделать форму в шаблоне html, чтобы html проверял правильность ввода?
Код ниже производит проверку на уровне backend'a, у меня в html шаблоне уже есть форма с каждым пунктом по-отдельности, но не могу связать в таком случае с моделью.

   <form action="." method="post" class="order-form">
    {{ form.as_p }}
    <p><input type="submit" value="Place order"></p>
    {% csrf_token %}
</form>

Форма, которая у меня уже есть в html:

    <!-- Checkout -->

    <div class="checkout">
        <div class="container">
            <div class="row">

                <!-- Billing Info -->
                <div class="col-lg-6">
                    <div class="billing checkout_section">
                        <div class="section_title">Billing Address</div>
                        <div class="section_subtitle">Enter your address info</div>
                        <div class="checkout_form_container">
                            <form action="#" id="checkout_form" class="checkout_form">
                                <div class="row">
                                    <div class="col-xl-6">
                                        <!-- Name -->
                                        <label for="checkout_name">First Name*</label>
                                        <input type="text" id="checkout_name" class="checkout_input" required="required">
                                    </div>
                                    <div class="col-xl-6 last_name_col">
                                        <!-- Last Name -->
                                        <label for="checkout_last_name">Last Name*</label>
                                        <input type="text" id="checkout_last_name" class="checkout_input" required="required">
                                    </div>
                                </div>
                                <div>
                                    <!-- Company -->
                                    <label for="checkout_company">Company</label>
                                    <input type="text" id="checkout_company" class="checkout_input">
                                </div>
                                <div>
                                    <!-- Country -->
                                    <label for="checkout_country">Country*</label>
                                    <select name="checkout_country" id="checkout_country" class="dropdown_item_select checkout_input" require="required">
                                        <option></option>
                                        <option>Russia</option>
                                        <option>Belarus</option>
                                        <option>Ukraine</option>
                                        <option>Kazakhstan</option>
                                    </select>
                                </div>
                                <div>
                                    <!-- Address -->
                                    <label for="checkout_address">Address*</label>
                                    <input type="text" id="checkout_address" class="checkout_input" required="required">
                                    <input type="text" id="checkout_address_2" class="checkout_input checkout_address_2" required="required">
                                </div>
                                <div>
                                    <!-- Zipcode -->
                                    <label for="checkout_zipcode">Zipcode*</label>
                                    <input type="text" id="checkout_zipcode" class="checkout_input" required="required">
                                </div>
                                <div>
                                    <!-- City / Town -->
                                    <label for="checkout_city">City/Town*</label>
                                    <input type="text" id="checkout_city" class="checkout_input" required="required">
                                </div>
                                <div>
                                    <!-- Province -->
                                    <label for="checkout_province">Province*</label>
                                    <input type="text" id="checkout_province" class="checkout_input" required="required">
                                </div>
                                <div>
                                    <!-- Phone no -->
                                    <label for="checkout_phone">Phone number*</label>
                                    <input type="phone" id="checkout_phone" class="checkout_input" required="required">
                                </div>
                                <div>
                                    <!-- Email -->
                                    <label for="checkout_email">Email Address*</label>
                                    <input type="email" id="checkout_email" class="checkout_input" required="required">
                                </div>
                                <div class="checkout_extra">
                                    <div>
                                        <input type="checkbox" id="checkbox_terms" name="regular_checkbox" class="regular_checkbox" checked="checked">
                                        <label for="checkbox_terms"><img src="{% static 'frontend/images/check.png' %}" alt=""></label>
                                        <span class="checkbox_title">Terms and conditions</span>
                                    </div>
                                    <div>
                                        <input type="checkbox" id="checkbox_newsletter" name="regular_checkbox" class="regular_checkbox">
                                        <label for="checkbox_newsletter"><img src="{% static 'frontend/images/check.png' %}" alt=""></label>
                                        <span class="checkbox_title">Subscribe to our newsletter</span>
                                    </div>
                                </div>
                            </form>
                        </div>
                    </div>
                </div>

Разобрался.
Все делает банально просто, в классе Meta класса формы можно передавать формам атрибуты html классов, id и т.д.
В итоге forms.py выглядит сейчас так:

class CheckoutForm(forms.ModelForm):
class Meta:
    model = Order
    fields = ['f_name', 'l_name', 'company', 'country', 'adress', 'zip',
              'city', 'province', 'phone', 'email']

    widgets = {
        'f_name': TextInput(attrs={
            'class': 'checkout_input',
            'id': 'checkout_name'

        }),
        'l_name': TextInput(attrs={
            'class': 'checkout_input',
            'id': 'checkout_last_name'

        }),
        'company': TextInput(attrs={
            'class': 'checkout_input',
            'id': 'checkout_company'

        }),
        'country': TextInput(attrs={
            'class': 'checkout_input',
            'id': 'checkout_country'

        }),
### и т.д. каждый пункт модели ####
    }

В html выводил каждый пункт формы по-отдельности:

{{ checkout_form.f_name }}
{{ checkout_form.l_name }}

и т.д.


Отправка сообщений по userid из бд
Всем привет, можете помочь? Пишу на pyTelegramBotAPI, смысл скрипта - пересылать сообщения.
Ошибка:
bot.send_message(chat_info[1], message.text)
TypeError: 'bool' object is not subscriptable
<code>
код main.py:
        chat_info = db.get_active_chat(message.chat.id)
        bot.send_message(chat_info[1], message.text)
код бд:
    def get_active_chat(self, chat_id):
        with self.connection:
            chat = self.cursor.execute("SELECT * FROM chats WHERE chat_one = ?", (chat_id,))
            id_chat = 0
            for row in chat:
                id_chat = row[0]
                chat_info = [row[0], row[2]]
            if id_chat == 0:
                chat = self.cursor.execute("SELECT * FROM chats WHERE chat_one = ?", (chat_id,))
                for row in chat:
                    id_chat = row[0]
                    chat_info = [row[0], row[1]]
                if id_chat == 0:
                    return False
                else:
                    return chat_info
            else:
                return chat_info
</code>
В данный момент бд хранит 3 типа данных - id, user_one, user_two, все они заполнены. Помогите как-то осуществить эту задачу, подсказали что в дазе данных в третьей строке не хватает чего-то...

Заметил у себя ошибку... Во втором условии

if id_chat == 0: chat = self.cursor.execute("SELECT * FROM chats WHERE chat_one = ?", (chat_id,))

Я написал
chat_one = ?, а нужно проверять
chat_two = ?... Всё же спасибо за ответ!


Сортировка, где в качестве ключа список
Мне из БД приходит список записей, у каждой записи свой уникальный id, также есть список id_priority, в котором мы задаем произвольную сортировку этих записей (например, если в списке следующие данные [2,4,1,3], то сначала у нас будет "Запись с id 2", "Запись с id 4",
"Запись с id 1", "Запись с id 3"). Если в списке условно указано 5 ид_шников, а записей пришло 10, то оставшиеся сортируем в алфавитном порядке

records = (
    (1, 'item_1'),
    (2, 'item_2'),
    (3, 'item_3'),
    (4, 'item_4'),
    (5, 'item_5'),
    (6, 'item_6'),
    (7, 'b_item_6'),
    (8, 'a_item_6'),
)

priority = (
    (1, 2),
    (2, 4),
    (3, 1),
    (4, 5),
    (5, 3),
    (6, 6),
)

keys = dict(priority)

indexed = sorted(
    filter(
        lambda x: x[0] in keys, records
    ),
    key=lambda x: keys.get(x[0])
)
others = sorted(
    filter(
        lambda x: x[0] not in keys, records
    ),
    key=lambda x: x[1]
)

sorted_list = [*indexed, *others]

print(*sorted_list, sep='\n')

# (3, 'item_3')
# (1, 'item_1')
# (5, 'item_5')
# (2, 'item_2')
# (4, 'item_4')
# (6, 'item_6')
# (8, 'a_item_6')
# (7, 'b_item_6')


Отправка фото боту и переотправка пользователю | TelegramBot + Aiogram
Как можно осуществить отправку файла(фото) боту?
Этот файл он сохраняет и отправляет пользователю. Если такое возможно - то как?
Использую Aiogram, python
Заранее Спасибо!

Делаете хендлер на фото, а потом в нем, по ВАШЕМУ юзер айди отправляете фото (файл айди).
<code>
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage

from data import config

bot = Bot(token=config.BOT_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)

ADMIN_ID = 1234567

@dp.message_handler(content_types=types.ContentTypes.PHOTO)
async def send_to_admin(message: types.Message):
    await bot.send_photo(chat_id=ADMIN_ID, photo=message.photo[-1].file_id)

if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)
</code>


Как запустить код заново. Я много чего пробовал но ничего не получается .Помогите пожалуйста
<code>
gg = input("Что делаем? (+,-,*,/) :")

a = float( input("Первое число :" ) )
b = float( input("Второе число :" ) )

if gg == "+":
    c = a + b

    import time
    time.sleep(2)

    print( "Результат " + str(c))

    import time
    time.sleep(1)

elif gg == "-":
    c = a - b

    import time
    time.sleep(2)

    print( "Результат " + str(c))

    import time
    time.sleep(1)

elif gg == "*":
    c = a * b

    import time
    time.sleep(2)

    print( "Результат " + str(c))

    import time
    time.sleep(1)

elif gg == "/":
    c = a / b

    import time
    time.sleep(2)

    print( "Результат " + str(c))

    import time
    time.sleep(1)

reset = input ("Запустить калькулятор заново (да,нет) " )

if reset == "да":
  #Нужна помощь Срочно

elif reset == "нет":
  SystemExit(2)
</code>

while True:
   gg = input("Что делаем? (+,-,*,/) :")
   a = float( input("Первое число :" ) )
   b = float( input("Второе число :" ) )

   if gg == "+":
      c = a + b
   elif gg == "-":
      c = a - b
   elif gg == "*":
      c = a * b
   elif gg == "/":
      c = a / b
   print( "Результат", c)

   reset = input ("Запустить калькулятор заново (да,нет) " )
   if reset == "нет":
      break


Как, не зная индекс, заменить произвольные элементы списка?
Одна из задач на обучающем курсе. Дан список:

lst = ['Anthony', 'is', 'complete', 'bastard.]

Требуется заменить элементы 'bastard.' на 'badass.' и вывести всё это дело. Конечно, на ум приходит что-то вроде:

lst[3] = 'badass'
print(lst)

Но что делать в том случае, если мне неизвестен индекс необходимой строки? Можно ли осуществить замену необходимых строк, если известно лишь их содержание?

Пройти по массиву целиком

lst = ['Anthony', 'is', 'complete', 'bastard']
lst = list(map(lambda x: 'badass' if x=='bastard' else x, lst ))
print(lst)

или поискать индексы

lst = ['Anthony', 'is', 'complete', 'bastard']
index = 0
while True:
    try:
        index = lst.index('bastard', index)
    except ValueError:
        break
    lst[index] = 'badass'
print(lst)

или списковые включение

lst = ['Anthony', 'is', 'complete', 'bastard']
lst = [('badass' if x=='bastard' else x) for x in lst ]
print(lst)


Как отправить сообщение конкретному пользователю Бота? | Telegram , Aiogram
Вечер добрый.
Я задался вопросом, как можно прислать сообщение конкретному человеку от Бота (Данный человек писал в лс боту)? Используя aiogram, python.
Пробовал такую штуку:
<code>
await message.reply(owner, 'Хеллоу!')
</code>
Заранее спасибо!


RuntimeWarning: coroutine 'Bot.get_chat_member_count' was never awaited
День добрый господа.
Хотел бы получить кол-во участников в группе Телеграмм, но пишет че-то про коротину,пробовал ЗаГуГлИтЬ - не work. Строго не оценивайте, делаю бота первый раз.
Код:

async def send_user_value(call: types.CallbackQuery):
    all_users = bot.get_chat_member_count(chat_id=chanell)
    await asyncio.sleep(5)
    await call.message.answer(text="Всего пользователей: " + str(all_users))

Что пишет, если запустить:

Всего пользователей: <coroutine object Bot.get_chat_member_count at 0x0000020B43947220>
Полная ошибка:

RuntimeWarning: coroutine 'Bot.get_chat_member_count' was never awaited
  await call.message.answer(text="Всего пользователей: {0}".format(bot.get_chat_member_count(chat_id=chanell)))
RuntimeWarning: Enable tracemalloc to get the object allocation traceback

Как исправить данный вопрос? Заранее, спасибо!

Делай так
<code>
all_users = await bot.get_chat_member_count(chat_id=chanell)
</code>
Так как эта функция является асинхронной то ее нужно await`ить


Как в списке преобразовать все строки, содержащие в себе числа в int (без циклов)?
Допустим, мы имеем такой список, в котором числа могут стоять в любом порядке:
<code>
a = [["Саша", "15", "Яблоко"], ["7", "Игорь"], ["Елена", "71", "984", "Слива"]]
</code>
Как не используя циклы преобразовать все числа в тип данных int? Может есть какая - нибудь библиотека для этого?

a = [["Саша", "15", "Яблоко"], ["7", "Игорь"], ["Елена", "71", "984", "Слива"]]

def try_to_int(val):
    if isinstance(val, list):
        return [*map(try_to_int, val)]
    try:
        return int(val)
    except ValueError:
        pass
    return val

print(try_to_int(a))
# [['Саша', 15, 'Яблоко'], [7, 'Игорь'], ['Елена', 71, 984, 'Слива']]


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

root.update() и
canvas.update() не помогают.

import random
import textwrap
import tkinter as tk
from PIL import ImageTk, Image

list = ["Вариант 1", "Вариант 2"]

path = 'background.jpg'

root = tk.Tk()
root.title('Тест')
root.resizable(height=False, width=False)
image = Image.open(path)
width = 410
height = 220
image = image.resize((width, height), Image.ANTIALIAS)
image = ImageTk.PhotoImage(image)

canvas = tk.Canvas(root, width=width, height=height)
canvas.pack(side="top", fill="both", expand="no")

canvas.create_image(0, 0, anchor="nw", image=image)

canvas.create_text(205, 35, text="Надпись", fill="#082745", font="Verdana 22 bold")

def output():
    text = random.choice(list)
    msg = textwrap.fill(text, width=45)
    canvas.create_text(205, 170, text=msg, font='Georgia', justify='center')

button = tk.Button(root, text='Кнопка', font="Verdana 18 bold", command=output)
canvas.create_window((150, 60), anchor="nw", window=button)

root.mainloop()

Можно создать текстовое поле с пустым полем text в основной программе, а в функции output просто случайным образом менять с помощью itemconfigure текст в этом элементе.
<code>
import random
import textwrap
import tkinter as tk
from PIL import ImageTk, Image

list = ["Вариант 1", "Вариант 2"]

path = 'background.jpg'

root = tk.Tk()
root.title('Тест')
root.resizable(height=False, width=False)
image = Image.open(path)
width = 410
height = 220
image = image.resize((width, height), Image.ANTIALIAS)
image = ImageTk.PhotoImage(image)

canvas = tk.Canvas(root, width=width, height=height)
canvas.pack(side="top", fill="both", expand="no")

canvas.create_image(0, 0, anchor="nw", image=image)

canvas.create_text(205, 35, text="Надпись",
fill="#082745", font="Verdana 22 bold")

def output():
    text = random.choice(list)
    msg = textwrap.fill(text, width=45)
    canvas.itemconfigure(id, text=msg)

button = tk.Button(root, text='Кнопка', font="Verdana
          18 bold", command=output)
id = canvas.create_text(205, 170, text="",
font='Georgia', justify='center')
canvas.create_window((150, 60), anchor="nw",
window=button)

root.mainloop()
</code>


setSizePolicy(self, QSizePolicy): argument 1 has unexpected type 'PySide2.QtWidgets.QSizePolicy'
UI код сделан в QT designer 5.14.1.
Не понимаю в чём проблема.

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

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(1184, 539)
        sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
        MainWindow.setSizePolicy(sizePolicy)
        MainWindow.setStyleSheet(u"background-color: rgb(27, 27, 27);")
        MainWindow.setTabShape(QTabWidget.Rounded)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.Clear = QPushButton(self.centralwidget)
        self.Clear.setObjectName(u"Clear")
        self.Clear.setGeometry(QRect(10, 190, 131, 61))

При запуске выдаёт ошибку:

  File "D:/Python Projects/Calculator/main.py", line 15, in <module>
    window = MainWindow()
  File "D:/Python Projects/Calculator/main.py", line 11, in __init__
    self.setupUi(self)
  File "D:\Python Projects\Calculator\ui_EngCalc.py", line 28, in setupUi
    MainWindow.setSizePolicy(sizePolicy)
TypeError: arguments did not match any overloaded call:
  setSizePolicy(self, QSizePolicy): argument 1 has unexpected type 'PySide2.QtWidgets.QSizePolicy'
  setSizePolicy(self, QSizePolicy.Policy, QSizePolicy.Policy): argument 1 has unexpected type 'PySide2.QtWidgets.QSizePolicy'

Process finished with exit code 1

Код запускаемого файла.

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from ui_EngCalc import Ui_MainWindow

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.setupUi(self)

if __name__ == '__main__':
    app = QApplication([])
    window = MainWindow()
    app.exec_()

Я думаю что проблема в том, что вы используете и PySide2 и PyQt5.
Пусть модуль, который вы создали в  Qt Designer, называется ui_EngCalc.ui
Выполните:

pyuic5 ui_EngCalc.ui -o ui_EngCalc.py -x

и запустите main.py
main.py

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *

from ui_EngCalc import Ui_MainWindow

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.setupUi(self)

if __name__ == '__main__':
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()


Помогите абсолютному новичку [закрыт]

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

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

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

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

Вот код:

with open('1.txt') as f:
    n = int(f.readline())
    for i in range(n):
        a, b = map(int, f.readline().split())
        print(a,b)

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

Traceback (most recent call last):   File "C:/Users/linar/AppData/Local/Programs/Python/Python310/1234.py", line 4, in <module>
    a, b = map(int, f.readline().split()) ValueError: not enough values to unpack (expected 2, got 0)

Сам файл ТХТ:

25
42214 2493
37650 0594
593903 494
93827 4756
204847 94930
438943876 292
3485 239084
42214 2493
37650 0594
593903 494
93827 4756
204847 94930
438943876 292
3485 239084
42214 2493
37650 0594
593903 494
93827 4756
204847 94930
438943876 292
3485 239084
382394 2480932

Как вариант:
<code>
with open('1.txt') as f:
    n = int(f.readline())
    for i in range(n - 3):
        a, b = map(int, f.readline().split())
        print(a, b)
</code>


Как проверку условия "if" на 3 отдельных слова? Python
Я ломаю голову, а в гугле ничего не нахожу казалось бы простой вопрос.
Как проверить условие оператора if на то, имеется ли 3 слова отдельно написанных?
У меня в голове это выглядит так:
ЯП: python
<code>
If [word][word][word] == 3:
   условие
</code>
Но я понимаю что это не так, ведь мне надо чтобы строка имела 3 отдельно написанных слова

Нам нужно разделить строку по пробелу с помощью функции
split и посчитать количество слов в получившемся списке с помощью
len.

text = 'Раз два три'
words = text.split()
if len(words) == 3:
    print('Строка состоит из 3 слов, разделенных пробелом!')


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

x = 3
y = 7
print(id(3))
print(id(7))

получается

1362879447344

1362879447472

Почему такое распределение как будто оно сразу для
4 5 6 выделило память?

Распределение такое потому что оно действительно выделило память для 4, 5 и 6 заранее.
Питон кеширует маленькие целые числа чтобы в вычислениях они занимали меньше места. Числа в Питоне - объекты, каждая арифметическая операция порождает новый объект. За одним исключением: если число мало, то это будет проверено и вместо создания нового объекта будет взят объект из кеша. Кеш заполняется на старте интерпретатора.
Документация.
Исходный код.
Оба выражения равны десять. У них одинаковые
id, так как десятка в кеше:

@>>> id(9 + 1)
140364789449232
@>>> id(11 - 1)
140364789449232

Оба выражения равны тысяче. У них разные
id, так как тысячи в кеше нет. Каждая новая вычисленная тысяча - новый объект:

@>>> id(1001 - 1)
140364769497712
@>>> id(999 + 1)
140364769498320

Ещё одна демонстрация:

ids1 = {i: id(i) for i in range(-1000, 1001)}
ids2 = {i: id(i) for i in range(-1000, 1001)}

for n in (-6, -5, 256, 257):
    print(n, ids1[n] == ids2[n])

$ python in_cache.py
-6 False
-5 True
256 True
257 False


VS Code не видит интерпретатор Python
Несколько недель борюсь с проблемой, Visual Studio Code не видит интерпретатор Python. Пробовал на версиях 3.10.1 и 3.8.3. Но думаю, дело не в python вообще, т.к VS 2019, Atom работают исправно. Но после запуска VS Code, расширение Python выдаёт ошибку, и говорит что Python не установлен, и нужно его установить. Я пытался вручную указывать пути к интерпретатору, но это не помогает. В Выходных данных/output VS Code пишет:
No python is installed or a refresh has not already been triggered.. Проблема решается переустановкой VS Code, но к сожалению, через 2-3 запуска программы, начинается тоже самое. До этого работал в VS Code несколько месяцев, всё было хорошо, но ни с того, ни с чего началась эта проблема. Просто на ровном месте, ничего не обновляя.

Эта ошибка решилась также, как и появилась - сама по себе. Незнаю в чем было дело, но буквально дня 2 назад, все встало на свои места. Но возможно, помогло то, что после переустановки vs code, я отключил автообновления в программе. Сейчас на версии 1.63.0 все нормально работает, и нет проблем.
P.S. Ох уж эти автообновы, любят что-то обновлять на не стабильную версию, а ты потом сиди гадай что не так, ты же даже ничего не обновлял.


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

Предполагаю что ошибка тут.

Потому что надо не
margin-top, а
marginTop.


Python декодинг из powershell
Подскажите как получить текст на русском, есть код , берёт информацию из AD
<code>
def name(self, name):
    command_cdsid = subprocess.Popen(['powershell',
                                f"Get-ADUser -identity '{name}' -properties Name | ft Name"],
                               stdout=subprocess.PIPE, text=True)

    out_cds = command_cdsid.stdout.read()
</code>
Вместо русского языка выходят символы

Получилось
<code>
def cdsid_name(self, name):

    ping_res = Popen(['powershell', f"Get-ADUser -identity '{name}' -properties Name | ft Name", ], shell=True, stdout=PIPE, stderr=STDOUT)
    text = ''
    for line in ping_res.stdout.readlines():
        text += line.decode('cp866')
</code>


Как переписать этот кусок кода на Python
Есть обычный вложенный цикл на JavaScript:
<code>
  for (let i = 0; i < numbers.length - k + 1; i++) {
    let summa = 0
    for (let j = i; j < i + k; j++) {
      summa += numbers[j]
    }
</code>
Как его переписать на Python?

В питоне внутренний цикл вообще не нужен, можно использовать встроенную функцию
sum и срезы:

for i in range(len(numbers) - k):
    summa = sum(numbers[i:i+k])


Как добавить первую часть строк не переводя их
У меня есть код:
<code>
from googletrans import *
translator = Translator()
zapros = input('Введите название файла с расширением (пр. example.lang): ')
with open(zapros,encoding='utf-8') as file:
    lines = [line.rstrip().split('=')[1] for line in file if '=' in line]
result = translator.translate(lines, src='en', dest='ru')
for i in result: print(i.text)
</code>
Тут в выходе из файла печатается только 2 часть и переводится, но нужно, чтобы первая часть также печаталась, но не переводилась.

<code>
from googletrans import *
translator = Translator()
zapros = input('Введите название файла с расширением (пр. example.lang): ')
with open(zapros, encoding='utf-8', mode='r') as file:
    lines = [line.rstrip().split('=') for line in file if '=' in line]

for i in lines:
    i[-1] = translator.translate(i[-1], src='en', dest='ru').text
    print('='.join(i))
</code>
Попробуй так, разбиваем по знаку "=" и последний элемент списка переводим


Сравнение значения ячеек гугл таблицы с помощью gspread
Ребята, небольшой вопрос по gspread, как мне сравнивать значения ячеек? Вот я получил значения

        demping = []

        #получение значений ячейки

        #Имя товара
        named_list = sheet_instance.get('A1:A15')

        #Эталонная цена товара РРЦ
        sheet_instance_MTI = sheet_instance.get('B1:B15')

        #Цена товара на сайте партнера
        sheet_instance_our_company = sheet_instance.get('D1:D15')

И теперь я попытался в цикле сравнить значения ячеек, и несоответствиями заполнить список
demping

#цикл сравнения значений ячейки

        #Если цена на сайте партнера меньше чем эталонная цена товара, заносим первую цену в список
        for i in range(1, 15):

         if sheet_instance_MTI(f"B{i}") < sheet_instance_our_company(f'D{i}'):

            #if sheet_instance_MTI(i) < sheet_instance_our_company(i): так тоже не работает

            demping.append(named_list(f'A{i}'))
            print(demping)

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

Окей, я разобрался в чем проблема, дело в том что я мог брать по одной ячейки, а не сравнивать диапазон ячеек, используя вот такой цикл все получилось
<code>
 for i in range(3,15):

         if sheet_instance.acell(f'B{i}').value > sheet_instance.acell(f'D{i}').value:
            print(sheet_instance.get(f'A{i}'))
            #if sheet_instance_MTI(i) < sheet_instance_our_company(i): так тоже не работает

            demping.append(sheet_instance.get(f'A{i}'))
        print(demping)
</code>


Ошибка в программе-переводчике [закрыт]

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

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

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

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

Сделал программу исправил одну ошибку, появилась другая:

from googletrans import *
translator = Translator()
zapros = input('Введите название файла с расширением (пр. example.lang): ')
with open(zapros,encoding='utf-8') as file:
    lines = [line.rstrip().split('=')[1] for line in file if '=' in line]
result = translator.translate(lines, src='en', dest='ru')
result.text

а вот ошибка

  File "c:\Users\kiolk\OneDrive\Рабочий стол\Python\ModsTranslatorMinecraft\ModsTranslatorMinecraft.py", line 7, in <module>
    result.text
AttributeError: 'list' object has no attribute 'text'

В result лежит список, у списка нету метода text
Попробуй вывести result в консоль и посмотри что там
Ну вот, получился список объектов, и у каждого элемента будет метод text
<code>
for i in result:
    print(i.text)
</code>


Добавить пробелы в адресах
Подскажите пожалуйста регулярное выражение для установки пробелов в слитных адресах.
Что есть:

pr.Lunacharskogo11k1_lit
Stachek47A
Industrialnyj26k24

Что нужно получить:

pr.Lunacharskogo 11 k1_lit
Stachek 47A
Industrialnyj 26 k24

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

Программно можно так:

str1 = 'pr.Lunacharskogo11k1_lit'
index_word = []
index_digit = []
result_str = ''
for index, character in enumerate(str1):
    if character.isdigit():
        index_digit.append(index)
        try:
            result_str += ' ' + str1[index_word[0]: index_word[-1] + 1]
            index_word = []
        except:
            pass
    else:
        index_word.append(index)
        try:
            result_str += ' ' + str1[index_digit[0]:index_digit[-1] + 1]
            index_digit = []
        except:
            pass
result_str = result_str[1:]
print(result_str)

Выдаст:

pr.Lunacharskog 1


Dataframe выбор большего
Был предыдущий вопрос, на который был дан ответ.
В датафрейме есть неизвестное кол-во столбцов.
Есть столбец res['number'] (это не индекс). Есть остальные.
В каждой строке значения.
Как построчно получить ответ на вопрос - какое название столбца в каждой строке соответствует самой большому значению в строке.

['number'] ['a'] ['b'] ['c']
1            5     4.1   3
2            2.4   3     3
3            3     6    6
4            1     4.8   8.7

А итог по строкам так

for i in ...:
    print(...)

    а (т.к. 5 больше 4.1 и 3)
    b (любое - пусть первое т.к. равны)
    b
    c

Ответ:

df = pd.DataFrame([[1, 5, 4.1, 3],
                   [2, 2.4, 3, 3],
                   [3, 3, 6, 6],
                   [4, 1, 4.8, 8.7]
                   ],
                  columns=['number', 'a', 'b', 'c'])
for indexRows in range(df.shape[0]):
    print(df.columns[np.argmax(df.loc[indexRows])])

А как получить тот же результат, если некоторые числа будут в датафрейме
отрицательные, но считаем их за положительные? То есть из 10,2,-5,-11 большее будет -11.

df = pd.DataFrame([[-1, 5, -4.1, -3],
                   [2, -2.4, 3, -3],
                   [3, 3, -6, 6],
                   [4, 1, -4.8, 8.7]
                   ],
                  columns=['number', 'a', 'b', 'c'])

Без циклов
<code>
>>> df.idxmax(axis=1)

0    a
1    b
2    b
3    c
</code>


Python - как переписать генератор списка без zip?
Всем привет. Есть два списка и есть скрипт, который эти списки сравнивает

a=[10,20,30,40,50,60,40,45]
x=[10,50,5,100,15,60]
print([i > j for i, j in zip(a[-len(x):], x)])

Мне нужно переписать его в "привычный формат", но полученный код результат дает неверный. Как мне быть?

a=[10,20,30,40,50,60,40,45]
x=[10,50,5,100,15,60]

for i in range (a[-len(x)]):
    for j in range(len(x)):
        if i>j:
            print('True')
        else:
            print('False')


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

from googletrans import *
translator = Translator()
zapros = input('Введите название файла с расширением (пр. example.lang): ')
file = open(zapros, 'r')
#Здесь код обрезания
result = translator.translate(file, src='en', dest='ru')
print(result1)

а вот и часть файлика для перевода

achievement.xu2.screen=Screen
achievement.xu2.screen.desc=For you viewing pleasure
achievement.xu2.solar.panel=Solar Panel
achievement.xu2.solar.panel.desc=The sun gives power to all!
achievement.xu2.speed.upgrade=Speed Upgrade
achievement.xu2.speed.upgrade.desc=Boosts speed of transfer nodes.
achievement.xu2.spotlight=Spotlight
achievement.xu2.spotlight.desc=Shine light across the world
achievement.xu2.stack.upgrade=Stack Upgrade
achievement.xu2.stack.upgrade.desc=Boosts amount pulled from transfer nodes.
achievement.xu2.sun.crystal=Sun Crystal
achievement.xu2.sun.crystal.desc=Light through walls
achievement.xu2.techtree.start=Tech-Tree Start

После выполения этого кода в
lines будет список значений после
=:

with open(zapros) as file:
    lines = [line.rstrip().split('=')[1] for line in file]


Как удалить имена из списка?
<code>
li = ['Седьмая печать',
'Ингмар Бергман', '5', '1957',
'Остров проклятых',
'Мартин Скорсезе', '4', '2010',
'Земляничная поляна',
'Ингмар Бергман', '5', '1957',
'Час волка',
'Ингмар Бергман', '3', '1968']
</code>
Как удалить каждый 4 элемент списка?

from itertools import cycle, compress

li = [
    'Седьмая печать', 'Ингмар Бергман', '5', '1957',
    'Остров проклятых', 'Мартин Скорсезе', '4', '2010',
    'Земляничная поляна', 'Ингмар Бергман', '5', '1957',
    'Час волка', 'Ингмар Бергман', '3', '1968'
]

new_li = [*compress(li, cycle([True, True, True, False]))]

print(new_li)
# ['Седьмая печать', 'Ингмар Бергман', '5', 'Остров проклятых', 'Мартин Скорсезе', '4', 'Земляничная поляна', 'Ингмар Бергман', '5', 'Час волка', 'Ингмар Бергман', '3']