Python应用程序没有响应。未给出错误

2024-09-25 10:30:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python编写应用程序。我的简单应用程序有一个问题,它在给定的范围内生成随机数。它开始了,没有错误。我输入两个数字,单击“generauj”(用波兰语生成),然后应用程序停止响应。没有任何错误,它只是冻结,就像它有一些无限循环或类似的东西。有人能告诉我为什么会这样吗?或者至少,告诉我如何从这种情况中获得有关错误的信息?代码如下:

from PyQt4.QtGui import *
from PyQt4.QtCore import *
from sys import argv
from random import randint

class OknoGeneratora(QDialog):
    def __init__(self):
        super(OknoGeneratora, self).__init__()
        self.setWindowTitle("Generator losowych liczb") #random number generator
        self.setFixedSize(QSize(320,240))

        gm = QVBoxLayout()
        gm.addStretch(1)
        gm.addWidget(QLabel("Podaj początek i koniec zasięgu w jakim mają być generowane liczby (dodatnia i całkowita): ")) #give the range of numbers
        self.__liczba1=QLineEdit()
        self.__liczba2=QLineEdit()
        gm.addWidget(self.__liczba1)
        gm.addWidget(self.__liczba2)
        gm.addStretch(1)

        dm = QHBoxLayout()
        self.__generuj = QPushButton("Generuj") #generate
        dm.addWidget(self.__generuj)
        self.__koniec = QPushButton("Zakończ") #close
        dm.addWidget(self.__koniec)
        gm.addLayout(dm)

        self.__generuj.pressed.connect(self.generuj)
        self.__koniec.pressed.connect(self.koniec)

        self.setLayout(gm)

    def generuj(self):
        sprawdz=0
        if self.__liczba1.text():
            for zn in self.__liczba1.text():
                if not zn.isdigit():
                    sprawdz=1
                    QMessageBox.critical(self, "Błąd", "Zły napis! Proszę podać liczbę.") #Error, Give the number
                    break
        elif self.__liczba2.text():
            for zn2 in self.__liczba2.text():
                if not zn2.isdigit():
                    sprawdz=1
                    QMessageBox.critical(self, "Błąd", "Zły napis! Proszę podać liczbę.") #Error, Give the number
                    break
        if sprawdz!=1:
            li1 = int(self.__liczba1.text())
            li2 = int(self.__liczba2.text())
            wynik=""
            while li1>0 and li2>0:
                wynik=randint(li1,li2)
            QMessageBox.information(self,"Ok!","Wygenerowana liczba to: " + wynik) #Ok, generated number is:
        else: QMessageBox.critical(self,"Błąd","Zły napis! Proszę podać liczbę dodatnią.") #Give the number

    def koniec(self): QCoreApplication.instance().quit()

app = QApplication(argv)
okk = OknoGeneratora()
okk.show()
app.exec_()

Tags: thetextfromimportselfnumberdmgm
1条回答
网友
1楼 · 发布于 2024-09-25 10:30:43

看看这部分:

while li1>0 and li2>0:
    wynik=randint(li1,li2)

您永远不会更改l1l2的值。这意味着Python将反复调用wynik=randint(li1,li2)。您需要在循环中更改l1l2的值,或者在某个时刻在循环中使用break。你知道吗

你是这个意思吗?你知道吗

if li1 > 0 and li2 > 0:
    wynik = randint(li1, li2)

相关问题 更多 >