Python語言編寫智力問答小游戲功能
本篇博文將使用Python代碼語言簡單編寫一個(gè)輕松益智的小游戲,效果如下所示:
1、設(shè)計(jì)思路
本項(xiàng)目使用SQLite建立問答題庫,每道題包括4個(gè)選項(xiàng)答案(3個(gè)正確答案,1個(gè)錯(cuò)誤答案)。每道題都有一定分值,根據(jù)用戶的答題效率,自動(dòng)計(jì)算出最后的答題成績。
2、建立題庫
使用SQLite數(shù)據(jù)庫建立題庫,本質(zhì)上就是SQL語句,創(chuàng)建exam表,實(shí)現(xiàn)代碼如下所示:
#導(dǎo)入SQLite驅(qū)動(dòng) import sqlite3 # 連接到SQLite數(shù)據(jù)庫,數(shù)據(jù)庫文件是test.db # 如果文件不存在,會(huì)自動(dòng)在當(dāng)前目錄創(chuàng)建: conn = sqlite3.connect('test2.db') cursor = conn.cursor()# 創(chuàng)建一個(gè)Cursor: #cursor.execute("delete from exam") # 執(zhí)行一條SQL語句,創(chuàng)建exam表: cursor.execute('CREATE TABLE [exam] ([question] VARCHAR(80) NULL,[Answer_A] VARCHAR(1) NULL,[Answer_B] VARCHAR(1) NULL,[Answer_C] VARCHAR(1) NULL,[Answer_D] VARCHAR(1) NULL,[right_Answer] VARCHAR(1) NULL)') # 繼續(xù)執(zhí)行一條SQL語句,插入一條記錄: cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('哈雷慧星的平均周期為', '54年', '56年', '73年', '83年', 'C')") cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('夜郎自大中“夜郎”指的是現(xiàn)在哪個(gè)地方?', '貴州', '云南', '廣西', '福建', 'A')") cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('在中國歷史上是誰發(fā)明了麻藥', '孫思邈', '華佗', '張仲景', '扁鵲', 'B')") cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('京劇中花旦是指', '年輕男子', '年輕女子', '年長男子', '年長女子', 'B')") cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('籃球比賽每隊(duì)幾人?', '4', '5', '6', '7', 'B')") cursor.execute("insert into exam (question, Answer_A,Answer_B,Answer_C,Answer_D,right_Answer) values ('在天愿作比翼鳥,在地愿為連理枝。講述的是誰的愛情故事?', '焦鐘卿和劉蘭芝', '梁山伯與祝英臺(tái)', '崔鶯鶯和張生', '楊貴妃和唐明皇', 'D')") # 通過rowcount獲得插入的行數(shù): print(cursor.rowcount) #1 # 關(guān)閉Cursor: cursor.close() # 提交事務(wù): conn.commit() # 關(guān)閉Connection: conn.close()
3、答題設(shè)計(jì)
從建立好的題庫數(shù)據(jù)庫中讀取試題信息,callNext()函數(shù)實(shí)現(xiàn)判斷用戶選擇答案的正誤,正確則加10分,錯(cuò)誤不加分。并判斷用戶是否做完,如果沒做完則將下一題的題目信息顯示到timu標(biāo)簽,而4個(gè)選項(xiàng)顯示到radio1~ radio4這4個(gè)單選按鈕上;callResult()函數(shù)在GUI上顯示此時(shí)答題得分,實(shí)現(xiàn)代碼如下所示:
conn = sqlite3.connect('test2.db') cursor = conn.cursor() # 執(zhí)行查詢語句: cursor.execute('select * from exam') # 獲得查詢結(jié)果集: values = cursor.fetchall() print(values) print('記錄數(shù):',len(values)) for k in range(len(values)): print(k,values[k][0]) cursor.close() conn.close() def callNext(): global k global score useranswer=r.get() print (r.get()) #獲取被選中單選按鈕變量值 if useranswer==values[k][5]: showinfo("恭喜","恭喜你對(duì)了!") score+=10 else: showinfo("遺憾","遺憾你錯(cuò)了!") k=k+1 if k>=len(values): showinfo("提示","題目做完了") return #顯示下一題 timu["text"]=values[k][0] radio1["text"]=values[k][1] radio2["text"]=values[k][2] radio3["text"]=values[k][3] radio4["text"]=values[k][4] r.set('E') def callResult(): showinfo("你的得分",str(score))
4、GUI設(shè)計(jì)
最后設(shè)計(jì)GUI,添加兩個(gè)Frame組件組件,實(shí)現(xiàn)選擇答案、確認(rèn)和查看結(jié)果功能,實(shí)現(xiàn)代碼如下所示:
import tkinter from tkinter import * from tkinter.messagebox import * root=tkinter.Tk() root.title('Python智力問答游戲') root.geometry("500x200") r=tkinter.StringVar() #創(chuàng)建StringVar對(duì)象 r.set('E') #設(shè)置初始值為'E',初始沒選中 k=0 score=0 timu=tkinter.Label(root,text=values[k][0]) #題目 timu.pack() f1 = Frame(root) #創(chuàng)建第1個(gè)Frame組件 f1.pack() radio1=tkinter.Radiobutton(f1,variable=r,value='A',text=values[k][1]) radio1.pack() radio2=tkinter.Radiobutton(f1,variable=r,value='B',text=values[k][2]) radio2.pack() radio3=tkinter.Radiobutton(f1,variable=r,value='C',text=values[k][3]) radio3.pack() radio4=tkinter.Radiobutton(f1,variable=r,value='D',text=values[k][4]) radio4.pack() f2 = Frame(root) #創(chuàng)建第2個(gè)Frame組件 f2.pack() Button(f2,text = '下一題',command=callNext).pack(side = LEFT) Button(f2,text = '結(jié) 果',command=callResult).pack(side = LEFT) root.mainloop()
到此這篇關(guān)于Python語言編寫智力問答小游戲功能的文章就介紹到這了,更多相關(guān)Python 智力問答小游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中的random.choices函數(shù)用法詳解
這篇文章主要給大家介紹了關(guān)于Python中random.choices函數(shù)用法的相關(guān)資料,random.random()?的功能是隨機(jī)返回一個(gè)?0-1范圍內(nèi)的浮點(diǎn)數(shù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08Python flask框架實(shí)現(xiàn)瀏覽器點(diǎn)擊自定義跳轉(zhuǎn)頁面
這篇文章主要介紹了Python flask框架實(shí)現(xiàn)瀏覽器點(diǎn)擊自定義跳轉(zhuǎn)頁面,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06python使用matplotlib繪圖時(shí)圖例顯示問題的解決
matplotlib 是python最著名的繪圖庫,它提供了一整套和matlab相似的命令A(yù)PI,十分適合交互式地進(jìn)行制圖。下面這篇文章主要給大家介紹了在python使用matplotlib繪圖時(shí)圖例顯示問題的解決方法,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。2017-04-04python異步編程之a(chǎn)syncio低階API的使用詳解
asyncio中低階API的種類很多,涉及到開發(fā)的5個(gè)方面,這篇文章主要為大家詳細(xì)介紹了這些低階API的具體使用,感興趣的小伙伴可以學(xué)習(xí)一下2024-01-01PyHacker實(shí)現(xiàn)網(wǎng)站后臺(tái)掃描器編寫指南
這篇文章主要為大家介紹了PyHacker實(shí)現(xiàn)網(wǎng)站后臺(tái)掃描器編寫指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05matplotlib.pyplot.plot()參數(shù)使用詳解
這篇文章主要介紹了matplotlib.pyplot.plot()參數(shù)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Tornado服務(wù)器中綁定域名、虛擬主機(jī)的方法
這篇文章主要介紹了Tornado服務(wù)器中綁定域名、虛擬主機(jī)的方法,本人查看了Tornado才得的方法,特此分享,需要的朋友可以參考下2014-08-08