pyqt5猜数游戏

电脑随机生成4个互不相等的数,你猜。

1:你猜的数和正确答案相比,位置正确的个数

2:你猜的数虽然在正确答案中,但位置不对,它的个数。

代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
import time
import sys
from random import randint
from PyQt5.QtWidgets import QApplication,QWidget,QTableWidgetItem
from guess import Ui_Form

class myform(QWidget,Ui_Form):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        
        self.randin() #调用函数生成随机数,存入数组
        self.i=0   #计数器,计算是否满10次
        
        #各按钮点击事件
        self.btn0.clicked.connect(self.showNumber0)
        self.btn1.clicked.connect(self.showNumber1)
        self.btn2.clicked.connect(self.showNumber2)
        self.btn3.clicked.connect(self.showNumber3)
        self.btn4.clicked.connect(self.showNumber4)
        self.btn5.clicked.connect(self.showNumber5)
        self.btn6.clicked.connect(self.showNumber6)
        self.btn7.clicked.connect(self.showNumber7)
        self.btn8.clicked.connect(self.showNumber8)
        self.btn9.clicked.connect(self.showNumber9)
        
        self.btn_reset.clicked.connect(self.reset)
        self.btn_ok.clicked.connect(self.ok)
        self.play.clicked.connect(self.again)

    #生成4个随机数存入列表a中
    def randin(self):
        a=[]
        while(len(a)!=4):
            x=randint(0,9)
            if x not in a:
                a.append(x)
        self.a=a
        
    #点击数字按钮,显示相应数字
    def showNumber0(self):
        self.btn0.setEnabled(False)
        if self.label1.text()=='':
            self.label1.setText('0')
        elif self.label2.text()=='': 
            self.label2.setText('0')
        elif self.label3.text()=='': 
            self.label3.setText('0')
        else:
            self.label4.setText('0')
            
    def showNumber1(self):
        self.btn1.setEnabled(False)
        if self.label1.text()=='':
            self.label1.setText('1')
        elif self.label2.text()=='': 
            self.label2.setText('1')
        elif self.label3.text()=='': 
            self.label3.setText('1')
        else:
            self.label4.setText('1')
            
    def showNumber2(self):
        self.btn2.setEnabled(False)
        if self.label1.text()=='':
            self.label1.setText('2')
        elif self.label2.text()=='': 
            self.label2.setText('2')
        elif self.label3.text()=='': 
            self.label3.setText('2')
        else:
            self.label4.setText('2')
            
    def showNumber3(self):
        self.btn3.setEnabled(False)
        if self.label1.text()=='':
            self.label1.setText('3')
        elif self.label2.text()=='': 
            self.label2.setText('3')
        elif self.label3.text()=='': 
            self.label3.setText('3')
        else:
            self.label4.setText('3')
            
    def showNumber4(self):
        self.btn4.setEnabled(False)
        if self.label1.text()=='':
            self.label1.setText('4')
        elif self.label2.text()=='': 
            self.label2.setText('4')
        elif self.label3.text()=='': 
            self.label3.setText('4')
        else:
            self.label4.setText('4')
            
    def showNumber5(self):
        self.btn5.setEnabled(False)
        if self.label1.text()=='':
            self.label1.setText('5')
        elif self.label2.text()=='': 
            self.label2.setText('5')
        elif self.label3.text()=='': 
            self.label3.setText('5')
        else:
            self.label4.setText('5')
            
    def showNumber6(self):
        self.btn6.setEnabled(False)
        if self.label1.text()=='':
            self.label1.setText('6')
        elif self.label2.text()=='': 
            self.label2.setText('6')
        elif self.label3.text()=='': 
            self.label3.setText('6')
        else:
            self.label4.setText('6')
            
    def showNumber7(self):
        self.btn7.setEnabled(False)
        if self.label1.text()=='':
            self.label1.setText('7')
        elif self.label2.text()=='': 
            self.label2.setText('7')
        elif self.label3.text()=='': 
            self.label3.setText('7')
        else:
            self.label4.setText('7')
            
    def showNumber8(self):
        self.btn8.setEnabled(False)
        if self.label1.text()=='':
            self.label1.setText('8')
        elif self.label2.text()=='': 
            self.label2.setText('8')
        elif self.label3.text()=='': 
            self.label3.setText('8')
        else:
            self.label4.setText('8')
            
    def showNumber9(self):
        self.btn9.setEnabled(False)
        if self.label1.text()=='':
            self.label1.setText('9')
        elif self.label2.text()=='': 
            self.label2.setText('9')
        elif self.label3.text()=='': 
            self.label3.setText('9')
        else:
            self.label4.setText('9')
            
    #重置按钮
    def reset(self):
        self.label1.setText('')
        self.label2.setText('')
        self.label3.setText('')
        self.label4.setText('')
        
        self.btn0.setEnabled(True)
        self.btn1.setEnabled(True)
        self.btn2.setEnabled(True)
        self.btn3.setEnabled(True)
        self.btn4.setEnabled(True)
        self.btn5.setEnabled(True)
        self.btn6.setEnabled(True)
        self.btn7.setEnabled(True)
        self.btn8.setEnabled(True)
        self.btn9.setEnabled(True)

    #显示正确答案
    def showNub(self):
            self.label5.setText(str(self.a[0]))
            self.label6.setText(str(self.a[1]))
            self.label7.setText(str(self.a[2]))
            self.label8.setText(str(self.a[3]))
            self.btn_ok.setEnabled(False)

    #再来一遍(清空各种内容)
    def again(self):
        self.reset()
        self.label5.setText('')
        self.label6.setText('')
        self.label7.setText('')
        self.label8.setText('')
        self.table.clearContents()
        self.btn_ok.setEnabled(True)
        self.label.setText('再来一遍')
        self.i=0
        
    #确定按钮,比较你猜的数和随机生成的数
    def ok(self):

        #把你猜的数存入列表b中
        b=[int(self.label1.text()),int(self.label2.text()),int(self.label3.text()),int(self.label4.text())]

        #把你猜的数显示在表格中。self.i表示第几行,
        x=QTableWidgetItem(str(b))
        self.table.setItem(self.i,0,x) #设置单元格中的内容

        #判断两个列表
        k1=0 #位置正确,计算个数
        k2=0 #数对位置不对,计算个数
        for j in range(4):
            if b[j]==self.a[j]:
                k1+=1
            if b[j] in self.a and b[j]!=self.a[j]:
                k2+=1
                
        #把计算结果写显示在表格内
        x1=QTableWidgetItem(str(k1))
        self.table.setItem(self.i,1,x1)
        
        x2=QTableWidgetItem(str(k2))
        self.table.setItem(self.i,2,x2)
                
        if b==self.a:
            self.showNub()
            self.label.setText('恭喜过关')
        
        #满10次未猜对显示正确答案
        if self.i==9 and b!=self.a:
            self.showNub()
            self.label.setText('闯关失败')
            
        self.i+=1
        self.reset()

if __name__=='__main__':
    app=QApplication(sys.argv)
    w=myform()
    w.show()
    sys.exit(app.exec_())
    
原文地址:https://www.cnblogs.com/jmlovepython/p/5716033.html