Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3495 posts.

Центр помощи » У меня трудность в решении одной проблемы на Python » Фев. 11, 2022 18:52:29

Добрый вечер, участники форума! На данный момент я пишу бота для discord. Возможно-ли проиграть какой-либо звук и сразу вывести текст?
Например команда для вывода текста:
@bot.command()
async def siu(ctx):
await ctx.send(“siuu!”)

И когда бот напишет “siuu!” в чате, проигрывался всеми известный звук с Криштиано Роналдо. Заранее спасибо за помощь!

Базы данных » Работа с триггерами через Firebirdsql » Фев. 10, 2022 23:32:49

Потратил неделю на поиски решения проблемы самостоятельно. Силы и терпение иссякли.
Ситуация такая:
1. Пишу простой питоновский скрипт для работы с базой данных Firebird, который собираюсь разместить на сервере Pythonanywhere.
2. База находится на стороннем сервере (доступ к нему через SSH есть)
3. Задача слушать события БД (от заранее созданного триггера в БД - создание новой записи) и по факту такого события осуществить ряд действий.

Итог:
1. Тунель запустил
2. К базе подключился
3. SQL запросы к БД работают (вытащит инфу могу)
4. На локале работает и event_conduit (работа триггера четко отслеживается)
5. Но только размещаю скрипт на Pythonanywhere - первых 3 пункта работают, а 4 (именно выполнение метода event_conduit) вызывает ошибку сокета и разрыв связи с БД.

Выглядит так:
Traceback (most recent call last):
File “trigger.py”, line 53, in <module>
event = con.event_conduit(, timeout=10)
File “/home/agmorev/.local/lib/python3.8/site-packages/firebirdsql/fbcore.py”, line 795, in event_conduit
return EventConduit(self, event_names, timeout)
File “/home/agmorev/.local/lib/python3.8/site-packages/firebirdsql/fbcore.py”, line 492, in __init__
self.sock = SocketStream(ip_address, port, timeout)
File “/home/agmorev/.local/lib/python3.8/site-packages/firebirdsql/socketstream.py”, line 46, in __init__
self._sock = socket.create_connection((host, port), timeout)
File “/usr/lib/python3.8/socket.py”, line 807, in create_connection
raise err
File “/usr/lib/python3.8/socket.py”, line 796, in create_connection
sock.connect(sa)
socket.timeout: timed out

НА ЛОКАЛЬНОЙ МАШИНЕ ВСЕ РАБОТАЕТ

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

Network » ajax запросы с игрового движка. » Фев. 8, 2022 19:20:05

Всем привет ребят! Пользуюсь движком Construct2 из него я могу отсылать get и post запросы…
Так же мне интересен язык пайтон и я хочу попробовать написать на нем серверную часть по мере своего развития…
ВОПРОС!
Какой сервер мне нужен? web или http?
какие библиотеки мне изучить для этого?

вот что я хочу реализовать для начала.
сервер который будет принимать ajax запрос json от движка(там пишу всю клиенскую часть) сохранить данные в бд или обычный файл для начала.
и при запросе выдать это на клиенскую часть в json

я пробовал по одному уроку из ютуба написать скрипт web сервера

запрос с движка он принимал но я так понимаю что он не подходит для http запросов…

вообщем извините что пишу глупости… прошу помощи какие библиотеки мне осваивать?

Python для новичков » Парсер youtube перестал работать? » Фев. 8, 2022 11:31:57

IDLE (Python 3.10 64-bit)
Windows 10
————————–
Уважаемые подскажите.
Парсер youtube работал отлично.
Сейчас перестал, что-то в youtube изменилось.
Вот код:
 # -*- coding: utf-8 -*-
import urllib.parse
import urllib.request
import re, os, sys
def findyoutube(x):
    mas = []
    sq = 'http://www.youtube.com/results?search_query=' + urllib.parse.quote(x)
    doc = urllib.request.urlopen(sq).read().decode('utf8', errors='ignore')
    match = re.findall(r'(?P<v>=(.+?)")+.*(title="(.+?)")', doc)
    if not (match is None):
        for ii in match:
            if (len(ii) < 25):
                mas.append(ii[3] + '\n*replace*' + ii[1] + '\n')
    mas = dict(zip(mas, mas)).values()
    mas2 = []
    for y in mas: mas2.append(f'{y}'.replace('*replace*', 'http://www.youtube.com/watch?v='))
    return mas2
