|
发表于 2024-5-18 12:46:57
|
显示全部楼层
你的程序有一些问题需要修正。首先,你在获取用户输入时没有进行错误处理,如果用户没有输入任何内容就点击了"ok"按钮,会导致程序崩溃。其次,你没有在函数`jielong()`中定义全局变量`next_idiom`,所以在函数内部无法修改它的值。
这里是修复后的代码:
- import re
- import random
- from tkinter import *
- import tkinter.ttk as ttk
- from tkinter.messagebox import showinfo, showwarning
- idiom = "一心一意,火上浇油"
- def jielong():
- get_input = entry.get().strip() # 去掉空格
- if len(get_input) < 3 or len(get_input) > 10:
- showwarning("注意", "请输入3~10字的成语/诗句")
- return
-
- global next_idiom
- last_char = next_idiom[-1]
- get_pinyin = pinyin(last_char)[0][0] # 获取上一个成语的最后一个字的拼音
- input_pinyin = pinyin(get_input[0])[0][0] # 获取用户输入的第一个字的拼音
- if get_pinyin != input_pinyin:
- showinfo("提示", "您输入的成语首个字拼音要与上方成语的最后一个字的拼音相同\n(注意中间不要包含空格)")
- return
-
- match_idiom = re.findall(last_char + "\w{3}", idiom)
- if not match_idiom:
- showinfo("提示", "我也不会接")
- return
-
- next_idiom = random.choice(match_idiom)
- val1.set(next_idiom)
- win = Tk()
- win.geometry("250x200")
- win.title("成语接龙")
- l1 = Label(win, text="")
- val1 = StringVar()
- next_idiom = random.choice(idiom.split(','))
- if next_idiom == "":
- next_idiom = "一"
- val1.set(next_idiom)
- l2 = Label(win, textvariable=val1)
- l2.grid(row=0, column=0)
- entry = ttk.Entry(win)
- entry.grid(row=1, column=0)
- button = ttk.Button(win, text="ok", command=jielong)
- button.grid(row=1, column=1)
- win.mainloop()
复制代码
修复后的代码应该能够按照你的预期正常运行。同时,你还可以根据需要增加更多的成语到`idiom`列表中,以便增加游戏的可玩性。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|