Tkinter实现Wordle时标签显示异常(含重复字母问题)
法语版6字母Wordle(Tkinter)字母颜色显示异常问题
我是Python初学者,首次尝试用Tkinter开发6字母法语版Wordle。此前已完成纯Python版本,现在做可视化界面时遇到问题:猜词后字母标签无法正确显示颜色(绿色代表位置正确、黄色代表字母存在但位置错误、灰色代表字母不存在)。
我通过result数组(初始为['x','x','x','x','x','x'])标记状态:先遍历匹配正确位置设为'o',再处理错位设为'+'以兼容重复字母,但测试时输入“voisin”出现第二个i消失、仅最后一个字母标签变色、N从黄色变灰色的异常情况。
附上代码:
from tkinter import * from tkinter import messagebox import random lexique = [] def lire_lexique(fichier) : with open(fichier, mode="r",encoding='utf-8') as flux: global lexique for ligne in flux: lexique.append(ligne.strip("\n")) return lexique lire_lexique("lexique.txt") secret = str(random.choice(lexique)) secretresult = secret root = Tk() root.title("Wordle") green = "#6ca965" yellow = "#c8b653" gray = "#787c7f" black = "#000000" white = "#FFFFFF" root.config(bg=black) guessnum = 1 wordInput = Entry(root) wordInput.grid(row=999, column=0, padx=10, pady=10, columnspan=3) def getGuess(): global secret proposition = wordInput.get() global guessnum guessnum += 1 if guessnum <= 6: if proposition not in lexique : messagebox.showerror("pas dans le lexique","ce mot n'est pas dans le lexique, veuillez réessayer") if proposition in lexique and len(proposition) == 6: if secret == proposition: messagebox.showinfo("correct!", f"correct! the word was {secret.title()}") for letter in proposition : label = Label(root, text=letter.upper()) label.grid(row=guessnum, column=proposition.index(letter), padx=10, pady=10) else: result = ["x"] * 6 for index, (letter, letter2) in enumerate(zip(proposition, secret)): if letter == letter2: result[index] = "o" secret = secret.replace(letter, "x", 1) for index, (letter, letter2) in enumerate(zip(proposition, secret)): if letter in secret and result[index] == "x": result[index] = "+" secret = secret.replace(letter, "x", 1) for char in result : if char == "+" : label.config(bg=black, fg=yellow) elif char == "x" : label.config(bg=black, fg=gray) elif char == "o": label.config(bg=black, fg=green) elif len(proposition) < 6 or len(proposition) > 6: messagebox.showerror("Veuillez entrer un mot de 6 lettres", "Le mot doit être un mot de 6 lettres") else: messagebox.showerror("C'est perdu", f"C'est perdu ! Le mot était {secretresult}") wordGuessButton = Button(root, text="Guess", command=getGuess) wordGuessButton.grid(row=999, column=3, columnspan=2) root.mainloop()
我知道问题出在标签、result变量、循环的处理逻辑上,但无法精确定位,希望得到帮助。
内容的提问来源于stack exchange,提问作者Gwayns
相关产品推荐
相关产品推荐