print(findyoutube('болонская+удочка°'))
with open('output.txt', 'w', encoding='utf8') as output:
    for i in findyoutube('болонская+удочка'):
        output.write(i + '\n')

Центр помощи » Создать программу в Jupyter notebook » Фев. 7, 2022 07:42:23

Помогите создать программу в Jupyter notebook
1) Выпуклый четырехугольник задан координатами своих вершин. Найти его площадь как площадь суммы треугольников
2) Дано уравнение ax^2+bx+c=0. Определить, имеет ли оно вещественные корни
3) Напечатать таблицу соответствия между весом в килограммах и фунтах для 1,2,3,…,18 фунтов

Инструментальные средства разработки » Проблема с капчей при регистрации на github » Фев. 5, 2022 10:28:24

Не могу пройти капчу при регистрации на github. И картинку и звуковую пробовал, выдает ошибку:
Unable to verify your captcha response. Please visit https://docs.github.com/articles/troubleshooting-connectivity-problems/#troubleshooting-the-captcha for troubleshooting information.

Python для новичков » Getting response from URL after changing config.json properties with Python » Фев. 5, 2022 02:26:47

Мои приветствия.
——————–
Задание:
Read config.json file located in :
/data/python/config.json
make a GET request to the URL under ‘url’ key and add the first 15 characters
to a key name ‘content’ in the json file.
config.json:
{“url”: "https://www.google.com“}
config.json after code run:
{”url“: ”https://www.google.com“, ”content“: ”<first15>“}
Where <first15> should be the first 15 characters from the response.

——————–
Написан код:

import json

import requests

with open(”/home/Exam/Python/data/python/config.json“, ”r“) as f:
#with open(”home/Exam/Python/config.json“, ”r") as f:
config = json.load(f)

result = requests.get(config)

config = result.text

with open(“/home/Exam/Python/data/python/config.json”, “w”) as f:
json.dump(config, f)


——————–
Но не совсем понятно что должно измениться после изменения conf.json файла….
И Where <first15> should be the first 15 characters from the response.
Буду рад пояснению

Центр помощи » Настройка smurves 1.0.1 pip » Фев. 4, 2022 18:31:03

Нужна небольшая помощь с настройкой smurves 1.0.1 pip . Опыта в python у меня к сожалению практически нет, просто хочу посмотреть как работает https://pypi.org/project/smurves/ .

В описании smurves pip сказано, что это генератор случайных кривых, которые демонстрируются на графике в виде рисунка: https://raw.githubusercontent.com/moews/smurves/master/example.png

Когда я прописываю в python данные срочки:

"from smurves import surgebinder

curves = surgebinder(n_curves = 10,
x_interval = ,
y_interval = ,
n_measure = 100,
direction_maximum = 3,
convergence_point = ,
log_scale = True,
change_range = ,
start_force = 0.01) "

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

Возможно кто-то знает, что нужно делать дальше. Заранее благодарю за помощь!

Python для новичков » получение URL при выводе команды терминала » Фев. 3, 2022 18:20:22

Вывод команды в терминале:
 # ./cloudflared-linux-arm64 tunnel login
Please open the following URL and log in with your Cloudflare account:
https://dash.cloudflare.com/argotunnel?callback=https%3A%2F%2Flogin.cloudflareaccess.org%2FES4Xk39csUQbzK8SnGjmM8U4vEvEXyAG81QCs9nmRmo%3D
Leave cloudflared running to download the cert automatically.

И при этом терминал в состоянии ожидания, т.е. невозможно параллельно перенаправить вывод в файл и потом разобрать этот файл c помощью python для получения второй строчки с URL. Т.е. если использовать например
 # ./cloudflared-linux-arm64 tunnel login | tee log.txt

файл создается, но нулевой длины.
Как в подобных случаях можно использовать python для запуска команды терминала и получения URL?

Python для новичков » модуль для проверки вводимых симолов пароля » Янв. 31, 2022 10:18:06

Если использовать модуль PyInputPlus то возможна проверка на вводимое минимальное и максимальное числовое значение, например:
 username = pyinputplus.inputNum('Username (must be 12 numbers): ', min=111111111111, max=999999999999, limit=3)

но если нужна аналогичная проверка для вводимого пароля использование функции inputPassword() не позволяет этого. Только отображаются символы * при вводе пароля. Возможно существует модуль python, который позволяет проверять вводимые символы пароля и при этом также отображать символы *?

GUI » [PyQt5] QMessageBox зависает при вызове » Янв. 29, 2022 14:32:16

Имею следующую функцию в своём коде:
 def CreateMessage(title, icon, text, informative_text):
    MESSAGE=QMessageBox()
    MESSAGE.setWindowTitle(title)
    MESSAGE.setIcon(icon)
    MESSAGE.setText(text)
    MESSAGE.setInformativeText(informative_text)
    MESSAGE.setStandardButtons(QMessageBox.Ok)
    MESSAGE.exec_()
При вызове по типу:
 CreateMessage('Ошибка', QMessageBox.Critical, f'Доменное имя {domain} не поддерживается', None)
Появляется MessageBox, который “не отвечает”. Приходится перезапускать программу.
Скажите, пожалуйста, в чём проблема и как её решить?

Центр помощи » Взлом пароля » Янв. 25, 2022 11:11:05

Здравствуйте!
Помогите пожалуйста дописать код в цикле While для взлома архива, у меня самой не выходит ничего
 import string
import random
import zipfile
PASSWORD_LENGTH = 4
def extract_archive(file_to_open, password):
    """
    Функция открывает архив с паролем и возвращает результат операции (bool)
    """
    try:
        file_to_open.extractall(pwd=password.encode())
        return True
    except Exception as e:
        print(e)
        return False
def hack_archive(file_name):
    """
    Функция брутфорсит запароленный архив
    """
    file_to_open = zipfile.ZipFile(file_name)  # объект архива
    wrong_passwords = []  # список паролей, которые не подошли
    tries = 0  # колличество неудачных попыток
    while True:
        """
        Здесь необходимо реализовать: 
            1. Случайную генерацию пароля, который будет соответствовать условиям:
                * длина - 4 символа (`PASSWORD_LENGTH`)
                * допустимые символы пароля - только цифры
                * type(password) == str
            2. Открытие архива со сгенерированым паролем - `extract_archive(file_to_open, password)`
            При удачном открытии (True) - прервать цикл
            При неудачи (False) - добавить пароль в список `wrong_passwords` и больше не проверять данный пароль
            3. Счетчик неудачных попыток
        """
    print(f'Archive {file_name} is hacked. Password - {password}')
    print(f'Password was found after {tries} tries')
#############
filename = 'task.zip'
hack_archive(filename)

Центр помощи » Знатоки Python,подскажите по структуре кода( » Янв. 20, 2022 22:46:43

Задачу прикрепляю в виде скриншота. Язык реализации - Python. Дело в том,что я не шарю я написании. Знаю основные алгоритмы. Помогите пожалуйста составить скелет(структуру) программы.

Нужно учесть следующее:
Реализовать 2 режима работы с программой: режим пользователя и режим администратора. В режиме администратора происходит добавление и настройка сущностей, относящихся к реализованному классу. А в режиме пользователя осуществляется их использование. Например, в варианте 1 идёт речь о выборе вкладов. В таком случае, в режиме администратора создаётся доступные вклады, а в режиме пользователя пользователь может выбрать по определённым критериям подходящие вклады и открыть их. Реализовывать проверку учётных данных при входе для выбора режима работы программы не нужно. Хранение данных, созданных во время работы программы может осуществляться, как в текстовых так и в бинарных файлах (если вы выполняете работу на оценку хорошо и выше).


Python для новичков » Как вывести время выполнения по оси Y в графике matplotlib » Янв. 17, 2022 14:33:17

Добрый день.
Имеем два массива:

('2022-01-07 Пт', ‘2022-01-08 Сб’, ‘2022-01-09 Вс’, ‘2022-01-10 Пн’, ‘2022-01-11 Вт’, ‘2022-01-12 Ср’, ‘2022-01-13 Чт’, ‘2022-01-14 Пт’, ‘2022-01-15 Сб’, ‘2022-01-16 Вс’, ‘2022-01-17 Пн’)
и
('04:08:42', ‘02:14:29’, ‘02:11:29’, ‘02:35:51’, ‘02:50:42’, ‘02:34:17’, ‘02:29:04’, ‘03:05:52’, ‘02:43:35’, ‘02:10:27’, ‘04:17:31’)
Только это массив не времени хронологического, а времени выполнения (т.е. задача выполнялась 4 часа 8 минут 42 сек (04:08:42))

Как по оси Х вывести первый (дата) массив, а по оси Y вывести второй? В график bar.

Python для новичков » не активируется виртуальная среда пайтон в VS code » Янв. 17, 2022 08:09:54

Подскажите, пожалуйста, почему у меня не активируется виртуальная среда.
См. скриншот в прикрепленном файле.

Python для новичков » не активируется виртуальная среда пайтон в VS code » Янв. 16, 2022 18:23:22

Подскажите, пожалуйста, почему у меня не активируется виртуальная среда.
См. скриншот в прикрепленном файле.

Python для новичков » Посоветуйте учебник по Android Debug Bridge » Янв. 16, 2022 10:50:15

Здравствуйте.
Хочу научится управлять NoxPlayer эмулятором через Android Debug Bridge
Можете посоветовать какой нибудь учебник что бы начать ?

GUI » Связь двуx файлов py по кнопке » Янв. 15, 2022 12:21:31

Здравствуйте.Задача простая,но мне не подвластная почему-то.Надо открыть по кнопке файл python.Есть два файла-main и test.Сам main просто открывает программу импортом(к сожалению не могу скинуть,но можно открыть для проверки любой файл py),а test создан в Qtdesigner,и я в нем с помощью кнопки хочу вызвать main.py.Прописал 2 класса в test-My_inst и Main.И в классе My_inst необходимо обратить к классу в файле main(как обращаются в классе Main к классу Ui_Dialog).Но как я не пытался не могу обернуть то,что в файле main.py в класс.Заранее спасибо.1ый код-main,второй-test.

 import data as mod
if __name__ == '__main__':
    
    object = mod.Facility()
    
    mod.mouse.visible = True
    
    mod.window.borderless = False
 
    object.run()

 from PyQt5 import QtCore, QtGui, QtWidgets
import main #1)
class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(1013, 854)
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(10, 250, 171, 31))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Dialog)
        self.label_2.setGeometry(QtCore.QRect(10, 340, 571, 31))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.textEdit_2 = QtWidgets.QTextEdit(Dialog)
        self.textEdit_2.setGeometry(QtCore.QRect(10, 380, 181, 31))
        self.textEdit_2.setObjectName("textEdit_2")
        self.label_3 = QtWidgets.QLabel(Dialog)
        self.label_3.setGeometry(QtCore.QRect(10, 440, 391, 31))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.textEdit_3 = QtWidgets.QTextEdit(Dialog)
        self.textEdit_3.setGeometry(QtCore.QRect(10, 480, 181, 31))
        self.textEdit_3.setObjectName("textEdit_3")
        self.label_4 = QtWidgets.QLabel(Dialog)
        self.label_4.setGeometry(QtCore.QRect(10, 530, 371, 31))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.textEdit_4 = QtWidgets.QTextEdit(Dialog)
        self.textEdit_4.setGeometry(QtCore.QRect(10, 560, 181, 31))
        self.textEdit_4.setObjectName("textEdit_4")
        self.label_5 = QtWidgets.QLabel(Dialog)
        self.label_5.setGeometry(QtCore.QRect(0, 610, 501, 31))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")
        self.textEdit_5 = QtWidgets.QTextEdit(Dialog)
        self.textEdit_5.setGeometry(QtCore.QRect(10, 660, 181, 31))
        self.textEdit_5.setObjectName("textEdit_5")
        self.label_6 = QtWidgets.QLabel(Dialog)
        self.label_6.setGeometry(QtCore.QRect(10, 710, 471, 31))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")
        self.textEdit_6 = QtWidgets.QTextEdit(Dialog)
        self.textEdit_6.setGeometry(QtCore.QRect(10, 750, 181, 31))
        self.textEdit_6.setObjectName("textEdit_6")
        self.label_7 = QtWidgets.QLabel(Dialog)
        self.label_7.setGeometry(QtCore.QRect(10, 170, 251, 31))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.label_7.setFont(font)
        self.label_7.setObjectName("label_7")
        self.textEdit_7 = QtWidgets.QTextEdit(Dialog)
        self.textEdit_7.setGeometry(QtCore.QRect(10, 210, 181, 31))
        self.textEdit_7.setObjectName("textEdit_7")
        self.label_8 = QtWidgets.QLabel(Dialog)
        self.label_8.setGeometry(QtCore.QRect(10, 20, 231, 31))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.label_8.setFont(font)
        self.label_8.setObjectName("label_8")
        self.textEdit_8 = QtWidgets.QTextEdit(Dialog)
        self.textEdit_8.setGeometry(QtCore.QRect(10, 60, 181, 31))
        self.textEdit_8.setObjectName("textEdit_8")
        self.label_9 = QtWidgets.QLabel(Dialog)
        self.label_9.setGeometry(QtCore.QRect(10, 100, 241, 31))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.label_9.setFont(font)
        self.label_9.setObjectName("label_9")
        self.textEdit_9 = QtWidgets.QTextEdit(Dialog)
        self.textEdit_9.setGeometry(QtCore.QRect(10, 140, 181, 31))
        self.textEdit_9.setObjectName("textEdit_9")
        self.comboBox = QtWidgets.QComboBox(Dialog)
        self.comboBox.setGeometry(QtCore.QRect(10, 290, 251, 41))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.comboBox.setFont(font)
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(610, 20, 371, 111))
        font = QtGui.QFont()
        font.setPointSize(20)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")
        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)
    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.label.setText(_translate("Dialog", "Выбор нагрузки"))
        self.label_2.setText(_translate("Dialog", "Линейная скорость распространения пожара(м/мин)"))
        self.label_3.setText(_translate("Dialog", "Расчет времени обнаружения(мин)"))
        self.label_4.setText(_translate("Dialog", "Расчет времени следования(мин)"))
        self.label_5.setText(_translate("Dialog", "Расчет времени боевого развертывания(мин)"))
        self.label_6.setText(_translate("Dialog", "Скорость передвижения персонала(м/мин)"))
        self.label_7.setText(_translate("Dialog", "Высота помещения(м)"))
        self.label_8.setText(_translate("Dialog", "Длина помещения(м)"))
        self.label_9.setText(_translate("Dialog", "Ширина помещения(м)"))
        self.comboBox.setItemText(0, _translate("Dialog", "Склад льноволокна"))
        self.comboBox.setItemText(1, _translate("Dialog", "Верхняя одежда;ворс, ткани (шерсть+нейлон)"))
        self.pushButton.setText(_translate("Dialog", "Открыть 3d проект"))
