【问题标题】:Python application do not respond. No error is givenPython 应用程序没有响应。没有给出错误
【发布时间】:2013-06-10 11:01:19
【问题描述】:

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

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_()

【问题讨论】:

    标签: python random numbers generator


    【解决方案1】:

    看这部分:

    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)
    

    【讨论】:

    • 哦,对了。我现在看到了。我只是使用 if 而不是 while。谢谢!但是现在我有另一个问题: QMessageBox.information(self,"Ok!","Wygenerowana liczba to: " + wynik) 有一个错误说:“无法将'int'对象隐式转换为str”
    • @arkadiusz Python 不知道如何添加字符串和整数;相反,使用“Wygenerowana liczba to:” + str(wynik)
    • 忘了这个。感谢您的帮助。
    • 或者,最好使用字符串格式而不是串联:"Wygenerowana liczba to: %d" % wynik
    猜你喜欢
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 2022-06-11
    • 2013-07-18
    • 1970-01-01
    相关资源
    最近更新 更多