首页 > 其他分享 >4.21

4.21

时间:2024-06-14 19:57:20浏览次数:18  
标签:num2 40 button2 num place 4.21 100

【题目描述】设计一个珠算测试器,要求能够完成珠算加减法的测试。具体的要求功能如下:

(1)用户启动测试,输入用户名后系统随机生成特定数目的加减法测试题;

(2) 要求测试使用表盘式或数字时秒表进行界面计时显示;

(3) 对于每道测试题目,要求用户使用电子算盘完成珠算过程,当按下确认键时,将珠算结果与正确答案比对,并在界面上显示总题数、已答题数和已做对题数;

(4) 当测试完成,界面显示本次测试情况(包括用户名、测试题目及答题明细、对错情况、测试用时和测试成绩)

from random import randint

from tkinter import *

import tkinter.messagebox as msgbox

tk = Tk()

tk.title("电子算盘")  # 窗口名称

tank = Canvas(tk, width=1000, height=600, bg='ivory')  # 创建画板

tank.pack()  # 显示画板

tank.create_rectangle(30, 30, 520, 190, width=3)  # 左上侧方框

tank.create_rectangle(30, 190, 520, 570, width=3)  # 左下侧方框

# tank.create_oval(900, 400, 620, 120, fill='yellow')

# tank.create_oval(800, 200, 850, 250, fill='black', tags='left')

# tank.create_oval(670, 200, 720, 250, fill='black', tags='right')

# tank.create_line(695, 320, 825, 320, width=5, tags='mouth')

backround_image = PhotoImage(file="img.png")  # 上珠图片

backround_image2 = PhotoImage(file="img_1.png")  # 下珠图片

button = Button()

button1 = [button for i in range(5)]  # 5个上珠

button2 = [[button for i in range(5)] for i in range(4)]  # 四行,每行五个下珠

num = [[0 for i in range(5)] for i in range(4)]  # 五个下珠分别对应的数值

num2 = [0 for i in range(5)]  # 五个上珠分别对应的数值

counter = 0

sure = Button()  # 确定按钮

st = Button()  # 启动检测按钮

equation = Label()  # 算式

answer = Label(width=50, height=7)  # 答题情况

name = Entry()  # 用户名输入

true_result = Label(width=50, height=4)  # 上一题的正确答案

digit = Label(tk, bg='yellow', fg='blue', height=5, width=25, font='宋体 10 bold')  # 计时器

true = 0  # 已做对题数

false = 0  # 做错题数

score = 0  # 题目得分

result = 0  # 每道题的正确答案

topic = ""  # 题目

def run_counter(digit, second):  # 计时器

    def counting():

        global counter

        if second == 1:

            counter += 1

        else:

            counter += 0

        digit.config(text="计时器:" + str(counter))

        digit.after(1000, counting)

    counting()

def getNum(num, num2):  # 计算算盘总和

    sum_ = 0

    for i in num:

        for j in i:

            sum_ += j

    for i in num2:

        sum_ += i

    return sum_

def suanshi():  # 生成随机加减法测试题

    answer = 0

    operator = ""

    num1 = 0

    num2 = 0

    p = randint(1, 2)

    if p == 1:

        while True:

            num1 = randint(0, 99)

            num2 = randint(0, 99)

            if num1 + num2 <= 99999:

                break

        answer = num1 + num2

        operator = "+"

    elif p == 2:

        while True:

            num1 = randint(0, 99)

            num2 = randint(0, 99)

            if num1 - num2 > 0:

                break

        answer = num1 - num2

        operator = "-"

    equation = str(num1) + operator + str(num2)

    return equation, answer

def button_click_back(events):  # 鼠标右击点击事件触发

    widget = events.widget

    for i in range(5):

        if widget == button1[i]:

            button1[i].place(x=40 + 100 * i, y=50 + 70 * 1)

            num2[i] = 0

            label = Label(tk, text="当前数字:" + str(getNum(num, num2)), width=30, height=4)

            label.place(x=780, y=30)

    for i in range(4):

        for j in range(5):

            if widget == button2[i][j]:

                if i == 3:

                    button2[3][j].place(x=40 + 100 * j, y=210 + 70 * (i + 1))

                    num[3][j] = 0

                    label = Label(tk, text="当前数字:" + str(getNum(num, num2)), width=30, height=4)

                    label.place(x=780, y=30)

                if i == 2:

                    button2[2][j].place(x=40 + 100 * j, y=210 + 70 * (i + 1))

                    button2[3][j].place(x=40 + 100 * j, y=210 + 70 * (i + 2))

                    num[2][j] = 0

                    num[3][j] = 0

                    label = Label(tk, text="当前数字:" + str(getNum(num, num2)), width=30, height=4)

                    label.place(x=780, y=30)

                if i == 1:

                    button2[1][j].place(x=40 + 100 * j, y=210 + 70 * (i + 1))

                    button2[2][j].place(x=40 + 100 * j, y=210 + 70 * (i + 2))

                    button2[3][j].place(x=40 + 100 * j, y=210 + 70 * (i + 3))

                    num[1][j] = 0

                    num[2][j] = 0

                    num[3][j] = 0

                    label = Label(tk, text="当前数字:" + str(getNum(num, num2)), width=30, height=4)

                    label.place(x=780, y=30)

                if i == 0:

                    button2[0][j].place(x=40 + 100 * j, y=210 + 70 * (i + 1))

                    button2[1][j].place(x=40 + 100 * j, y=210 + 70 * (i + 2))

                    button2[2][j].place(x=40 + 100 * j, y=210 + 70 * (i + 3))

                    button2[3][j].place(x=40 + 100 * j, y=210 + 70 * (i + 4))

                    num[0][j] = 0

                    num[1][j] = 0

                    num[2][j] = 0

                    num[3][j] = 0

                    label = Label(tk, text="当前数字:" + str(getNum(num, num2)), width=30, height=4)

                    label.place(x=780, y=30)

