鱼C论坛

 找回密码
 立即注册
查看: 9865|回复: 43

[已解决]如何用python编写一个程序随机从题库抽取题目并显示答案?

[复制链接]
发表于 2019-10-24 23:35:23 | 显示全部楼层 |阅读模式
30鱼币
类似图片上这种界面,点击题目后可以从题库中随机抽取题目显示并给予答题者一定的时间进行回答。
请各位大佬帮帮我,写一个大概的框架出来,感谢~!
学校的活动需要用到,我自己短时间不会写这种程序,希望能得到帮助!
最佳答案
2019-10-24 23:35:24
本帖最后由 XiaoPaiShen 于 2019-11-1 11:03 编辑
  1. from tkinter import *
  2. from tkinter import scrolledtext

  3. class GuessGui:
  4.     def __init__(self, title):
  5.         self.root = Tk()
  6.         self.root.title(title)
  7.         self.root.geometry('800x600')              

  8.     def build_menu(self):
  9.         root_menu = Menu(self.root)        

  10.         # intializes a new sub menu in the root menu
  11.         file_menu = Menu(root_menu)
  12.         root_menu.add_cascade(label = "菜单", menu = file_menu)        
  13.         
  14.         file_menu.add_command(label = "显示记分板")
  15.         file_menu.add_command(label = "隐藏记分板")
  16.         file_menu.add_separator()
  17.         file_menu.add_command(label = "退出", command = self.root.quit)

  18.         self.root.config(menu = root_menu)   

  19.    
  20.     def build_timer(self, index):
  21.         
  22.         self.timer = Label(self.root, text='00:00', font=('times', 20), fg='red')
  23.         self.timer.grid(row=index, column=0, columnspan=8)

  24.     def build_content(self, index):
  25.         group1 = LabelFrame(self.root, text='题目', padx=5, pady=5)
  26.         group1.grid(row=index, column=0, columnspan=8, padx=10, pady=10, sticky='ewns')
  27.         
  28.         self.root.rowconfigure(index, weight=1)
  29.         self.root.columnconfigure(0, weight=1)

  30.         group1.rowconfigure(0, weight=1)
  31.         group1.columnconfigure(0, weight=1)
  32.         
  33.         self.content = scrolledtext.ScrolledText(group1)
  34.         self.content.grid(row=0, column=0, sticky='ewns')
  35.         
  36.     def build_buttons(self, index):
  37.                
  38.         self.bu_tixing01 = Button(self.root, text='题型一', width=10)
  39.         self.bu_tixing01.grid(row=index,column=6, padx=10, pady=10, sticky='ew')
  40.         
  41.         self.bu_answer = Button(self.root, text='显示答案', width=10)
  42.         self.bu_answer.grid(row=index,column=7, padx=10, pady=10, sticky='ew')        

  43.         self.bu_tixing02 = Button(self.root, text='题型二', width=10)
  44.         self.bu_tixing02.grid(row=index+1,column=6, padx=10, pady=10, sticky='ew')        
  45.         
  46.         self.bu_assistance = Button(self.root, text='场外援助', width=10)
  47.         self.bu_assistance.grid(row=index+1,column=7, padx=10, pady=10, sticky='ew')        

  48.     def build_gui(self):
  49.         index = 0
  50.         self.build_menu()
  51.         self.build_timer(index)
  52.         self.build_content(index+1)
  53.         self.build_buttons(index+2)     

  54.     def main(self):
  55.         self.root.mainloop()

  56. if __name__ == '__main__':
  57.    
  58.     gui = GuessGui('竞猜游戏')
  59.     gui.build_gui()
  60.     gui.main()        
