# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'display.ui'## Created by: PyQt5 UI code generator 5.15.0## WARNING: Any manual changes made to this file will be lost when pyuic5 is# run again. Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgets
from Checker24 import Checker24
classUi_Dialog(object):defsetupUi(self, Dialog):
self.Dialog = Dialog
self.Dialog.setObjectName("Dialog")
self.Dialog.resize(496,477)
self.game = Checker24()
self.nums = self.game.generate_data()
self.ac =0
self.lineEdit = QtWidgets.QLineEdit(Dialog)
self.lineEdit.setGeometry(QtCore.QRect(120,320,221,41))
self.lineEdit.setObjectName("lineEdit")
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(360,320,93,41))
self.pushButton.setObjectName("pushButton")
self.progressBar = QtWidgets.QProgressBar(Dialog)
self.progressBar.setGeometry(QtCore.QRect(120,380,181,41))
self.progressBar.setProperty("value", self.ac *10)
self.progressBar.setObjectName("progressBar")
self.label = QtWidgets.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(120,170,91,41))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(Dialog)
self.label_2.setGeometry(QtCore.QRect(260,170,91,41))
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(Dialog)
self.label_3.setGeometry(QtCore.QRect(120,240,91,41))
self.label_3.setObjectName("label_3")
self.label_4 = QtWidgets.QLabel(Dialog)
self.label_4.setGeometry(QtCore.QRect(260,240,91,41))
self.label_4.setObjectName("label_4")
self.retranslateUi()
QtCore.QMetaObject.connectSlotsByName(self.Dialog)# bind object to Action
self.pushButton.clicked.connect(self.submitAction)defsubmitAction(self):# get user answer
expr = self.lineEdit.text()if self.game.parse_expression(expr, self.nums):
self.ac +=1
self.lineEdit.setText("AC")
self.progressBar.setProperty("value", self.ac *10)
self.nums = self.game.generate_data()
self.retranslateUi()else:
self.lineEdit.setText("WA")defretranslateUi(self):
_translate = QtCore.QCoreApplication.translate
self.Dialog.setWindowTitle(_translate("Dialog","24点"))
self.pushButton.setText(_translate("Dialog","Submit"))
self.label.setText(_translate("Dialog",str(self.nums[0])))
self.label_2.setText(_translate("Dialog",str(self.nums[1])))
self.label_3.setText(_translate("Dialog",str(self.nums[2])))
self.label_4.setText(_translate("Dialog",str(self.nums[3])))if __name__ =="__main__":import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
checker24
import random
classChecker24:defgenerate_data(self):
A = self.rand4()whilenot self.judgePoint24(A):
A = self.rand4()return A
defrand4(self):return[random.randint(1,9)for _ inrange(4)]defjudgePoint24(self, nums:[int])->bool:
eps =1e-6defvalid(x):returnabs(abs(x)-24)<= eps
defpick(A, i, j):return A[0:i]+ A[i +1:j]+ A[j +1:]defop(x, y):
ret =[x + y, x - y, y - x, x * y]if x !=0: ret.append(y / x)if y !=0: ret.append(x / y)return ret
defF(A):iflen(A)==2:returnany(map(valid, op(A[0], A[1])))for i inrange(len(A)):for j inrange(i +1,len(A)):
P = pick(A, i, j)for x in op(A[i], A[j]):if F(P +[x]):returnTruereturnFalsereturn F(nums)defparse_expression(self, expr, nums):try:
res =eval(expr)if res ==24:
t, A ="",[]for x in expr:if x.isdigit():
t = t + x
else:ifnot t:passelse:
A.append(int(t))
t =""if t: A.append(int(t))ifsorted(nums)==sorted(A):returnTrueelse:print(sorted(nums),sorted(A))returnFalsereturnFalseexcept Exception:returnFalse