成绩生成器--简单版

软件界面如下:

5e510ef108dc44858995dde5d9ea9170.png

 生成一组成绩

b72194aec316468d952c788265672655.png

 7个成绩的均值即为84

软件链接如下,链接永久有效

链接:https://pan.baidu.com/s/1l-0g3v1yy1B0f96nLIj6qA?pwd=489q 
提取码:489q

软件源码如下:

from tkinter import *
import random
class app(Tk):
    def __init__(self,size='800x500'):
        """构造根窗口"""
        super().__init__()
        #标签
        self.__labels = {}
        self.__labelnum = 0
        #文本框
        self.__texts = {}
        self.__textnum = 0
        #按钮
        self.__buttons = {}
        self.__buttonnum = 0
        #输入框
        self.__entrys = {}
        self.__entrynum = 0
        self.title('root')
        self.geometry(size)
    #name-组件id
    #bg-背景色、fg-前景色、font-字体
    # x,y-左上角第一个像素位置坐标
    #relief-3D浮雕样式,有FLAT、RAISED、SUNKEN、GROOVE、RIDGE
    def create_label(self,
                     #标签样式
                     name='label',      bg='#d3fbfb',        \
                     fg='red',          font=('宋体',15),  \
                     width=100,          height=50,            \
                     relief=SUNKEN,                          \
                     #标签布局,采用place()绝对位置法
                     x=100,y=50
                    ):
        self.__labelnum += 1
        self.__labels[name] = {}
        self.__labels[name]['strvar'] = StringVar()
        self.__labels[name]['strvar'].set(name)
        self.__labels[name]['label'] = Label(self, textvariable=self.__labels[name]['strvar'], \
                                 bg=bg, \
                                 fg=fg, \
                                 font=font, \
                                 relief=relief)
        self.__labels[name]['label'].place(x=x,y=y,height=height,width=width)
    def set_label(self,name,str):
        self.__labels[name]['strvar'].set(str)
    @property
    def labelnum(self):
        return self.__labelnum
    def labels(self,name):
        return self.__labels[name]['label']

    # name-组件id
    # bg-背景色、fg-前景色、font-字体
    # relief-3D浮雕样式,有FLAT、RAISED、SUNKEN、GROOVE、RIDGE
    #x,y-左上角第一个像素位置坐标
    def create_text(self,
                    name='text', bg='#d3fbfb', \
                    fg='black', font=('宋体', 20), \
                    width=500, height=300, \
                    relief=SUNKEN, \
                    # 布局,采用place()绝对位置法
                    x=300, y=20
                    ):
        self.__textnum += 1
        self.__texts[name] = {}
        self.__texts[name]['text'] = Text(self,
                                          bg=bg, \
                                          fg=fg, \
                                          font=font, \
                                          relief=relief
                                          )
        self.__texts[name]['text'].place(x=x, y=y, height=height, width=width)
    def text_set_here(self,name,here=1.0):
        '''用‘here’标记一个位置'''
        return self.__texts[name]['text'].mark_set('here',here)
    def text_insert(self,name,mark='insert',str=''):
        '''mark可以设置为 ‘here’ '''
        self.__texts[name]['text'].insert(mark,str)
    def text_get(self,name,first=1.0,last='end'):
        '''给定first和last来索引文本框中的字符串'''
        return self.__texts[name]['text'].get(first,last)
    def clear_text(self,name):
        '''清空文本框'''
        self.__texts[name]['text'].delete(1.0, 'end')
    @property
    def textnum(self):
        return self.__textnum
    def texts(self,name):
        return self.__texts[name]['text']

    # name-组件id
    # bg-背景色、fg-前景色、font-字体
    # relief-3D浮雕样式,有FLAT、RAISED、SUNKEN、GROOVE、RIDGE
    # command-事件响应函数
    # x,y-左上角第一个像素位置坐标
    def create_button(self,
                     #标签样式
                     name='button',      bg='white',        \
                     fg='black',          font=('宋体',15),  \
                     width=100,          height=40,            \
                     relief=RIDGE,     command = None, \
                     #标签布局,采用place()绝对位置法
                     x=100,y=50
                    ):
        self.__buttonnum += 1
        self.__buttons[name] = {}
        self.__buttons[name]['strvar'] = StringVar()
        self.__buttons[name]['strvar'].set('按钮')
        self.__buttons[name]['button'] = Button(self,
                                                bg=bg, \
                                                fg=fg, \
                                                textvariable=self.__buttons[name]['strvar'],
                                                font=font, \
                                                relief=relief,\
                                                command = command)
        self.__buttons[name]['button'].place(x=x,y=y,height=height,width=width)
    def set_button_text(self,name,str):
        self.__buttons[name]['strvar'].set(str)
    @property
    def buttonnum(self):
        return self.__buttonnum
    def buttons(self,name):
        return self.__buttons[name]['button']

    # name-组件id
    # bg-背景色、fg-前景色、font-字体
    # relief-3D浮雕样式,有FLAT、RAISED、SUNKEN、GROOVE、RIDGE
    #x,y-左上角第一个像素位置坐标
    def create_entry(self,
                    name='entry', bg='#d3fbfb', \
                    fg='red', font=('宋体', 20), \
                    width=200, height=30, \
                    relief=SUNKEN, \
                    # 布局,采用place()绝对位置法
                    x=300, y=20
                    ):
        self.__entrynum += 1
        self.__entrys[name] = {}
        self.__entrys[name]['strvar'] = StringVar()
        self.__entrys[name]['strvar'].set('请输入内容')
        self.__entrys[name]['entry'] = Entry(self,
                                             bg=bg, \
                                             fg=fg, \
                                             font=font, \
                                             relief=relief,\
                                             textvariable=self.__entrys[name]['strvar']
                                             )
        self.__entrys[name]['entry'].place(x=x, y=y, height=height, width=width)
    def clear_entry(self,name):
        self.__entrys[name]['entry'].delete(0,'end')
    def entry_get(self,name):
        return self.__entrys[name]['entry'].get()
    def set_entry_text(self,name,str):
        self.__entrys[name]['strvar'].set(str)
    @property
    def entrynum(self):
        return self.__buttonnum
    def entrys(self, name):
        return self.__entrys[name]['entry']



