質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1197閲覧

Python ある英単語を構成する文字がリストに格納されているかをチェックしたい

takoyaki10

総合スコア15

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/05/27 17:28

前提・実現したいこと

現在、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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

完全に処理を書き換えましたが、だいたい以下のような流れでよいかと思います。

Python

1selectedword = 'apple' 2allinputletters = ['- ' for _ in range(len(selectedword))] # まずは不正解記号を入れておく 3 4while True: 5 inputletter = input('input word:') 6 7 # 正解 8 if inputletter == selectedword: 9 break 10 11 for idx,c in enumerate(selectedword): 12 if idx >= len(inputletter): 13 break 14 15 # 同じ位置に同じ文字がある 16 if c == inputletter[idx]: 17 allinputletters[idx] = c 18 19 print(str(allinputletters)) 20 21""" 22input word:all 23['a', '- ', '- ', '- ', '- '] 24input word:apl 25['a', 'p', '- ', '- ', '- '] 26input word:bbbbbb 27['a', 'p', '- ', '- ', '- '] 28input word:biihe 29['a', 'p', '- ', '- ', 'e'] 30input word:appmm 31['a', 'p', 'p', '- ', 'e'] 32input word:apple 33"""

投稿2019/05/27 22:06

can110

総合スコア38233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takoyaki10

2019/05/30 04:14

ありがとうございました。少し自分なりにアレンジして解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問