Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3492 posts.

Python для экспертов » библиотека plotly » Фев. 5, 2025 23:07:35

Здравствуйте.

расскажите, пожадуйста, где используется библиотека plotly?
Можно ли её использовать вне браузера?

Python для экспертов » win32gui.GetPixel возвращает неактуальные цвета » Фев. 4, 2025 18:33:44

Пишу программу на питоне, необходимо считывать цвета пикселей с приложения. Код:
 def getPixel(alt, data):
    try:
        x, y = data
    except TypeError as e:
        print("Error: Wrong x, y data in getPixel")
        return None
    hwnd = alt.hwnd
    # win32gui.InvalidateRect(hwnd, None, True)
    # win32gui.UpdateWindow(hwnd)
    hdc = win32gui.GetDC(hwnd)
    if hdc == 0:
        print("Error: cant get HDC")
    color = None
    try:
        color = win32gui.GetPixel(int(x), int(y))
    except Exception as e:
        print(f"Error, cant get color: {e}")
    win32gui.ReleaseDC(hwnd, hdc)
    color = rgba(color)
    return color

У меня на все работает отлично, у нескольких друзей тоже. Но у остальных код перестает работать. При чем довольно своеобразным образом - нет никаких ошибок, функция возвращает цвет, вот только она не видит актуальные цвета окна. Буд то при запуске запоминается изображение, и вместо актуального цвета возвращается цвет, который был в том месте при запуске.
Возможно связано с виндой, ибо у меня 10, и пока у всех у кого эта проблема появилас - 11.
Как видно с кода, InvalidateRect и UpdateWindow уже пробовал. Так же пробовал через:
 hdc_window = win32gui.GetDC(hwnd)
    hdc_mem = win32ui.CreateDCFromHandle(win32gui.CreateCompatibleDC(hdc_window))
    
    bmp = win32ui.CreateBitmap()
    bmp.CreateCompatibleBitmap(win32ui.CreateDCFromHandle(hdc_window), width, height)
    hdc_mem.SelectObject(bmp)
    
    hdc_mem.BitBlt((0, 0), (width, height), win32ui.CreateDCFromHandle(hdc_window), (0, 0), win32con.SRCCOPY)
    bmp_info = bmp.GetInfo()
    bmp_str = bmp.GetBitmapBits(True)
    img = Image.frombuffer('RGB', (bmp_info['bmWidth'], bmp_info['bmHeight']), bmp_str, 'raw', 'BGRX', 0, 1)
    win32gui.ReleaseDC(hwnd, hdc_window)
    hdc_mem.DeleteDC()
    bmp_handle = bmp.GetHandle()
    win32gui.DeleteObject(bmp_handle)
- результат тот же.
Использовал ImageGrab.grab с Pilow, он видит актуальную картинку, но в отличии от методов выше он не может работать с перекрытым окном, что мне необходимо.
Так же по совету GPT отключил оптимизацию:
 DWM_BLURBEHIND = ctypes.Structure
DWMWA_USE_IMMERSIVE_DARK_MODE = 20  
DWMWA_FORCE_ICONIC_REPRESENTATION = 7
DWMWA_CLOAKED = 14
user32 = ctypes.windll.user32
dwmapi = ctypes.windll.dwmapi
def disable_dcomp(hwnd):
    value = wintypes.BOOL(False)
    dwmapi.DwmSetWindowAttribute(hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE, ctypes.byref(value), ctypes.sizeof(value))
    value = ctypes.c_int(0)  # DirectComposition
    dwmapi.DwmSetWindowAttribute(hwnd, DWMWA_CLOAKED, ctypes.byref(value), ctypes.sizeof(value))
def disableGDI(alt, data):
    DWMWA_FORCE_ICONIC_REPRESENTATION = 7
    DWMWA_CLOAKED = 14
    hwnd = alt.hwnd
    value = ctypes.c_int(0)  # Отключаем DirectComposition
    dwmapi.DwmSetWindowAttribute(hwnd, DWMWA_CLOAKED, ctypes.byref(value), ctypes.sizeof(value))
