前提・実現したいこと
現在、Pythonを使用して英単語あてゲームを作っています。スタートボタンを押すとランダムに英単語が選ばれ、その英単語の文字数だけ目隠しとして"-"が実際に表示されます。プレイヤーがその英単語が持つ文字を入力すれば、"-"が外れ、正解した文字だけがプレイヤーに表示されるという仕組みです。
例:appleという英単語がランダムに選択されたとします。プレイヤーには " - - - - - "としか表示されず、英単語が持つ文字を正しく入力できれば、" - - - l - " や " a - - l - " のように開示されていきます。
プレイヤーが入力した文字がお題となる英単語に存在すれば、その文字を開示するというコードは書くことができました。しかし、そのコードでは、Enterキーを押すたびに入力した1文字しか開示されず、それ以前に正解した単語を継続して表示し続けることができませんでした。それを解決するために、正解した文字を全てalliputlettersというリストに一旦格納し、Enterキーを押すごとにお題の英単語に含まれる文字がalliputlettersに一つでも存在するかを調べ、存在すればそれらすべてを開示するという仕組みにしました。
質問内容
過去に正解した文字を継続して開示しながら、未だ正解していない文字はハイフンで隠しておきたいのですが、現在のコードでは、['- ', '- ', '- ', '- ', '- ']と、すべてハイフンで隠れた結果が返ってきます。
allinputlettersのvariables explorerを見ると、入力した正解の文字がちゃんと追加されていますが、correctlettersにはハイフンしか追加されていません。したがって、if n == any(allinputletters): に問題があると思いますが、解決の方法がわかりませんので、解決法やアドバイスをいただけないでしょうか。
発生している問題・エラーメッセージ
英単語のうち、正解した文字は表示され、それ以外はハイフンで隠されるべきところ、正解した文字があっても['- ', '- ', '- ', '- ', '- ']との結果が返ってくる。('- 'の数はお題の英単語の文字数と同じ数となります。)
該当のソースコード
Python
1def enterbtn_click(): #プレイヤーが文字を入力し、Enterボタンを押すと動く関数 2 global inputletter 3 global selectedword #前のコードですでにランダムに選択されたお題となる英単語 4 inputletter = letterbox.get() #プレイヤーが入力した文字 5 global wrongscore 6 7 if inputletter in selectedword: 8 for n in selectedword: 9 if n == inputletter: 10 allinputletters.append(n) 11# プレイヤーが入力した文字がお題となる英単語に存在するかどうかを調べ、存在すればalliputlettersというリストに追加する。 12 13 for n in selectedword: 14 if n == any(allinputletters): 15 correctletters.append(n) 16# プレイヤー入力してきた文字が格納されたリスト(alliputletters)に一つでもお題となる英単語に存在するかどうかを調べ、存在すればcorrectlettersというリストに格納。 17 else: 18 correctletters.append("- ") 19 wordshow.configure(text= str(correctletters)) 20# 存在しなければ"-"をCorrectlettersに追加し、どの文字を開示し、どの文字を-で表示するかという最終的な結果が格納されたcorrectlettersというリストを開示。 21 22 else: 23 if wrongscore < 8: 24 wrongtypes.configure(text=wrongscore) 25 wrongscore += 1 26 else: 27 wrongtypes.configure(text="GAME OVER") 28
試したこと
if n == any(allinputletters): に問題があると考えているので、様々工夫をしてみたがうまくいかなかった。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/30 04:14