鱼C论坛

 找回密码
 立即注册
查看: 2203|回复: 4

[作品展示] 上次看到有一个C语言写的计算题程序,自己写了Python版

[复制链接]
发表于 2023-1-11 15:57:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 陶远航 于 2023-1-11 16:04 编辑

上次看到有一个C语言写的计算题程序,下载了来,结果bug一堆,自己用了一个小时用Python做了一个UI版,源码贴在下面,求评分(没鱼币了)
c语言程序:
https://fishc.com.cn/thread-223215-1-1.html
源码:
import tkinter as tk
import tkinter.messagebox
import random
try:
    import easygui
except:
    tk.messagebox.showerror("无法导入easygui模块!")

win=tk.Tk()
win.title("计算题")
win.geometry("270x130")
win.resizable(width=False, height=False)
var_num=tk.StringVar()
var_num.set('')
var_type=tk.StringVar()
var_type.set('')
def fuhao():
    pass

def ques(a,b):
    if a=="1":
        fuhao= "+"
    elif a=="2":
        fuhao= "-"
    elif a=="3":
        fuhao= "×"
    else:
        fuhao= "÷"
    num=b
    _type=a
    score=0
    for i in range(num):
        a=random.randint(0,100)
        b=random.randint(0,100)
        y_ans=int(easygui.enterbox((a,fuhao,b),"计算题"))
        if fuhao=="+":
            r_ans=a+b
        elif fuhao=="-":
            r_answer=a-b
        elif fuhao=="×":
            r_answer=a*b
        else:
            r_answer=a/b
        if y_ans==r_ans:
            print("Right")
            score+=100/num
        else:
            print("Wrong")
    tk.messagebox.showinfo("得分",score)

def start():
    ques_num=var_num.get()
    _type_num=var_type.get()
    if _type_num in ["1","2","3","4"]:
        ques_num=int(ques_num)
        ques(_type_num,ques_num)
    elif _type_num=="":
        tk.messagebox.showinfo("计算题",'输入的类型为空,如需帮助,请按"类型"按钮')
    else:
        tk.messagebox.showinfo("计算题",'没有更多类型了,如需帮助,请按"类型"按钮')

def jst_exit():
    win.quit()
    win.destroy()

def more():
    tk.messagebox.showinfo("类型","开发中...")

def types():
    tk.messagebox.showinfo("类型","""1代表加法,2代表减法,3代表乘法,4代表除法
只需在题目类型输入框中填入对应的数字即可""")

labname=tk.Label(win,text='题目数量:',width=80)
labpwd=tk.Label(win,text='题目类型:',width=200)
entname=tk.Entry(win,width=100,textvariable=var_num)
entpwd=tk.Entry(win,width=100,textvariable=var_type)
but_Ok=tk.Button(win,text='开始',command=start)
but_Cancel=tk.Button(win,text='退出',command=jst_exit)
but_quit=tk.Button(win,text='可选',command=more)
but_type=tk.Button(win,text='类型',command=types)
labname.place(x=20,y=10,width=80,height=20)
labpwd.place(x=20,y=40,width=80,height=20)
entname.place(x=100,y=10,width=140,height=20)
entpwd.place(x=100,y=40,width=80,height=20)
but_Ok.place(x=30,y=80,width=50,height=20)
but_Cancel.place(x=110,y=80,width=50,height=20)
but_quit.place(x=190,y=80,width=50,height=20)
but_type.place(x=190,y=40,width=50,height=20)

win.mainloop()

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
额外减小 + 1 + 1 大佬

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-1-11 15:57:46 | 显示全部楼层
求评分求评分求评分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-11 15:58:51 | 显示全部楼层
我这个源码可能看起来有点麻烦,还请大佬简化一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-11 16:11:13 | 显示全部楼层
改进:
import tkinter as tk
import tkinter.messagebox
import random
import os
try:
    import easygui
except:
    try:
        if os.system("pip install easygui") == 1:
            raise Exception
    except:
        os.system("pip install --upgrade pip")
        try:
            if os.system("pip install easygui")==1:
                 raise Exception
        except:
            print("安装失败")
            exit(-1)
        else:
            import easygui
    else:
         import easygui
else:
    import easygui
win=tk.Tk()
win.title("计算题")
win.geometry("270x130")
win.resizable(width=False, height=False)
var_num=tk.StringVar()
var_num.set('')
var_type=tk.StringVar()
var_type.set('')
def fuhao():
    pass

def ques(a,b):
    if a=="1":
        fuhao= "+"
    elif a=="2":
        fuhao= "-"
    elif a=="3":
        fuhao= "×"
    else:
        fuhao= "÷"
    num=b
    _type=a
    score=0
    for i in range(num):
        a=random.randint(0,100)
        b=random.randint(0,100)
        y_ans=int(easygui.enterbox((a,fuhao,b),"计算题"))
        if fuhao=="+":
            r_ans=a+b
        elif fuhao=="-":
            r_answer=a-b
        elif fuhao=="×":
            r_answer=a*b
        else:
            r_answer=a/b
        if y_ans==r_ans:
            print("Right")
            score+=100/num
        else:
            print("Wrong")
    tk.messagebox.showinfo("得分",score)

def start():
    ques_num=var_num.get()
    _type_num=var_type.get()
    if _type_num in ["1","2","3","4"]:
        ques_num=int(ques_num)
        ques(_type_num,ques_num)
    elif _type_num=="":
        tk.messagebox.showinfo("计算题",'输入的类型为空,如需帮助,请按"类型"按钮')
    else:
        tk.messagebox.showinfo("计算题",'没有更多类型了,如需帮助,请按"类型"按钮')

def jst_exit():
    win.quit()
    win.destroy()

def more():
    tk.messagebox.showinfo("类型","开发中...")

def types():
    tk.messagebox.showinfo("类型","""1代表加法,2代表减法,3代表乘法,4代表除法
只需在题目类型输入框中填入对应的数字即可""")

labname=tk.Label(win,text='题目数量:',width=80)
labpwd=tk.Label(win,text='题目类型:',width=200)
entname=tk.Entry(win,width=100,textvariable=var_num)
entpwd=tk.Entry(win,width=100,textvariable=var_type)
but_Ok=tk.Button(win,text='开始',command=start)
but_Cancel=tk.Button(win,text='退出',command=jst_exit)
but_quit=tk.Button(win,text='可选',command=more)
but_type=tk.Button(win,text='类型',command=types)
labname.place(x=20,y=10,width=80,height=20)
labpwd.place(x=20,y=40,width=80,height=20)
entname.place(x=100,y=10,width=140,height=20)
entpwd.place(x=100,y=40,width=80,height=20)
but_Ok.place(x=30,y=80,width=50,height=20)
but_Cancel.place(x=110,y=80,width=50,height=20)
but_quit.place(x=190,y=80,width=50,height=20)
but_type.place(x=190,y=40,width=50,height=20)

win.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-11 16:20:19 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-24 23:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表