- помогло только у части пользователей.
Как решить эту проблему, или какую альтернативу посоветуете использовать?

Python для новичков » Есть ли решение на Python, чтобы выбирать уникальные кадры из видео? » Фев. 2, 2025 01:11:29

Здравствуйте.
Нужно получать уникальные кадры (скриншоты) из видео.
Есть ли какое-то решение на Python, чтобы выбирать из видео кадры, которые, например, больше чем на 50% отличаются друг от друга?

Python для новичков » Skyrim and Python » Янв. 31, 2025 03:55:33

Всем привет, недавно меня подцепил снова Skyrim и решил для него написать скриптики на Python. Для начала решил написать скрипт, который будет бегать за меня из точки А в точку Б. Пол дня проебал, дабы выяснить как работать с памятью, искал сами адреса памяти для скайрима через Cheat Engine, потом выяснил, что после перезахода всё адреса памяти меняются. Крч не суть.

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

https://codefile.io/f/mNponpoBxi

https://youtu.be/P0ShVvMUBnY

Python для новичков » Не могу восстановить необходимые пакеты » Янв. 29, 2025 08:04:37

После ряда неудачных попыток задать необходимые версии пакетов по файлу requirements.txt, завершавшихся сообщениям об ошибках (достаточно большой текст темно-красного шрифта), не удается установить пакеты даже без указания версии. Попытки задать версии по requirements проводились в директории piton 3.9 тогда как основная используемая версия 3.12.

Python для новичков » Метод edit_message_text » Янв. 26, 2025 14:28:48

Кто может помочь?
Суть проблемы: У меня есть бот, там есть меню, профиль, статистика и т.д, я когда нажимаю профиль, то я хочу сделать профиль в этом сообщение, чтоб кнопки пропадали и появился профиль с кнопкой назад. А у меня появляется ошибка “Ошибка при редактировании сообщения: A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: there is no text in the message to edit”

Python для новичков » Are you knowledgeable about the complexities of playing Block Blast? » Янв. 23, 2025 05:29:30


Block Blast is a simple yet challenging puzzle game where players must arrange different blocks on an 8x8 grid to form complete rows or columns and earn points.
Commence the game block blast puzzle.
Upon commencing the game, an empty 8x8 grid will be presented, along with many blocks at the bottom of the screen. These blocks are offered in several forms, from simple squares to complex L-shapes.
2. Adjust and relocate blocks
Employ your mouse or finger (if utilizing a touch device) to manipulate the blocks from the bottom of the screen and position them onto the grid. Blocks may be placed anywhere on the grid, as long as they do not overlap or exceed its limits.
3. Complete rows or columns
Your goal is to form complete rows or columns on the grid. Upon completing a row or column, it disappears, leading to the accrual of points. This also frees up space on the grid, facilitating the insertion of new blocks.
4. Continue engaging in play
The game will continue until you deplete the allotted space for inserting further blocks. At that point, the game will end and your score will be recorded. You may start again and strive for a higher score.
Strive to attain the highest score achievable in Block Blast!

Флейм » Приветствую.  » Янв. 21, 2025 10:31:21

Всех приветствую. Сделал небольшой курс по Python на Stepik. Нужны тестировщики на безвозмездной основе. Всех благ. 🥺https://stepik.org/course/223120

Python для новичков » После оптимизации ИИ ошибка » Янв. 18, 2025 14:51:37

Работающая программа
 # From https://www.kaggle.com/code/freacle/part-1
# В исходной статье https://habr.com/ru/articles/869118/
# Очень много кусков программ с объяснениями
import numpy as np
Parameter = None
def ParameterObj():
    class Parameter:
        layers = []
        calling = dict()
        def __init__(self, info):
            Parameter.layers.append(info[0])
            Parameter.calling[info[0]] = info[1:]
    return Parameter
    
class Module:
    def __init__(self):
        self._constructor_Parameter = ParameterObj()
        global Parameter
        Parameter = self._constructor_Parameter
    def forward(self):
        pass
    def __call__(self, x):
        return self.forward(x)
    def parameters(self):
        return self