def button_click(events):  # 鼠标左击点击事件触发

    widget = events.widget

    for i in range(5):

        if widget == button1[i]:

            button1[i].place(x=40 + 100 * i, y=50 + 70 * 0)

            num2[i] = 10 ** (4 - i) * 5

            label = Label(tk, text="当前数字:" + str(getNum(num, num2)), width=30, height=4)

            label.place(x=780, y=30)

    for i in range(4):

        for j in range(5):

            if widget == button2[i][j]:

                if i == 3:

                    button2[0][j].place(x=40 + 100 * j, y=210 + 70 * (i - 3))

                    button2[1][j].place(x=40 + 100 * j, y=210 + 70 * (i - 2))

                    button2[2][j].place(x=40 + 100 * j, y=210 + 70 * (i - 1))

                    button2[3][j].place(x=40 + 100 * j, y=210 + 70 * (i))

                    num[0][j] = 10 ** (4 - j) * 1

                    num[1][j] = 10 ** (4 - j) * 1

                    num[2][j] = 10 ** (4 - j) * 1

                    num[3][j] = 10 ** (4 - j) * 1

                    label = Label(tk, text="当前数字:" + str(getNum(num, num2)), width=30, height=4)

                    label.place(x=780, y=30)

                if i == 2:

                    button2[0][j].place(x=40 + 100 * j, y=210)

                    button2[1][j].place(x=40 + 100 * j, y=210 + 70 * 1)

                    button2[2][j].place(x=40 + 100 * j, y=210 + 70 * 2)

                    num[0][j] = 10 ** (4 - j) * 1

                    num[1][j] = 10 ** (4 - j) * 1

                    num[2][j] = 10 ** (4 - j) * 1

                    label = Label(tk, text="当前数字:" + str(getNum(num, num2)), width=30, height=4)

                    label.place(x=780, y=30)

                if i == 1:

                    button2[0][j].place(x=40 + 100 * j, y=210)

                    button2[1][j].place(x=40 + 100 * j, y=210 + 70 * 1)

                    num[0][j] = 10 ** (4 - j) * 1

                    num[1][j] = 10 ** (4 - j) * 1

                    label = Label(tk, text="当前数字:" + str(getNum(num, num2)), width=30, height=4)

                    label.place(x=780, y=30)

                else:

                    button2[i][j].place(x=40 + 100 * j, y=210 + 70 * i)

                    num[0][j] = 10 ** (4 - j) * 1

                    label = Label(tk, text="当前数字:" + str(getNum(num, num2)), width=30, height=4)

                    label.place(x=780, y=30)

def start():

    global name

    global equation

    global sure

    global result

    global digit

    global topic

    st.place_forget()

    digit.place(x=540, y=30)

    run_counter(digit, 1)

    Label(tk, text="用户名", bg="ivory").place(x=540, y=150)

    name = Entry(tk, show='', font=('Arial', 14))

    name.place(x=580, y=150)

    p = suanshi()

    topic = p[0]

    result = p[1]

    equation = Label(tk, text=topic, width=40, height=4)

    equation.place(x=540, y=200)

    sure = Button(text="确定", command=judge, width=10, height=3)

    sure.place(x=850, y=200)

def judge():  # 判断结果

    global true

    global false

    global score

    global topic

    global result

    global true_result

    if true + false == 5:

        msgbox.showinfo('温馨提示', '恭喜您已做完所有题目!!!')

        answer["text"] = "用户名:" + name.get() + "\n已答题数:" + str(true + false) + "\n做对题数:" + str(true) + "\n做错题数:" \

                         + str(false) + "\n测试时长:" + str(counter) + "s" + "\n测试成绩:" + str(score) + "\n答题完毕!!!"

        answer.place(x=540, y=400)

    else:

        print(getNum(num, num2), result)

        if getNum(num, num2) == result:

            true += 1

            score += 20

        else:

            false += 1

        answer["text"] = "总题数:5\n已答题数:" + str(true + false) + "\n已做对题数:" + str(true) + "\n做错题数:" + str(

            false) + "\n得分:" + str(

            score)

        answer.place(x=540, y=400)

        p = suanshi()

        true_result["text"] = "上一题题目:" + topic + "\n上一题正确答案:" + str(result)

        equation["text"] = p[0]

        result = p[1]

        equation.place(x=540, y=200)

        true_result.place(x=540, y=300)

