私はハングマンタイプのゲームをPythonで書いていますが、それをGUIプログラムに変換しようとしています。 これは私が仕事に取得しようとしているコードです:python hangmanのゲームをGUIに変換する
#!/usr/bin/env python3
import random
from tkinter import *
from tkinter import ttk
def getHint(word, guesses):
hint = ' '
for letter in word:
if letter not in guesses:
hint += '_ '
else:
hint += letter
return hint
def loadWordList(filename):
file = open(filename, 'r')
line = file.read().lower()
wordlist = line.split()
return wordlist
def countOccurences(word, guess):
length = len(word)
i = 0
total = 0
while i < length:
if guess == word[i]:
total += 1
i += 1
return total
def play():
word = random.choice(loadWordList('words.txt'))
guesses = []
remaining = 10
while remaining > 0:
hint = getHint(word, guesses)
remaining = str(remaining)
guess = guess.lower()
while guess.isalpha() == False or len(guess) != 1:
output = 'Invalid input. Please enter a letter from a-z.'
if guess in guesses:
output = 'That letter has already been guessed!'
else:
if guess not in word:
output = 'That letter does not occur in the secret word.'
else:
output = 'That is a good guess! ' + str(guess) + ' occurs ' + str(countOccurences(word, guess)) + ' time(s) in the secret word'
guesses += guess
remaining -= 1
if '_' not in getHint(word, guesses):
result = 'Congratulations! You guessed the secret word: ' + word
break
if remaining == 0:
result = 'Sorry, the secret word was: ' + word
def buttonClicked():
play()
getHint(word, guesses)
root = Tk()
root.title('Guessing Game')
frame = ttk.Frame(root, padding='3 3 12 12')
frame.grid(column=0, row=0, sticky=(N, W, E, S))
frame.columnconfigure(0, weight=1)
frame.rowconfigure(0, weight=1)
guess = StringVar()
output = StringVar()
hint = StringVar()
remaining = StringVar()
result = StringVar()
a_label = ttk.Label(frame, text='Enter a letter to guess: ')
a_label.grid(column=1, row=1, sticky=E)
a_entry = ttk.Entry(frame, width=7, textvariable=guess)
a_entry.grid(column=2, row=1,sticky=E)
b_label = ttk.Label(frame, textvariable=output)
c_label = ttk.Label(frame, text='Current Hint: ')
c_label.grid(column=1, row=3, sticky=E)
d_label = ttk.Label(frame, textvariable=hint)
d_label.grid(column=2, row=3)
e_label = ttk.Label(frame, text='Guesses Remaining: ')
e_label.grid(column=1, row=4, sticky=E)
f_label = ttk.Label(frame, textvariable=remaining)
f_label.grid(column=2, row=4)
button = ttk.Button(frame, text='Submit', command=buttonClicked)
button.grid(column=3, row=5)
g_label = ttk.Label(frame, textvariable=result)
g_label.grid(column=1, row=6)
for child in frame.winfo_children():
child.grid_configure(padx=5, pady=5)
root.bind('<Return>',)
root.mainloop()
これらは私が取得していますエラーです:buttonClickedで
- ライン77、 - 遊ぶ()
- をライン52ローカル変数「推測」の任意のヒントとして、私はさらに、このコードを並べ替えることができますどのように割り当て
前に参照さT: - 、劇中で() UnboundLocalError = guess.lowerを推測実際にGUIに接続するための関数を得ることは非常に高く評価されるだろう。 ありがとう!
play()でグローバルとして推測することでエラーを回避することはできますが、ここではさらに問題があります。 StringVar推測を文字列推測に変換する場合や、whileループを使用する場合などに使用します。 – Lafexlos
本当に多くのことが修正される必要があります。私が見つけたものは、 'remaining'はplay()の文字列に変換されましたが、残っている= 1と'残っている> 0: 'のときと同じようにintを使用しています。おそらく、intを保持する変数と文字列を保持する変数の2つの変数を使用できます。私が無効な入力(例えば '1')を入力すると、ゲームは無限ループに見えます。これは問題のようです: 'guess.isalpha()== Falseまたはlen(推測)!= 1:'。そこから逃れる方法はありません!おそらくこれを 'if'文に変更して、フローコントロールを修正してください。 – coralvanda
Pythonの組み込み関数 "count"を使って、出現回数をカウントすることができます。 - > print word.count(推測)また、エントリの内容を取得する必要があります。http://effbot.org/tkinterbook/entry.htm –