class Linear:
    def __init__(self, input_channels: int, output_channels: int, bias = True):
        self.input_channels = input_channels
        self.output_channels = output_channels
        self.bias = bias
        self.backward_list = []
        if bias:
            Parameter([self, np.random.uniform(- 0.5, 0.5, size=(self.input_channels, self.output_channels)), np.random.uniform(- 0.5, 0.5, size=self.output_channels)])
        else:
            Parameter([self, np.random.uniform(- 0.5, 0.5, size=(self.input_channels, self.output_channels)), np.zeros(self.output_channels)])
    def __call__(self, x):
        self.x = np.array(x, copy=True)
        result = x @ Parameter.calling[self][0] + Parameter.calling[self][1]
        return result
    def backward(self, input_matrix):
        x_gradient = input_matrix @ self.weight.T
        self.weight_gradient = self.x.T @ input_matrix
        self.bias_gradient = input_matrix.mean(axis=0)
        return x_gradient
class Flatten:
    def __init__(self): 
        pass
    def __call__(self, x):
        return x.reshape(1, -1)
class ReLU:
    def __init__(self): 
        pass
    def __call__(self, x):
        self.x = x
        return np.maximum(0, x)
    def backward(self, input_matrix):
        return (self.x > 0) * input_matrix
        
class Softmax():
    def __init__(self): 
        pass
    def __call__(self, z):
        return np.exp(z) / np.sum(np.exp(z), axis=1).reshape(-1, 1)
class CrossEntropyLoss:
    def __init__(self):
        self.predicted = None
        self.true = None
    def __call__(self, logits, true):
        predicted = np.exp(logits) / np.sum(np.exp(logits), axis=1).reshape(-1, 1) # softmax
        self.predicted = np.array(predicted, copy=True) # сделаем копию входных матрицы для дальнейших вычислений
        self.true = np.array(true, copy=True) # сделаем копию входных матрицы для дальнейших вычислений
        number_of_classes = predicted.shape[1] # получим количество классов, в нашем случае 2
        self.true = np.array(true, copy=True)
        # вычисляем значение лосс-функции прямо по формуле
        self.loss = -1 * np.sum(true * np.log(predicted + 1e-5), axis=1)
        
        return self
        
    def backward(self):
        loss = self.predicted - self.true
		# Итерируем по каждому слою в обратном порәдке, благодаря тому, что мы всё сохранили в Parameter.layers
        for index, layer in enumerate(Parameter.layers[::-1]):
            if type(layer).__name__ == 'Linear':
                changes_w = (layer.x.T @ loss) / loss.shape[0]
                # нормировка на loss.shape[0] нужна, так как величина изменений зависит от размера батча
                if layer.bias:
                    changes_b = (np.sum(loss) / loss.shape[0])
                else:
                    changes_b = 0
                layer.backward_list = [changes_w, changes_b]
			    # Cчитаем градиент для следующих слоев
                loss = loss @ Parameter.calling[layer][0].T
                
            elif type(layer).__name__ == 'ReLU':
                loss = layer.backward(loss)
class SGD:
    def __init__(self, model, learning_rate):
        self.model = model
        self.lr = learning_rate
    def step(self):
        for index, layer in enumerate(self.model._constructor_Parameter.layers[::-1]):
            if type(layer).__name__  == 'Linear':
                weight, bias = self.model._constructor_Parameter.calling[layer]
                weight_gradient, bias_gradient = layer.backward_list[0], layer.backward_list[1]
                self.model._constructor_Parameter.calling[layer] = [weight - lr * weight_gradient, bias - lr * bias_gradient] 
            
class SimpleNet(Module):
    def __init__(self):
        super().__init__()
        self.linear1 = Linear(input_channels=25, output_channels=10, bias=True)
        self.linear2 = Linear(input_channels=10, output_channels=2, bias=True)
        self.flatten = Flatten()
        self.relu = ReLU()
        self.softmax = Softmax()
    def forward(self, x):
        x_1 = self.flatten(x)
        x_2 = self.linear1(x_1)
        x_3 = self.relu(x_2)
        x_4 = self.linear2(x_3)
        return x_4
