Python用Tkinter实现体育竞技分析

用Tkinter实现体育竞技分析

以下为代码实现:

整体思路比较简单,主要是体育竞技分析tkinter的实现,请读者结合注释观看即可!

from tkinter import *
import tkinter as tk
import random

def tc():                                          # 退出函数
    quit(0)

root=Tk()
root.title('乒乓球竞技分析模拟系统')
root.geometry("600x300+450+150")
                                                   # 球员A
label=Label(root,text="请输入球员A的能力值:",font=(14),fg="black").place(x=45, y=40)
entry1 = tk.Entry(root,width=25)
entry1.place(x=300, y=40)
                                                   # 球员B
label=Label(root,text="请输入球员B的能力值:",font=(14),fg="black").place(x=45, y=90)
entry2 = tk.Entry(root,width=25)
entry2.place(x=300, y=90)
                                                   # 开始比赛
label =Label(root,text='请输入要模拟的比赛场次:', font=(14),fg="black").place(x= 45,y= 140)
entry3 = tk.Entry(root,width=25)
entry3.place(x=300, y=140)

def main():
    aes = entry1.get()                             # 将输入的数据取出使用
    datea = float(aes)
    azs = entry2.get()
    dateb = float(azs)
    acc = entry3.get()
    n = int(acc)

    winsA, winsB = 0, 0                            # 初始化AB的胜场数
    for i in range(n):
        scoreA, scoreB = 0, 0                      # 初始化AB的得分
        first = random.randint(0, 2)  # 随机发球
        while not (scoreA == 11 or scoreB == 11):  # 用while循环来执行比赛,先赢够11球胜利
            if first == 0:
                if random.random() < datea:        # random() 方法返回随机生成的一个实数,它在[0,1)范围内。
                    scoreA += 1                    # 用随机数来和能力值比较从而分出胜负
                else:
                    first = 1
            else:
                if random.random() < dateb:
                    scoreB += 1
                else:
                    first = 0
        if scoreA > scoreB:                        # 先得够11分者赢一局
            winsA += 1
        else:
            winsB += 1

    root2=tk.Tk()                                  # 数据在新窗口上打印
    root2.title('比赛结果')
    root2.geometry("500x200+500+200")
    lable=Label(root2, text='模拟的比赛结果如下:', font=(30))
    lable.pack()
    lable=Label(root2, text='竞技分析开始,共模拟{}场比赛'.format(n),font=(22),fg='purple')
    lable.pack()
    lable=Label(root2, text='选手A获胜{}场比赛,占比{:.3f}%'.format(winsA, winsA / n *100),font=(22),fg='purple')
    lable.pack()
    lable=Label(root2, text='选手B获胜{}场比赛,占比{:.3f}%'.format(winsB, winsB / n *100),font=(22),fg='purple')
    lable.pack()
    tk.Button(root2, text='退出', command=tc, font=(15)).pack()

button = tk.Button(root,text='开始模拟比赛',command=main,width=10,height=2).place(x=200,y=230)

button = tk.Button(root,text='退出',command=tc,width=5,height=2).place(x=350,y=230)

root.mainloop()

    由于函数分块导致entry输入的数据只能为‘str’类型,故无法使用相关数据进行计算(也可能是我还没找到比较合适的处理方法),目前找到的对策是在button引用的command函数里可以实现对数据的强制转换,从而实现后面的数据运算。

    整体结构不难,由于笔者嫌麻烦就没有再把函数分装了,因为中间把函数分块后发现数据的引用变麻烦了,所以索性把所有功能放在button的引用函数里。也只是课程的一个小实验,故也没有页面美化加图片之类的操作0.0~~

下面是运行结果示意:

7123bd3a73cb4d4ebcc9f97b76da4599.png

c568fabfd4d74114afa770d95c86b28b.png 

 

 

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值