anchor = (20,20)
def func1():
    top.clear_entry('en1')
    top.clear_text('txt1')
def func2():
    top.clear_text('txt1')
    n = int(top.entry_get('en2'))
    average = int(top.entry_get('en1'))
    num = int(top.entry_get('en3'))
    up = average + n
    down = average - n
    a = [None] * num
    i = 0
    b = 0
    for x in a:
        a[i] = random.randint(down, up)
        i += 1
    while True:
        a[1:] = a[0:num - 1]
        a[0] = random.randint(down, up)
        for x in a:
            b = b + x
        if (b // num == average and b % num == 0):
            top.text_insert('txt1',str=str(a))
            break
        b = 0
top = app('800x500')
top.create_label('l1',x=anchor[0],y=anchor[1],width=100,height=35,bg='yellow')
top.create_label('l2',x=anchor[0],y=anchor[1]+35,width=100,height=35)
top.create_label('l3',x=anchor[0],y=anchor[1]+70,width=100,height=35)
top.create_label('l4',x=anchor[0]+200,y=anchor[1],width=250,height=35,bg='yellow')
top.create_label('l5',x=anchor[0],y=anchor[1]+105,width=100,height=35)
top.create_entry('en1',x=anchor[0]+100,y=anchor[1]+35,width=100,height=35)
top.create_entry('en2',x=anchor[0]+100,y=anchor[1]+70,width=100,height=35)
top.create_entry('en3',x=anchor[0]+100,y=anchor[1]+105,width=100,height=35)
top.create_button('bt1',x=anchor[0]+100,y=anchor[1],width=100,height=35,command=func1)
top.create_button('bt2',x=anchor[0]+200,y=anchor[1]+35,width=250,height=105,command=func2)
top.create_text('txt1',x=anchor[0],y=anchor[1]+140,width=450,height=200,bg='white')
top.set_label('l1','基本操作')
top.set_label('l2','均分')
top.set_label('l3','n')
top.set_label('l4','生成的成绩范围:均分+-n')
top.set_label('l5','生成数量')
top.set_button_text('bt1','清空')
top.set_button_text('bt2','generate')
top.set_entry_text('en1','')
top.set_entry_text('en2','')
top.set_entry_text('en1','')
top.set_entry_text('en3','')
mainloop()

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较复杂的项目,需要涵盖许多方面的知识点,如随机数生成、计时器、输入输出、字符串处理、列表操作等等。不过我会尽力给你提供一个框架,让你能够更好地理解和完成这个项目。 首先,我们需要保存玩家名称、历史成绩、最高成绩等信息。可以使用一个字典来保存这些信息,例如: ```python player_info = { "name": "玩家1", "history_score": [10, 12, 8, 16, 14], # 历史成绩 "highest_score": 16, # 最高成绩 "current_score": 0 # 当前成绩 } ``` 然后,我们需要生成四个随机数,并且让玩家输入表达式。可以使用 `random` 模块来生成随机数,例如: ```python import random num1 = random.randint(1, 13) num2 = random.randint(1, 13) num3 = random.randint(1, 13) num4 = random.randint(1, 13) print("随机生成的四个数字为:{}、{}、{}、{}".format(num1, num2, num3, num4)) expression = input("请在规定时间内输入表达式,使得式子等于24:") ``` 接下来,我们需要对输入的字符串进行解析和计算。可以使用 `eval` 函数来计算字符串表达式的值,例如: ```python result = eval(expression) if result == 24: print("恭喜你,回答正确!") player_info["current_score"] += 2 # 游戏得分+2 else: print("很遗憾,回答错误!") player_info["current_score"] -= 1 # 生命值-1 ``` 最后,我们需要加入计时器功能,让玩家在规定时间内输入表达式。可以使用 `time` 模块来实现计时器,例如: ```python import time start_time = time.time() # 记录开始时间 time_limit = 10 # 设定时间限制为10秒 while True: elapsed_time = time.time() - start_time # 计算已经过去的时间 if elapsed_time >= time_limit: print("时间到,游戏结束!") break expression = input("请在规定时间内输入表达式,使得式子等于24:") result = eval(expression) if result == 24: print("恭喜你,回答正确!") player_info["current_score"] += 2 else: print("很遗憾,回答错误!") player_info["current_score"] -= 1 print("本次游戏得分为:{}".format(player_info["current_score"])) ``` 至于如何保存玩家信息、记录历史成绩等,可以使用文件读写操作来实现。这里只给出一个简单的示例: ```python import json # 读取玩家信息 with open("player_info.json", "r") as f: player_info = json.load(f) # 更新玩家信息 player_info["name"] = "玩家2" player_info["history_score"].append(player_info["current_score"]) player_info["highest_score"] = max(player_info["history_score"]) player_info["current_score"] = 0 # 保存玩家信息 with open("player_info.json", "w") as f: json.dump(player_info, f) ``` 这只是一个简单的框架,具体的实现细节还需要你自己思考和完善。希望能够对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值