input_x = np.array([[ 0.99197708, -0.77980023, -0.8391331 , -0.41970686,  0.72636492],
       [ 0.85901409, -0.22374584, -1.95850625, -0.81685145,  0.96359871],
       [-0.42707937, -0.50053309,  0.34049477,  0.62106931, -0.76039365],
       [ 0.34206742,  2.15131285,  0.80851759,  0.28673013,  0.84706839],
       [-1.70231094,  0.36473216,  0.33631525, -0.92515589, -2.57602677]])
target_x = np.array([[1, 0]])
loss_fn = CrossEntropyLoss()
model = SimpleNet()
optim = SGD(model.parameters(), learning_rate = 0.01)
for i in range(100):
    output = model(input_x)
    loss = loss_fn(output, target_x)
    loss.backward()
    lr = 0.01
    optim.step()
    if (i % 20) == 0:
        print(loss.loss, i)
С целью сокращения была доверена ИИ для оптимизации. После выкидывания ИИ всех комментарием и нескольких изменений, текст был получен без окончания, содержащего использование.
 import numpy as np
class Parameter:
    layers = []
    calling = {}
    def __init__(self, info):
        self.layers.append(info[0])
        self.calling[info[0]] = info[1:]
class Module:
    def __init__(self):
        self.Parameter = Parameter
    
    def forward(self):
        pass
    def __call__(self, x):
        return self.forward(x)
    def parameters(self):
        return self
class Linear(Module):
    def __init__(self, input_channels: int, output_channels: int, bias=True):
        self.input_channels = input_channels
        self.output_channels = output_channels
        self.bias = bias
        self.backward_list = []
        if bias:
            self.Parameter([self, np.random.uniform(-0.5, 0.5, size=(input_channels, output_channels)), np.random.uniform(-0.5, 0.5, size=output_channels)])
        else:
            self.Parameter([self, np.random.uniform(-0.5, 0.5, size=(input_channels, output_channels)), np.zeros(output_channels)])
    def __call__(self, x):
        self.x = np.array(x, copy=True)
        result = x @ self.Parameter.calling[self][0] + self.Parameter.calling[self][1]
        return result
    def backward(self, input_matrix):
        x_gradient = input_matrix @ self.Parameter.calling[self][0].T
        self.backward_list = [input_matrix.T @ self.x, input_matrix.mean(axis=0)]
        return x_gradient
class Flatten(Module):
    def __call__(self, x):
        return x.reshape(x.shape[0], -1)
class ReLU(Module):
    def __call__(self, x):
        self.x = x
        return np.maximum(0, x)
    def backward(self, input_matrix):
        return (self.x > 0) * input_matrix
class Softmax(Module):
    def __call__(self, z):
        exp_z = np.exp(z)
        return exp_z / exp_z.sum(axis=1, keepdims=True)
class CrossEntropyLoss(Module):
    def __call__(self, logits, true):
        self.predicted = self.Softmax()(logits)
        self.true = np.array(true, copy=True)
        self.loss = -np.sum(true * np.log(self.predicted + 1e-5), axis=1)
        return self
    def backward(self):
        loss = self.predicted - self.true
        for layer in self.Parameter.layers[::-1]:
            if isinstance(layer, Linear):
                layer.backward_list[0] = (layer.x.T @ loss) / loss.shape[0]
                if layer.bias:
                    layer.backward_list[1] = np.sum(loss, axis=0) / loss.shape[0]
                loss = loss @ layer.Parameter.calling[layer][0].T
            elif isinstance(layer, ReLU):
                loss = layer.backward(loss)
