当前位置 : 主页 > 编程语言 > python >

教你用Python实现抽奖式随机提问

来源:互联网 收集:自由互联 发布时间:2023-02-04
案例介绍 欢迎来的我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用Python编程实战案例,做一个简易的随机提问器。随机提问器主要实现随机,乱序,提取的功能。通过

案例介绍

欢迎来的我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用Python编程实战案例,做一个简易的随机提问器。随机提问器主要实现随机,乱序,提取的功能。通过实战我们将学会Python内置tkinter的语法知识。

案例演示

我们点击“开始”,学生名字开始滚动;点击“停”,被抽中的学生将“中奖”

案例设计

Python实战案例-随机提问我们来看此案例的思维导图设计,包括案例描述,页面设计和源码学习。其中源码学习包含了random,time,tkinter三部分代码。

源码学习

进入核心代码学习,我们先来看利用random的核心代码。该段代码首先创建了学生列表,再利用赋值将该列表的值赋值给t,最后利用random.shuffle()函数对该列表进行乱序。

students = ['张三', '李四', '王五', '赵六', '周七', '钱八'] # 变量,用来控制是否滚动显示学生名单 root.flag = False def switch(): root.flag = True while root.flag: # 随机打乱学生名单 t = students[:] random.shuffle(t) t = itertools.cycle(t)

然后我们来编写核心的tkinter代码,通过btnStop.place用来滚动显示学生名单的3个Label组件,然后利用红色Label组件,表示中奖名单。

def btnStopClick(): # 单击“停”按钮结束滚动显示 root.flag = False time.sleep(0.3) tkinter.messagebox.showinfo('恭喜', '本次中奖:'+lbSecond['text']) btnStop = tkinter.Button(root, text='停', command=btnStopClick) btnStop.place(x=150, y=10, width=80, height=20) # 用来滚动显示学生名单的3个Label组件 # 可以根据需要进行添加,但要修改上面的线程函数代码 lbFirst = tkinter.Label(root, text='') lbFirst.place(x=80, y=60, width=100, height=20) # 红色Label组件,表示中奖名单 lbSecond = tkinter.Label(root, text='') lbSecond['fg'] = 'red' lbSecond.place(x=80, y=90, width=100, height=20) lbThird = tkinter.Label(root, text='') lbThird.place(x=80, y=120, width=100, height=20) # 启动tkinter主程序 root.mainloop()

总结思考

学习点 1、time.sleep(secs):位于 time 模块中的 sleep (secs) 函数,可以实现令当前执行的线程暂停 secs 秒后再继续执行

# 单击“停”按钮结束滚动显示 root.flag = False time.sleep(0.3) tkinter.messagebox.showinfo('恭喜', '本次中奖:'+lbSecond['text'])

2、threading:提供了一个比thread模块更高层的API来提供线程的并发性,这些线程并发运行并共享内存

# 每次单击“开始”按钮启动新线程 t = threading.Thread(target=switch) t.start()

3、Itertools:Python中,迭代器(Iterator)是常用来做惰性序列的对象,只有当迭代到某个值的时候,才会进行计算得出这个值

t = itertools.cycle(t) # 滚动显示

问答 1、time.sleep(secs)可以实现令当前执行的线程暂停 secs 秒后再继续执行对吗?2、threading是用来实现并发操作的吗?

关注我,跟着我每天学习一点点,让你不再枯燥,不再孤单..

全网可搜:小院里的霍大侠, 免费获取简单易懂的实战编程案例。编程/就业/副业/创业/资源。

网友评论