class MyInst(QtWidgets.QWidget): #2-Весь блок(Ошибка в том,что нельзя обращаться к файлу main напрямую,только к классу)
    def __init__(self, parent=None):
        super(main, self).__init__(parent)
        self.setupUi(self)
        
class Main(QtWidgets.QWidget,Ui_Dialog):                           
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.setupUi(self)
        self.pushButton.clicked.connect(self.onClicked)
        
    def onClicked(self):
        self.inst = MyInst()
        self.inst.show() #До этого момента включительно
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    
    #Dialog = QtWidgets.QDialog() 3)Эти 4 строчки убираем
   # ui = Ui_Dialog()
   # ui.setupUi(Dialog)
    #Dialog.show()
    w=Main() #4) А эти 2 добавляем
    w.show()
    sys.exit(app.exec_())

Python для новичков » Qt импорт и работа с дизайном » Янв. 14, 2022 16:28:58

Доброго времени суток!
Кто хочет покидать в меня камнями?
Объясните элементарное, я не могу понять…
Имеем такую структуру проекта:
Проект
Config
—-conf.ini
resources
module_sale
—-__init__.py
—-sale.py
—-sale_design.py
venv
main.py
mainform_design.py
resource_rc.py
Где:
main.py - главный файл
mainform_design.py - дизайн формы, созданный в дизайнере и переконвертированный
sale.py - функции сторонней формы
sale_design.py - дизайн сторонней формы

