我正在做一个小测验,我希望单选按钮处于不同的位置。我让它在一定程度上发挥了作用,因为它在第一个问题中是随机的,但是在接下来的测验中它会保持这个顺序。我希望每次都随机。在
class MultipleChoice(QtGui.QWidget):
showTopicsSignal = pyqtSignal()
def __init__(self,parent=None):
super(MultipleChoice, self).__init__(parent)
self.initUI()
def initUI(self):
self.Questions=[]
self.Questionum = QLabel()
self.Questioninfo = QLabel()
self.Correctanswer = QRadioButton()
self.Incorrectans1 = QRadioButton()
self.Incorrectans2 = QRadioButton()
self.Incorrectans3 = QRadioButton()
self.Correctanswer.setAutoExclusive(True)
self.Incorrectans1.setAutoExclusive(True)
self.Incorrectans2.setAutoExclusive(True)
self.Incorrectans3.setAutoExclusive(True)
layout = QVBoxLayout(self)
layout.addWidget(self.Questionum)
layout.addWidget(self.Questioninfo)
randomnumber = randint(0,3)
if randomnumber == 0:
layout.addWidget(self.Correctanswer)
layout.addWidget(self.Incorrectans1)
layout.addWidget(self.Incorrectans2)
layout.addWidget(self.Incorrectans3)
elif randomnumber == 1:
layout.addWidget(self.Incorrectans1)
layout.addWidget(self.Correctanswer)
layout.addWidget(self.Incorrectans2)
layout.addWidget(self.Incorrectans3)
elif randomnumber == 2:
layout.addWidget(self.Incorrectans1)
layout.addWidget(self.Incorrectans2)
layout.addWidget(self.Correctanswer)
layout.addWidget(self.Incorrectans3)
elif randomnumber == 3:
layout.addWidget(self.Incorrectans1)
layout.addWidget(self.Incorrectans2)
layout.addWidget(self.Incorrectans3)
layout.addWidget(self.Correctanswer)
如果将答案选项加载到容器中,则可以将Python的
random
(link)库与以下一个或两个工具一起使用:random.choice(seq)
(link),它随机选择seq
中提供的可能项random.sample(pop, k)
(link)哪个选项k
从pop
中提供的可能选择中唯一的元素,而不替换,我认为这在您的情况下很关键,因为您不希望在同一个问题上显示相同的答案两次。在这将简化当前if语句块,从
到
^{pr2}$又想到了另一个很酷的主意。如果你有一个很大的“池”可能的错误答案,你可以定义一个函数来提供随机选择的错误答案。比如:
这将为您提供
number
个不正确的答案,并将其添加到布局中。在最后,
random.shuffle(x)
(link)是另一种方法,因为它采用序列x
并将它们混合在一起。所以你可以把random.sample(wrongChoices, 3)
的想法结合起来,随机给出三个不正确的答案,然后加上正确的答案,确保正确的答案并不总是在底部,用random.shuffle(allAnswerChoices)
给他们最后一次搅拌你现在的结构似乎太复杂了。随机化问题选择要简单得多,而不是小部件本身。在
下面是一个简单的演示,演示如何做到:
相关问题 更多 >
编程相关推荐