数当てゲームhaya【python超初級】python初心者が数当てゲーム作ってみるよ【その2】この記事は2017年12月4日に書かれたものです。内容が古い可能性がありますのでご注意ください。pythonの勉強を始めました。他の言語を少しばかり触ったことはあるのですが、pythonを扱うのは初めてなので、練習がてら簡単な数当てゲームを作成してみます。4桁の異なる数値をランダムに生成して一致するまでに何ターンかかったかを競う有名なゲームです。正式な名前は「ヒットアンドブロー」とか「マスターマインド」っていうみたいですね。・重複のない4桁の数字(0~9)を当てる・回答すると、その都度、ヒットとブローの数が出る・ヒットは数字も桁の場所も同じ。ブローは数字はあたっているけど桁の場所が違う・なるべく回数で答えたほうが良いという感じです。コマンドライン上で実行できるシンプルな造りにします。(というか筆者がレベル的にまだそれしかできないです...)なお、if文やfor文などの構文の解説は省きます。筆者はpython3.6.1をインストールしています。【STEP2】4桁の数値を入力する今回はコンソール画面上からキーボードの入力を行い、そもそも数値かどうかや4桁の数値なのかを判別するコードを実装したいと思います。前回書いたコードは次のようになっています。同じ値が無ければanswer_num_aryに追加する。#answer_num_aryに追加するかのどうかのフラグ。Trueこの下にコードを追加していきましょう。キーボードからの入力を受け付けるにはinput()関数を用います。#randomモジュールをインポートする。input("数当てゲームを開始します。#この行を追加する17行目を追加します。これを実行するとコンソール画面上に文字が出力され、さらにキーボードから入力することができます。入力した値を変数input_numに代入します。次に、このinput_numがちゃんと数字なのか(文字などが入力されていないか)、4桁の異なる数値なのかの判別を行うコードを書いていきます。前回と同じくwhile文を使って、4桁の異なる数値が入力されるまで何度も入力させるようにしましょう。以下のコードを追加します。input("数当てゲームを開始します。#入力を繰り返すフラグ。input("【エラー】4つの整数値を入力してください。#set()を使うことでリスト内の重複していない要素だけを取得する。input("【エラー】重複のない4つの数値を入力してください。")4行目からループの処理を行っています。6行目や8行目でisdigit()関数を用いていますが、この関数は入力した値が正の整数ならTrueを、それ以外の小数や負の値やそもそも数値ではない文字列ならFalseを返すします。Falseなら問答無用でアウトで入力のやり直しをさせます。Trueの場合は数値ではありますが、4桁以外はアウトなのでその判別を9行目と10行目で行っています。アウトなら入力のやり直しです。11行目から4桁の数字だった場合の処理で、重複のチェックを行っています。13行目から15行目で4桁の数字の各桁の値を取り出してinput_num_aryのリストに追加しています。17行目でそのinput_num_aryのリストをset()関数にかけています。set関数では重複している要素は1つとして扱われます。4]という4つの数値だった場合、set関数にかけると[1,4,5]となります。重複がある場合は配列の要素数が4つになりません。18行目でリストの長さが4ではない場合は重複があるということですので、エラーとして入力のやり直しをさせています。繰り返し分から抜けてprint関数で出力しています。今までのコードをまとめると次のようになります。input("数当てゲームを開始します。input("【エラー】4つの整数値を入力してください。input("【エラー】重複のない4つの数値を入力してください。")今回はこれで終わりです。次回は作成した2つの数値を求めるwhile文の処理を関数にしたいと思います。Djangoの使い方(その11)モデルを作る。