for i in range(5):  # 生成5个上珠

    button1[i] = Button(tk, image=backround_image)

    button1[i].bind("<Button-1>", button_click)

    button1[i].bind("<Button-3>", button_click_back)

    button1[i]["bg"] = "ivory"

    button1[i]["border"] = "0"

    button1[i].place(x=40 + 100 * i, y=50 + 70)

for i in range(4):  # 四行,每行生成5个下珠

    for j in range(5):

        button2[i][j] = Button(tk, image=backround_image2)

        button2[i][j].bind("<Button-1>", button_click)

        button2[i][j].bind("<Button-3>", button_click_back)

        button2[i][j]["bg"] = "ivory"

        button2[i][j]["border"] = "0"

        button2[i][j].place(x=40 + 100 * j, y=210 + 70 * (i + 1))

st = Button(text="启动测试", command=start, width=50, height=10)

st.place(x=600, y=100)

tk.mainloop()

标签:num2,40,button2,num,place,4.21,100
From: https://www.cnblogs.com/gjsgjs/p/18248543

相关文章

  • 2024.4.21 模拟赛
    Aperm首先若\((i+j)\)为奇数则需要满足其中一个是奇数,另一个必须是偶数。若\(k=0\),那么要求\(A_i\)和\(A_j\)同号,也就是所有数必须都是同一奇偶性。若满足则答案为\(n!\),否则为\(0\)。若\(k=1\),那么要求\(A_i\)和\(A_j\)异号。奇下标位置为\(\lceil\frac{n......
  • 上周热点回顾(4.15-4.21)
    热点随笔:· 博客园商业化之路-开篇:开源的脚步,商业化的出路 (博客园团队)· 经过腾讯云这波故障,我想表扬的点和学到的职场保命法则。 (why技术)· 一周涨15kStar的开源项目「GitHub热点速览」 (削微寒)· 面试官:为什么忘记密码要重置而不是告诉你原密码? (JavaGuide)·......
  • 4.21第四天冲刺
    晨会1.人员:袁兴兰、齐飞跃、王瑞2.会议讨论1)全组整合前端2)遇到跨域访问的限制,导致浏览器阻止跨域请求3.任务看板 4.合照 5.燃尽图 ......
  • 4.21
    今天上午去君乐宝实践,下午一直在思考我们项目的接口文档该如何写,搜索了很多资料,发现通过官方的接口不仅需要申请官方的软件ID,还需要一些我们普通账户无法搞到的东西,所以我们又开始思考提前准备收款码,进行所谓的线下支付,不过这样的话没有官方的中间管控,安全性会相对降低很多,一直无......
  • 4.21第四天冲刺
    晨会1.人员:袁兴兰、齐飞跃、王瑞2.会议讨论袁兴兰:1)昨天完成寻找免费api,完成博客的整理2)今天打算收集数据,美化页面3)没有遇到问题齐飞跃:1)昨天学习调用第三方库或第三方api2)今天完成优化api返回的结果3)没有遇到问题王瑞:1)昨天......
  • 4.2122数学强基
    4.2021数学强基椭圆一\(MF_1=r,MF_2=2a-r\)\((x+c)^2+y^2=r^2,(x-c)^2+y^2=(2a-r)^2\)分别以两个定点为圆心半径和为定值动圆交点轨迹二\(MF_1=a+m_0-r,MF_2=a-m_0+r\),\(m_0\)为定值\(\sqrt{(x+c)^2+y^2}=a+m_0-r,\sqrt{(x-c)^2+y^2}=a-m_0+r\)\((X+c)^2+Y^2=(a+m_0)^2,......
  • 4.21
    求助:在学校里被同学骂了怎么办明明什么也没做还是每天被骂好好说也说了,不好好说也说了,之前有做错什么也已经道过歉了骂也骂不过,打也打不过,俩人一块被开回去还觉得亏求一个解决方法接下来发生的事情是:他就坐在我前面,然而我不想看见他我一看见他我就会想象我掏出一把刀捅他......
  • 2015.4.21.09.05_多态_2015.4.21_深入理解java多态性_0.01
    深入理解Java多态性多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。多态有两种表现形式:重载和覆盖首先说重载(overload),是发生在同一类中。与什么父类......
  • 4.21
    学习时间:2h代码量:200我今天上了软件工程课,小组作业写的不太合格,我们争取这个假期结束之前完成更改我开始了补习html遗漏的知识,学习了很多的标签,和很多属性<%@pageimport="DAO.dao"%><%@pageimport="java.sql.*"language="java"contentType="text/html;charset=utf-8"......
  • 4.21今日总结
    内置信号和自定义槽使用实例实现过程同上述步骤一样。槽函数showMsg为自定义函数。信号与槽:self.pushButton.clicked.connect(self.showMsg)完整代码如下(可直接拷贝运行,字体加粗部分为添加部分):#-*-coding:utf-8-*-#Formimplementationgeneratedfromreadinguifile......