请选择 进入手机版 | 继续访问电脑版

利用爬虫技术获取英语单词,并通过tkinter库实现猜单词游戏

[复制链接]
冰宇 发表于 2021-1-3 11:56:14 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
使用爬虫技能获取英语单词,并通过tkinter库实现猜单词游戏

效果图如下:

你需要掌握的知识:
1.tkinter库
2.爬虫技能
总之,简朴易懂,源代码如下。
  1. #无网络条件下的单词表# words=['abstract', 'abstraction', 'accomplish', 'accuracy', 'affiliated', 'algorithm', 'algorithmic', 'alias', 'aliasing', 'allocate', 'alternative', 'ambiguous', 'anticipate', 'apparatus', 'arbitrary', 'archery', 'architecture', 'argument', 'arithmetic', 'ascending', 'assert', 'assignment', 'asymptotic', 'automobile', 'balance', 'binary', 'bind', 'bisection', 'blank', 'block', 'bookmark', 'bound', 'bundle', 'calculator', 'canopy', 'capitalize', 'capture', 'cardiovascular', 'cascade', 'category', 'checker', 'circumference', 'clause', 'clue', 'cluster', 'code', 'coherent', 'collection', 'comma', 'command', 'comparison', 'compiler', 'complexity', 'compound', 'computable', 'computation', 'computational', 'compute', 'concatenate', 'concatenation', 'conceptualize', 'conditional', 'configuration', 'conform', 'conquer', 'console', 'construct', 'convert', 'correspond', 'corresponding', 'covert', 'crash', 'crucial', 'cube', 'cumbersome', 'current', 'dealt', 'debug', 'decimal', 'declarative', 'decode', 'deduce', 'default', 'defensive', 'demo', 'denote', 'deposit', 'derivative', 'deviation', 'diagram', 'dictionary', 'difference', 'disc', 'discretion', 'disregard', 'distinct', 'distribution', 'division', 'divisor', 'doctorate', 'documentation', 'driver', 'dub', 'duplicate', 'ease', 'editor', 'encapsulate', 'encapsulation', 'endpoint', 'engage', 'enigma', 'enroll', 'entry', 'enumeration', 'environment', 'epsilon', 'equivalent', 'essentially', 'evaluate', 'exception', 'execute', 'exhaustive', 'exponentiation', 'exterminate', 'factorial', 'fetal', 'fix', 'flag', 'flexibility', 'float', 'formalism', 'fraction', 'frame', 'generalization', 'generate', 'gestation', 'gigabyte', 'guarantee', 'GUI', 'halt', 'handle', 'handler', 'hence', 'heuristic', 'hierarchy', 'hint', 'hypothesis', 'identifier', 'illustrate', 'immutable', 'imperative', 'implement', 'implementation', 'implication', 'import', 'inclusive', 'incorporate', 'increment', 'indentation', 'index', 'indicate', 'indication', 'indirection', 'induction']##猜单词游戏,使用网络爬虫实现单词库的获取,请在有网络的情况下使用import randomimport timefrom urllib import requestfrom lxml import  etreeimport tkinter as tkfrom tkinter import*from tkinter import ttk#使用tkinter库实现#词汇表words=[]class Guess_word:    def __init__(self):        self.get_words()         self.win_times=0        self.lose_times=0        self.final_time=' '        self.gui()      def get_words(self):        def Get_Shanbay(page):            url="https://www.shanbay.com/wordlist/104899/202159/?page=%s"%page            rsp=request.urlopen(url)            html=rsp.read()            html=etree.HTML(html)            tr_list=html.xpath("//tr")            for tr in tr_list:                      strong = tr.xpath('.//strong')                if len(strong):                    name=strong[0].text.strip()                    words.append(name)        for i in range(1,10):            Get_Shanbay(i)            print('爬取单词中……')    def shuffle_word(self,word):        list_word=list(word)        random.shuffle(list_word)        return ''.join(list_word)    def gui(self):        self.start()        self.main_gui()    def main_gui(self):        self.root=Tk()        self.root.title('hangman')        self.root.geometry('+0+0')        self.root.geometry('1000x800')         Label(self.root,text="Welcome to the word guessing game!", bg='green',font=('Arial', 12), fg="white",width=50, height=2).pack()         number=tk.StringVar()        self.Listchoose=ttk.Combobox(self.root,width=12,textvariable=number,state='readonly')        self.Listchoose['values']=['娱乐模式','时间模式']            self.Listchoose.bind("",self.mode)        self.Listchoose.pack()            self.Listchoose.set('请选择游戏模式')         self.root.mainloop()    def mode(self,event):        self.root2=Tk()        self.root2.title('hangman')        self.root2.geometry('+0+0')        self.root2.geometry('1000x800')        self.label=Label(self.root2,text="Welcome to the word guessing game!", bg='green',font=('Arial', 12), fg="white",width=50, height=2)        self.label.pack()        self.button2=tk.Button(self.root2,text="退出",bd=4,bg="yellow",activebackground="orange",command=self.Quit,padx=100)        self.button2.pack(side=tk.LEFT)        mode_name=self.Listchoose.get()            if(mode_name=='娱乐模式'):            self.mode1()        else:            self.mode2()        self.root2.mainloop()    def mode1(self):        self.display()        def judge(event):            if self.entry.get()==self.correct_word:                self.win_times+=1                self.label.configure(text="Congratulations! You're right! ",bg='red')            else:                self.lose_times+=1                self.label.configure(text="Sorry! You're wrong! And the correct word is "+self.correct_word+".",bg='blue')        self.entry.bind("",judge)         self.button1=tk.Button(self.root2,text="下一题",bd=4,bg="orange",activebackground="yellow",command=self.next1,padx=100)        self.button1.pack(side=tk.RIGHT)    def mode2(self):        messagebox.showinfo("提醒","请在十秒之前内写出你的答案!")        self.get_final_time()        self.get_time()        self.display()        def judge(event):            self.final_time=' '            if self.entry.get()==self.correct_word:                self.win_times+=1                messagebox.showinfo("correct!","Congratulations! You're right!")                self.time_over('0003.gif','耶!')                self.label.configure(text="Congratulations! You're right! ",bg='red')            else:                self.lose_times+=1                messagebox.showinfo("Wrong answer","Sorry! You're wrong! And the correct word is "+self.correct_word+".")                self.time_over('0004.gif','呜呜~')                self.label.configure(text="Sorry! You're wrong! And the correct word is "+self.correct_word+".",bg='blue')        self.entry.bind("",judge)         self.button2=tk.Button(self.root2,text="下一题",bd=4,bg="orange",activebackground="yellow",command=self.next2,padx=100)        self.button2.pack(side=tk.RIGHT)    def display(self):        self.correct_word,shuffle_word=self.get_correct_shuffle_word()        self.label1=Label(self.root2, text='Disordered word:  '+shuffle_word,font=('楷体', 14))        self.label1.place(x=10, y=80)        Label(self.root2, text='Guess the word:', font=('楷体', 14)).place(x=10, y=120)        num=tk.StringVar()        self.entry=tk.Entry(self.root2,textvariable=num,font=('Arial', 10))        self.entry.place(x=180,y=125)    def get_final_time(self):        long=10   #答题时长        hms=time.strftime('%H %M %S').split()        allsecond=int(hms[0])*3600+int(hms[1])*60+int(hms[2])+long        strtime=allsecond//3600        h=str(allsecond//3600)        m=str(allsecond%3600//60)        s=str(allsecond%3600%60)        if len(h)==1:            h='0'+h        if len(m)==1:            m='0'+m        if len(s)==1:            s='0'+s        self.final_time=h+':'+m+':'+s    def time_over(self,img,text):        self.root3=Toplevel()        self.root3.title('Welcome to hangman!')        self.root3.geometry('+0+0')        self.root3.geometry('800x600')        self.picture(self.root3,2,img)        button=Button(self.root3,text=text,bd=4,bg="orange",activebackground="yellow",command=self.Exit,padx=50)        button.pack()    def Exit(self):        self.root3.destroy()    def get_time(self):        Time=time.strftime('%Y-%m-%d %H:%M:%S')        Label(self.root2, text='当前时间:', bg='gold', font=28).place(x=380, y=50)        clock=Label(self.root2,text=Time,font=28)        clock.place(x=465, y=50)        if Time[11:]==self.final_time:                     messagebox.showinfo("超时",'时间到了!正确答案是: '+self.correct_word)            self.time_over('0002.gif','别骂了别骂了')        clock.after(1000,self.get_time)    def Quit(self):        messagebox.showinfo('战绩',f'您在这次游戏中共答对{self.win_times}道题,答错{self.lose_times}道题')        self.win_times=0        self.lose_times=0        self.root2.destroy()       def next1(self):        self.entry.delete(0,'end')        self.button1.destroy()        self.label1.destroy()        self.label.configure(text="Welcome to the word guessing game!", bg='green')        self.mode1()    def next2(self):        self.entry.delete(0,'end')        self.button2.destroy()        self.label1.destroy()        self.label.configure(text="Welcome to the word guessing game!", bg='green')        self.mode2()            def get_correct_shuffle_word(self):        correct_word=random.choice(words)        return correct_word,self.shuffle_word(correct_word)    def start(self):        self.root1=Tk()        self.root1.title('Welcome to hangman!')        self.root1.geometry('+0+0')        self.root1.geometry('800x600')        Label(self.root1,text='我  爱  记 单 词 ', fg='red', bg='yellow',font=('宋体', 30)).pack(side='top')        self.picture(self.root1,12,'0001.gif')        button1=Button(self.root1,text="进入猜单词游戏",bd=4,bg="orange",activebackground="yellow",command=self.Start,padx=50)        button1.pack()        self.root1.mainloop()    def picture(self,pos,numIdx,img):        frames=[PhotoImage(file=img,format='gif -index %i' %(i)) for i in range(numIdx)]        def update(idx):            frame = frames[idx]            idx+=1            label.configure(image=frame)            pos.after(100, update, idx%numIdx)        self.labelframe=LabelFrame(pos,text='图片展示',height=500,width=600)        self.labelframe.pack(padx=10,pady=10)        self.labelframe.pack_propagate(0)        label=Label(self.labelframe)        label.pack()        pos.after(0,update, 0)            def Start(self):        messagebox.showinfo("提示","你正在进入猜单词游戏!\n你准备好了吗?")        self.root1.destroy()if __name__=='__main__':    guess_word=Guess_word()        
复制代码
最后

  1. 代码中另有许多不尽人意的地方,由于作者技能水平的限制,暂时没有实现各种已有的设计理念,好比,使用多线程设计一个PK模式,图形界面的软件应用优化等等,感兴趣的哥哥姐姐们不妨试试。我在品评区静候你们的佳音。
复制代码
来源:https://blog.csdn.net/qq_46632290/article/details/112019066
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

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

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )