这是之前约瑟夫小游戏的进阶版。
利用python自带的tkinter库,来实现它的一个图形化界面的开发。
当然这还是一个比较简单的程序,只有几十行代码,废话不多说,来看代码。
import tkinter as tk import tkinter.messagebox # 设置主窗口 win = tk.Tk() win.title('Welcome to 约瑟夫小游戏') win.geometry('650x400') # 添加图片 canvas = tk.Canvas(win, height=400, width=650) image_file = tk.PhotoImage(file='pic.gif') image = canvas.create_image(0, 0, anchor='nw', image=image_file) canvas.pack(side='top') # 输入框要输入的内容 tk.Label(win, text='欢迎').place(x=560, y=50) tk.Label(win, text='参与的人数:').place(x=500, y=100) tk.Label(win, text='数到几cut掉:').place(x=500, y=170) # 设置输入框 var_num = tk.StringVar() var_num.set('28') entry_num = tk.Entry(win, textvariable=var_num) entry_num.place(x=500, y=130) var_step = tk.StringVar() var_step.set('3') entry_step = tk.Entry(win, textvariable=var_step) entry_step.place(x=500, y=200) def dispose(): '''处理过程''' num = var_num.get() step = var_step.get() try: ''' 对下面的代码做一个异常处理,如果输入类型不匹配,输入为0,输入并不是数字,有小数等,都会进行报错 ''' # 转换成int类型 num = int(num) step = int(step) # 2.对数据进行处理,处理约瑟夫问题 t = step - 1 num = [i for i in range(1, num + 1)] def move(num, sep): for i in range(t): item = num.pop(0) num.append(item) while len(num) > step - 1: move(num, t) num.pop(0) move(num, t) # 3.弹出框,输出结果 tk.messagebox.showinfo(title='完成', message=num) except BaseException as e: tk.messagebox.showerror(title='Error', message='请输入正整数') def win_quit(): ''' 退出程序''' win.destroy() # 设置按钮 btn_dealt = tk.Button(win, text='运行', command=dispose) btn_dealt.place(x=525, y=290) btn_quit = tk.Button(win, text='退出', command=quit) btn_quit.place(x=580, y=290) win.mainloop()这是运行后的效果:
1.主界面 2.输出结果
因为博主还只是初学者,所以如果代码中有错误或者是需要改进的地方还请大佬们不吝赐教。