class SGD:
    def __init__(self, model, learning_rate):
        self.model = model
        self.lr = learning_rate
    def step(self):
        for layer in self.model.Parameter.layers[::-1]:
            if isinstance(layer, Linear):
                weight, bias = layer.Parameter.calling[layer]
                weight_gradient, bias_gradient = layer.backward_list
                layer.Parameter.calling[layer] = [weight - self.lr * weight_gradient, bias - self.lr * bias_gradient]
class SimpleNet(Module):
    def __init__(self):
        super().__init__()
        self.linear1 = Linear(input_channels=25, output_channels=10, bias=True)
        self.linear2 = Linear(input_channels=10, output_channels=2, bias=True)
        self.flatten = Flatten()
        self.relu = ReLU()
        self.softmax = Softmax()
    def forward(self, x):
        x_1 = self.flatten(x)
        x_2 = self.linear1(x_1)
        x_3 = self.relu(x_2)
        x_4 = self.linear2(x_3)
        return x_4
input_x = np.array([[ 0.99197708, -0.77980023, -0.8391331 , -0.41970686,  0.72636492],
       [ 0.85901409, -0.22374584, -1.95850625, -0.81685145,  0.96359871],
       [-0.42707937, -0.50053309,  0.34049477,  0.62106931, -0.76039365],
       [ 0.34206742,  2.15131285,  0.80851759,  0.28673013,  0.84706839],
       [-1.70231094,  0.36473216,  0.33631525, -0.92515589, -2.57602677]])
target_x = np.array([[1, 0]])
loss_fn = CrossEntropyLoss()
model = SimpleNet()
optim = SGD(model.parameters(), learning_rate = 0.01)
for i in range(100):
    output = model(input_x)
    loss = loss_fn(output, target_x)
    loss.backward()
    lr = 0.01
    optim.step()
    if (i % 20) == 0:
        print(loss.loss, i)	
	
Текст без окончания проходил без ошибок, но и без выдачи результатов. Добавление прежнего окончания привело к ошибкам.

Python для новичков » Определить используется ли в данный момент диалоговое окно » Янв. 2, 2025 16:51:06

Код определяет запущен ли в данный момент указанный процесс:
 import psutil
def check_python_program(program_name):
    for proc in psutil.process_iter():
        try:
            if proc.name() == program_name:
                return True
        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
            pass
    return False
if check_python_program("msedge.exe"):
    print("Программа запущена.")
else:
    print("Программа не запущена.")
Процесс ‘микрософт едж’ всегда запущен в фоне, получится определить используется в данный момент окно браузера или нет?

Python для новичков » Не могу пометить узлы, добавляемые в цикле » Янв. 2, 2025 12:40:29

Пытаюсь создать сеть с возможностью гибкого изменения ее параметров: количества слоев, узлов в слоях и положения узлов на рисунке.
Основная часть программы
 n_nd = 1
for i_l in range(n_lines):
    for i_n in range(n_nods[i_l]):
        G.add_node(1,label=str(n_nd))
        n_nd += 1
        G.add_edge(i_l,i_n)
        pos = {n_nd:(i_l,i_n) }
nx.draw(G,with_label=True)
В таком виде nx.draw считается ошибкой:
“ Traceback (most recent call last):
File ”c:\Users\frost\Net\Net.py“, line 22, in <module>
nx.draw(G,with_label=True)
File ”C:\Users\frost\AppData\Local\Programs\Python\Python312\Lib\site-packages
\networkx\drawing\nx_pylab.py“, line 126, in draw
draw_networkx(G, pos=pos, ax=ax, **kwds)
File ”C:\Users\frost\AppData\Local\Programs\Python\Python312\Lib\site-packages
\networkx\drawing\nx_pylab.py“, line 305, in draw_networkx
raise ValueError(f”Received invalid argument(s): {invalid_args}“)
ValueError: Received invalid argument(s): with_label ”
Линия 22 это draw
При использовании nx.draw(G) все рисуется.

Python для новичков » Inline кнопки в TG. Что делаю не так? » Дек. 27, 2024 10:30:50

Приветствую! Пытаюсь создать меня чтобы при нажатии кнопки провалиться в следующее меню. При нажатии на кнопку “Веб сайты” я не перехожу в следующее меню. В чём ошибка?