Главный файл main.py имеет вид (лишнее вырезал):
 import sys  # sys нужен для передачи argv в QApplication
from configparser import ConfigParser
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QLabel, QMessageBox, QProgressBar, QTableWidgetItem
from PyQt5.QtGui import QPixmap, QIcon
import mainform_design
from module_sale import sale_design
from module_sale import sale
# Переменные глобальные
conf: ConfigParser = ConfigParser()
conf.read('config/conf.ini')
folder = conf.get('Settings', 'Folder')
filters = conf.get('Settings', 'Filter')
sql_file = conf.get('Settings', 'SQL File')
sum_ini = conf.get('Settings', 'Sum')
limit = conf.get('Settings', 'Limit')
conf_sum = ConfigParser()
conf_sum.read(sum_ini)
# Главный класс
class MainForm(QtWidgets.QMainWindow, mainform_design.Ui_MainWindow):
    # Инициализация окна и обработчики событий
    def __init__(self):
        # Это здесь нужно для доступа к переменным, методам
        # и т.д. в файле design.py
        super().__init__()
        self.setupUi(self)
        self.sales = SaleDialogImport(self)
        self.start()
        self.btn_Shop.clicked.connect(self.sales.show_sale_dialog)  # тут происходит вызов сторонней формы
    # Процедура отображения запроса при выходе с программы
    def closeEvent(self, event):
        reply = QMessageBox.question(self, 'Выход', "Как, уже уходите?", QMessageBox.Yes, QMessageBox.No)
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()
    # Процедура, выполняющаяся при старте и устанавливающая контролам свойства
    def start(self):
        self.btn_Parce.setEnabled(False)
        self.btn_Finalize.setEnabled(False)
        self.btn_Save.setEnabled(False)
        self.tabs.setCurrentIndex(0)
        self.lbl_countline.hide()
        self.lbl_validline.hide()
        self.lbl_checked.hide()
        self.lbl_progres.hide()
        self.pr_progres.hide()