复制代码
@WQ~4@{Y[D5D189Y0JMWIEP.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-24 23:35:24 | 显示全部楼层    本楼为最佳答案   
本帖最后由 XiaoPaiShen 于 2019-11-1 11:03 编辑
  1. from tkinter import *
  2. from tkinter import scrolledtext

  3. class GuessGui:
  4.     def __init__(self, title):
  5.         self.root = Tk()
  6.         self.root.title(title)
  7.         self.root.geometry('800x600')              

  8.     def build_menu(self):
  9.         root_menu = Menu(self.root)        

  10.         # intializes a new sub menu in the root menu
  11.         file_menu = Menu(root_menu)
  12.         root_menu.add_cascade(label = "菜单", menu = file_menu)        
  13.         
  14.         file_menu.add_command(label = "显示记分板")
  15.         file_menu.add_command(label = "隐藏记分板")
  16.         file_menu.add_separator()
  17.         file_menu.add_command(label = "退出", command = self.root.quit)

  18.         self.root.config(menu = root_menu)   

  19.    
  20.     def build_timer(self, index):
  21.         
  22.         self.timer = Label(self.root, text='00:00', font=('times', 20), fg='red')
  23.         self.timer.grid(row=index, column=0, columnspan=8)

  24.     def build_content(self, index):
  25.         group1 = LabelFrame(self.root, text='题目', padx=5, pady=5)
  26.         group1.grid(row=index, column=0, columnspan=8, padx=10, pady=10, sticky='ewns')
  27.         
  28.         self.root.rowconfigure(index, weight=1)
  29.         self.root.columnconfigure(0, weight=1)

  30.         group1.rowconfigure(0, weight=1)
  31.         group1.columnconfigure(0, weight=1)
  32.         
  33.         self.content = scrolledtext.ScrolledText(group1)
  34.         self.content.grid(row=0, column=0, sticky='ewns')
  35.         
  36.     def build_buttons(self, index):
  37.                
  38.         self.bu_tixing01 = Button(self.root, text='题型一', width=10)
  39.         self.bu_tixing01.grid(row=index,column=6, padx=10, pady=10, sticky='ew')
  40.         
  41.         self.bu_answer = Button(self.root, text='显示答案', width=10)
  42.         self.bu_answer.grid(row=index,column=7, padx=10, pady=10, sticky='ew')        

  43.         self.bu_tixing02 = Button(self.root, text='题型二', width=10)
  44.         self.bu_tixing02.grid(row=index+1,column=6, padx=10, pady=10, sticky='ew')        
  45.         
  46.         self.bu_assistance = Button(self.root, text='场外援助', width=10)
  47.         self.bu_assistance.grid(row=index+1,column=7, padx=10, pady=10, sticky='ew')        

  48.     def build_gui(self):
  49.         index = 0
  50.         self.build_menu()
  51.         self.build_timer(index)
  52.         self.build_content(index+1)
  53.         self.build_buttons(index+2)     

  54.     def main(self):
  55.         self.root.mainloop()

  56. if __name__ == '__main__':
  57.    
  58.     gui = GuessGui('竞猜游戏')
  59.     gui.build_gui()
  60.     gui.main()        
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-25 05:43:53 | 显示全部楼层
题库是怎么存的?答案是怎么存的,如何能访问他们?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-10-25 14:54:56 | 显示全部楼层
XiaoPaiShen 发表于 2019-10-25 05:43
题库是怎么存的?答案是怎么存的,如何能访问他们?

题库是两个txt文档,题目按序号出好,然后每一题的下一行是答案
访问的话我觉得应该不困难,主要是我没掌握这方面的知识,最近又需要改一下这个程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-25 21:32:27 | 显示全部楼层
需要显示界面的部分吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-25 22:46:20 From FishC Mobile | 显示全部楼层
如果程序已经存在,只是修改某些功能就会容易些。完全从头开始就比较繁杂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-26 01:07:35 | 显示全部楼层
这个程序我也在制作中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-26 09:14:59 From FishC Mobile | 显示全部楼层
XiaoPaiShen 发表于 2019-10-25 05:43
题库是怎么存的?答案是怎么存的,如何能访问他们?

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

使用道具 举报

 楼主| 发表于 2019-10-26 17:19:52 | 显示全部楼层
阴阳神万物主 发表于 2019-10-25 21:32
需要显示界面的部分吗

对的,如果题库使用部分也能写好那就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-10-26 17:23:44 | 显示全部楼层
XiaoPaiShen 发表于 2019-10-25 22:46
如果程序已经存在,只是修改某些功能就会容易些。完全从头开始就比较繁杂

对啊,我也这样想,但是学长没留源码下来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-26 18:14:20 | 显示全部楼层
本帖最后由 阴阳神万物主 于 2019-10-26 20:13 编辑
xuanpeng123 发表于 2019-10-26 17:19
对的,如果题库使用部分也能写好那就好了


那么,可以把每个按钮要达到的效果说一下吗?包括左上角的菜单
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-27 20:35:27 | 显示全部楼层
本帖最后由 _2_ 于 2019-10-27 20:37 编辑
xuanpeng123 发表于 2019-10-26 17:23
对啊,我也这样想,但是学长没留源码下来


我找到一个简单的办法:
需要你辛苦一下,把题目和答案放到一个字典里,再把这些字典都放到一个列表里
最后用random模块的choice方法,随机取出一个字典
使用a["question"]和a["answer"]分别获取问题和答案
  1. >>> import random
  2. >>> Q1 = dict(question = "Q",answer = "A")
  3. >>> Q2 = dict(question = "QQ",answer = "AA")
  4. >>> q_bank = [Q1,Q2]
  5. >>> q_bank
  6. [{'question': 'Q', 'answer': 'A'}, {'question': 'QQ', 'answer': 'AA'}]
  7. >>> a = random.choice(q_bank)
  8. >>> a
  9. {'question': 'Q', 'answer': 'A'}
  10. >>> a["question"]
  11. 'Q'
  12. >>> a["answer"]
  13. 'A'
  14. >>>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-27 20:38:44 | 显示全部楼层
兄dei,看看 11#
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-29 08:40:49 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-10-30 01:12:16 | 显示全部楼层
本帖最后由 xuanpeng123 于 2019-10-30 01:19 编辑
阴阳神万物主 发表于 2019-10-26 18:14
那么,可以把每个按钮要达到的效果说一下吗?包括左上角的菜单


点击题型一,从第一个txt文件里随机取出一道题显示在屏幕上,并且开始倒计时20秒
点击题型二,从第二个txt文件里随机取出一道题显示在屏幕上,并且开始倒计时20秒
点击场外援助,倒计时60s
点击显示答案,屏幕上显示正确答案
左上角的菜单有四个按钮:
1.显示记分板
2.隐藏记分板
3.导入新题库至题型1
4.导入新题库至题型2

记分板还是有用的,3,4功能我看没什么必要,直接建立和文件夹里的txt文件的关系一样可以更换题库。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-10-30 01:13:50 | 显示全部楼层
_2_ 发表于 2019-10-27 20:38
兄dei,看看 11#

谢谢兄弟,但是我主要是要做一个界面,这个比较重要,因为学校活动要用到,简易代码其实我也会的。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-10-30 01:15:20 | 显示全部楼层
_2_ 发表于 2019-10-27 20:35
我找到一个简单的办法:
需要你辛苦一下,把题目和答案放到一个字典里,再把这些字典都放到一个列表里 ...

有心了兄弟,谢谢你!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-30 08:26:58 | 显示全部楼层
xuanpeng123 发表于 2019-10-25 14:54
题库是两个txt文档,题目按序号出好,然后每一题的下一行是答案
访问的话我觉得应该不困难,主要是我没 ...

建议学一下数据库
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-30 11:49:04 | 显示全部楼层
本帖最后由 阴阳神万物主 于 2019-10-30 12:42 编辑
xuanpeng123 发表于 2019-10-30 01:12
点击题型一,从第一个txt文件里随机取出一道题显示在屏幕上,并且开始倒计时20秒
点击题型二,从第二 ...


那么,倒计时结束以后的处理呢?
场外援助,是时间增加60秒还是变成60秒?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-30 12:44:02 From FishC Mobile | 显示全部楼层
阴阳神万物主 发表于 2019-10-30 11:49
那么,倒计时结束以后的处理呢?
场外援助,是时间增加60秒还是变成60秒?

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 07:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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