import telebot
from telebot import types

bot = telebot.TeleBot(“***”)

@bot.message_handler(commands= ) *тут всё норм, почему то не отображается *
def start(message):
markup = types.InlineKeyboardMarkup()
btn1 = types.InlineKeyboardButton(“Веб сайты”, callback_data=“sites”)
btn2 = types.InlineKeyboardButton(“Игры”, callback_data=“games”)
btn3 = types.InlineKeyboardButton(“Приложения ”, callback_data=“apps”)
markup.row(btn1, btn2, btn3)
bot.send_message(message.chat.id, “Привет! Это бот для языка программирования.\n\nВыберите какое направление вас интересует”, reply_markup=markup)
#await message.answer(“Привет! Это бот для подбора языка программирования.\n\nВыберите какое направление вас интересует”)

@bot.callback_query_handler(func=lambda callback:True)
def callback(call):
markup = types.InlineKeyboardMarkup()
if call.data == “start”:
btn1 = types.InlineKeyboardButton(“Веб сайты”, callback_data=“sites”)
btn2 = types.InlineKeyboardButton(“Игры”, callback_data=“games”)
btn3 = types.InlineKeyboardButton(“Приложения ”, callback_data=“apps”)
markup.row(btn1, btn2, btn3)
bot_send_message_edit_text(“Привет! Это бот для языка программирования.\n\nВыберите какое направление вас интересует”, reply_markup=markup)
#bot.send_message(message.chat.id, “Привет! Это бот для подбора языка программирования”, reply_markup=markup)
elif call.data == ‘sites’:
btn1 = types.InlineKeyboardButton('Большие сайты', callback_data='sites-big')
btn2 = types.InlineKeyboardButton('Маленькие', callback_data='sites-small')
btn3 = types.InlineKeyboardButton('Назад', callback_data='start')
markup.add(btn1, btn2, btn3)
bot.send_message_edit_text(“Привет! Это бот для языка программирования.\n\nВыберите какое направление вас интересует”, callback_data=start)

#bot.send_message(message.chat.id, “Привет”, reply_markup=markup)
#reply_markup=markup1


bot.polling(none_stop=True)

Флейм » Мощные и доступные виртуальные (VPS/VDS) во всех точках мира » Ноя. 22, 2024 08:41:19




Мы выходим из тени

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

Почему стоит выбрать нас

- Аренда серверов по всему миру!
- Самые мощные процессоры: AMD Ryzen 9 7950X3D.
- Лучшая защита от DDoS атак: По всему миру. AntiDDoS-защита на всех серверах.
- Быстрейшие серверы: Высокая производительность и надежность.
- Стабильный коннект: К любой точке мира.
- Быстрая активация: В течение 60 секунд после оплаты.
- Круглосуточная поддержка: 24/7/365. Поможем с установкой и настройкой ПО, решим почти любую проблему.
- Индивидуальный подход: К каждому клиенту индивидуальные условия, все можно обсудить через систему тикетов.
- Удобный личный кабинет: Большое количество платёжных методов, современный интерфейс и лёгкое управление услугами.
- Бонусы и проработанная реферальная программа!

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

- Интернет-порт: До 10 Гбит/с в Москве и в Европе.
- Локации VPS: Австрия, Арабские Эмираты, Армения, Бельгия, Бразилия, Великобритания, Германия, Гонконг, Греция, Дания, Ирландия, Испания, Италия, Канада, Латвия, Литва, Македония, Нидерланды, Норвегия, Польша, Португалия, Россия, США, Турция, Украина, Финляндия, Франция, Хорватия, Швейцария, Швеция, Эстония, Япония и другие
- Операционные системы: Windows10, Windows Server 2012/2016/2019/2022, Debian, CentOS, Ubuntu и любую другую из своего ISO-образа.

- Цены:
- Стандартные VPS/VDS от 600р/мес.
- Hi-CPU серверы от 900р/мес.

