约瑟夫游戏的图形化界面--python版

    科技2025-08-05  19

    这是之前约瑟夫小游戏的进阶版。

    利用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.输出结果

    可升级的地方:

    可以采用面向对象的方法,使得整代码更加的清晰,有条理也可使用文本框,使整个程序的输入输出部分在主界面的文本框中显示还可以添加历史记录的功能,记录之前的数据,方便查看

    因为博主还只是初学者,所以如果代码中有错误或者是需要改进的地方还请大佬们不吝赐教。

    Processed: 0.016, SQL: 8