class SaleDialogImport (QtWidgets.QMainWindow, sale_design.Ui_shop):
    def __init__(self, parent=None):
        super(SaleDialogImport, self).__init__(parent)
        self.setupUi(self)
        self.parent = parent
        self.sal = sale.SaleDialog()       
    def show_sale_dialog(self):
        self.show()
 	self.sal.filter_type()
        self.sal.yahr_sort()
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MainForm()
    window.show()
    sys.exit(app.exec_())

Вопрос собственно в том, почему при импорте не работают функции:
self.sal.filter_type()
self.sal.yahr_sort()
Как импортировать и дизайн и логику вместе?
Имеет ли смысл деление на файлы по модулям, или лучше писать в одном файле классами?
Отвечу на любые вопросы, ну или можно просто дружно посмеяться

Центр помощи » Цыкл for. Перебор значений » Янв. 10, 2022 20:13:40

Приветствую.
Задача:
Реализовать перебор всех возможных комбинаций.

Код:
 y = 0  # Длинна генерируемого массива
x = 0  # Для цыкла генерации
m = [] # Генерируемый массив
a = 0  # Количество символов
j = 0  # Элемент массива
j1 = 1 # Элемент массива
e = 1  # Счетчик этераций
v = '0123456789A' # Элементы для заполнения
print ('Введите длинну генерируемых комбинаций: \n')
y = int (input ())
st = len(v)**y
print ('Количество возможных вариантов: ' + str(st))
# Генерируем массив
while x < y:
    x += 1
    m = m + ['0']
print (m)
# Перебираем значения
while j <= y:
    for i in v:  # Перебираем элементы
        m[ - len(m) + j] = i  
        for i in v:
            m[ - len(m) + j1] = i
            e += 1
            print ('Этерация № ' + str(e) + str(m))
    j1 += 1
    j += 1

…. Работает, но криво…
Второй день миновал. Помогите найти проблему.
Заранее благодарю.