- Способы оплаты:
- Банковские карты и СБП (Visa/Mastercard/Мир и другие).
- Криптовалюта (Bitcoin, Litecoin, Dogecoin, BTC Cash, USDT и другие).
- Электронные кошельки (ЮMoney, QIWI, PerfectMoney и другие).

Список всех тарифов и автоматический заказ на сайте: plexus.host

Присоединяйтесь к нам и наслаждайтесь качественными услугами!

Базы данных » Помощь с прасингом сайта » Ноя. 17, 2024 21:59:14

Всем доброго времени дня и ночи, очень нужно спарсить данные одного из телграмм каталогов (tg каналы, а еще желательно даты регистрации/добавления их на сайт) https://tg-cat.com Буду безумно благодаерен любой помощи

Python для новичков » Юрий » Ноя. 17, 2024 13:17:18

подскажите материалы, курсы или что то еще для изучение Python с нуля

Python для новичков » Сеть на питон » Окт. 16, 2024 14:37:30

Коллеги добрый день!!!
есть некая простая нейронная сеть(4 входа,1 выход), задача спрогнозировать определенные величины по входным параметрам. Имеется csv файл с данными входными и выходными для обучения.
 import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from tensorflow import keras
from tensorflow.keras import layers
# Создание искусственных данных
data_size = 10000
np.random.seed(42)
# Генерация данных
data = {
    'ti': np.random.randint(0, 24, data_size),  # Вход 1
    'te': np.random.uniform(-30, 50, data_size),  # Вход 2
    'en': np.random.randint(0, 41, data_size),  # Вход 3
    'tem': np.random.uniform(40, 45, data_size),  # Вход 4
    'energy_consumption': None  # Выход
}
# Создание DataFrame
df = pd.DataFrame(data)
# Формирование зависимости: создание искусственных данных для потребления энергии
# На основании простого линейного уравнения с добавлением некоторого шума
df['energy_consumption'] = (
    50 + 20 * df['ti'] + 15 * df['en']
    - 0.5 * df['te '] + 5 * (df['tem'] - 40)
    + np.random.normal(0, 10, data_size)  # добавление случайного шума
)
# Разделение данных на признаки и целевую переменную
X1 = df[['ti', 'te', 'en', 'tem']]
y = df['energy_consumption']
# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X1, y, test_size=0.2, random_state=42)
# Масштабирование признаков
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# Создание модели нейросети
model = keras.Sequential([
    layers.Dense(64, activation='relu', input_shape=(X_train_scaled.shape[1],)),
    layers.Dense(32, activation='relu'),
    layers.Dense(1)  # Выходной слой, так как мы прогнозируем одно значение
])
# Компиляция модели
model.compile(optimizer='adam', loss='mean_squared_error')
# Обучение модели
model.fit(X_train_scaled, y_train, epochs=100, batch_size=32, validation_split=0.2)
# Оценка модели
loss = model.evaluate(X_test_scaled, y_test)
print(f"Тестовая потеря: {loss:.2f}")
# Прогнозирование значений на тестовых данных
y_pred = model.predict(X_test_scaled)
# Вывод первых 5 прогнозируемых значений
print("Первые 5 прогнозируемых значений:")
print(y_pred[:5].flatten())
# Пример использования модели для прогноза
h=[1, 2, 3, 4, 5, 6, 7, 8, 9,1]
t=[10, 20, 30, 40, 30, 30, 20, 20, 20,10]
e=[40, 40, 40, 40, 20, 20, 20, 20, 20,40]
tg=[45, 45, 45, 45, 45, 45, 45, 45, 45,45]
for i in range(10):
    sample_data = np.array([[h[i], t[i], e[i], tg[i]]])
    sample_data_scaled = scaler.transform(sample_data)
    predicted_consumption = model.predict(sample_data_scaled)
    print(f"Прогноз =',{h[i]},'te=',{t[i]},' en=',{e[i]},'tem: {predicted_consumption[0][0]:.2f}")
Обучение на реальных данных подгружаем данные в массивы из файлов, energy_consumption также подгружаем из файла.
1. Как определить размер динамического массива исходя из количества строк в фале( csv или хls в котором все данные будут в столбцах)
2. Процедура обучения остается такой-же ?
3. прикомпиляции выходит ошибка эC:\Users\Vechna\AppData\Local\Programs\Python\Python37\lib\site-packages\sklearn\base.py:451: UserWarning: X does not have valid feature names, but StandardScaler was fitted with feature names “X does not have valid feature names, but” ?
Что еще можно улучшить в данной программе. Спасибо!
Может посоветуете что либо.

Центр помощи » ЦИКЛЫ. ТАБУЛИРОВАНИЕ ФУНКЦИЙ » Окт. 2, 2024 09:20:27

Помогите, пожалуйста, составить программу табулирования функции с шагом h, используя цикл с предусловием While .

Центр помощи » Помогите срешением проблемы » Сен. 29, 2024 17:08:09

Пытался активировать скрипт бота на питоне и выдает ошибку

Скрипт:
 import sqlite3
from aiogram import Bot, Dispatcher, types
from aiogram.utils import executor
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.dispatcher import FSMContext
from aiogram.contrib.fsm_storage.memory import MemoryStorage
API_TOKEN = 'xxxxx' # Замените на свой токен бота
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot, storage=MemoryStorage())
# Создание базы данных (если еще не создана)
db_name = 'mydatabase.db'
conn = sqlite3.connect(db_name)
cursor = conn.cursor()
cursor.execute('''
    CREATE TABLE IF NOT EXISTS data (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT,
        description TEXT
    )
''')
conn.commit()
conn.close()
# Обработчик команды /start
@dp.message_handler(commands=['start'])
async def start_handler(message: types.Message):
    await message.answer("Привет! Я бот для поиска информации в базе данных.\n\n"
                        "Введите поисковый запрос:")
# Обработчик ввода поискового запроса
@dp.message_handler()
async def search_handler(message: types.Message):
    search_term = message.text
    results = search_data(db_name, search_term)
    if results:
        await message.answer("Результаты поиска:")
        for row in results:
            await message.answer(f"ID: {row[0]}, Название: {row[1]}, Описание: {row[2]}")
    else:
        await message.answer("Ничего не найдено.")
# Функция поиска данных в базе данных
def search_data(db_name, search_term):
    conn = sqlite3.connect(db_name)
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM data WHERE name LIKE ? OR description LIKE ?", ('%' + search_term + '%', '%' + search_term + '%'))
    results = cursor.fetchall()
    conn.close()
    return results
if __name__ == "__main__":
    executor.start_polling(dp, skip_updates=True)

Ошибку которую выдает:
 from aiogram.utils import executor
ImportError: cannot import name 'executor' from 'aiogram.utils'

Инструментальные средства разработки » Codeum и блокировка  » Сен. 22, 2024 08:06:34

Добрый день товарищи. В pycharm решил установить плагин codium и столкнулся с ситуацией: Plugin “Codiumate - Code, test and review with confidence - by CodiumAI” was not installed: We are sorry, but we are currently unable to provide our products or services to you due to export control regulations.
Судя по всему, для России опять какие-то блокировки. VPN не помогает. Кто-то сталкивался? Может есть какие-то варианты решения этой проблемки.

Python для новичков » Подобие кейлоггера » Сен. 16, 2024 15:59:43

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

Кое-как написал код. Он считает нажатия, но полноценным его назвать нельзя.
Дело в том, что он не работает в фоновом режиме. А надо, чтобы подсчет вёлся и когда окно не активно. Дополнительная проблема - каждый раз счетчик считает заново. А надо, чтобы считал нарастающим итогом. Как дописать правильно код?

 from turtle import*
from tkinter import*
def com(event): event.keysym
click =1
def turtlemouv(event):
global click
click+=1
t.config(text = click)
w = Tk()
w.geometry('200x130')
w.bind("<Key>", turtlemouv)
t=Label (w,text="0", font="Arial 35")
t.pack()
w.mainloop()