読者です 読者をやめる 読者になる 読者になる

よーじ通信

底辺社内ニートがプログラミングや役に立ちそうなネタを書いています

よーじ通信

【Python入門】プログラミング超初心者が0からはじめる入門編 vol.12

f:id:youji11410:20170107150739j:plain

知識ゼロの超初心者がプログラミング初挑戦でPythonをはじめました。第12回目は一人しりとりゲームをつくろう。

スポンサーリンク
 

 

Pythonでしりとりゲームをつくるよ

第15章は、いよいよ実践ぽいゲームづくりをしてみましょう

実はこの記事、完成間近で消え去ってしまい、かなり心が折れております

さぁ、頑張っていきましょうw

 

15-1 しりとりゲームの設定を決める

  • しりとりの「り」からはじめよう
  • 一人でしりとりをするよ
  • 「ん」で終わったらゲームオーバー
  • 一文字ではNG
  • 同じ言葉は使えない

 

f:id:youji11410:20170107151855p:plain

まず、エディタで、このような内容のmain.pyのファイルをつくります

ターミナルで実行してみましょう

うまく実行できたでしょうか?

おそらくエラーになったと思いますが、それでオッケーです

なぜエラーになったか、わかる人はかなり実力がついてきていますね!

そうです、日本語を表示する時の呪文がありました

 

f:id:youji11410:20170107152709p:plain

コードをなおして、実行してみましょう

今度こそ、成功しましたか?

 

f:id:youji11410:20170107152909p:plain

 

15-2 キーボードから単語を入力できるようにしよう

次に、しりとりするための単語を入力できるようにしましょう

 

 

f:id:youji11410:20170107153412p:plain

【raw_input()】という関数を使うことで、直接入力できるようになります

5行目は、raw_input、つまり入力した単語をmy_wordという変数に置き換えるということです

6行目は、そのmy_wordと「ですね」を表示してという指示になります

変数とコンマで並列表示させることができます

 

f:id:youji11410:20170107153828p:plain

 

15-3 しりとりになっているかな?

しりとりを正しくやるには、しりとり→りんご→ごりら......のように最初の文字と最後の文字が合っている必要がありますね

 

f:id:youji11410:20170107163617p:plain

このようなコードに書き換えます

"しりとり"[-1]はリストでやったものの変形ですね

atama=my_word[0]も同じです

 

f:id:youji11410:20170107163646p:plain

一部?になってしまいました

 

f:id:youji11410:20170107165245p:plain

前回もやりましたが日本語の文字列の前にはunicodenoの「u」が必要でした

また、変数の中の日本語に対しては【.decode('utf-8')】をつけます

【.decode("utf-8")】でも動きます

最初に# coding: utf-8をつけてるから大丈夫じゃない?と思いそうですが、これはコードに書いている日本語を読むための呪文で、書き出すための呪文が必要なんですね

 

f:id:youji11410:20170107165359p:plain

実行してみましょう

成功しましたか?

 

それでは、atamaとoshiriが一致しているか確認する構文を加えましょう

 

f:id:youji11410:20170107170443p:plain

FizzBuzzゲームで使った条件分岐を使います

f:id:youji11410:20170107170731p:plain

成功しない時は、エラーの内容をよく見てくださいね

検索して、どこが間違っているのか確認して直すようにしましょう

 

15-4 しりとりをくり返そう

f:id:youji11410:20170113215844p:plain

ゲームの流れはこんな感じでくり返されていきますね

ゲームオーバーになるまでは無限にくり返されるので【while】を使います

 

f:id:youji11410:20170107173952p:plain

whileの中身が繰り返しになりますから、インデントなどにも気をつけてください

oshiri == atama のうちは無限ループされます

そうじゃないと、ゲームオーバーになるという構文です

 

f:id:youji11410:20170107174809p:plain

atamaとoshiriが違うのでゲームオーバーになりました

成功ですね

 

15-5 スッキリさせよう

同じようなコードがあるので、頭がこんがらがりますね

短いコードならばなんとかわかりそうなものですが、すっごーく長くなると間違いも置きやすくなりそうです

こういうものは、自分だけでなく人が見てもわかりやすい必要があります

きれいなコードがかけるというのも、必要な技術ですよ

 

f:id:youji11410:20170107180542p:plain

かなりすっきりしました

こういうifの使い方もあるんですね

先ほどよりもコードも解読しやすくなりました

while Ture とは、ある条件が続く限り無限ループを指示しています

なので、ifで条件分岐ができる訳です

そして、条件を満たさなくなったら「break」でループから抜け出します

 

f:id:youji11410:20170107180602p:plain

コードの内容は変わりましたが、同じ結果になります

結果が同じならば、スッキリわかりやすいほうが手間が省けますね

 

15-6 「ん」でゲームオーバーの設定をする

  • しりとりの「り」からはじめよう
  • 一人でしりとりをするよ
  • 「ん」で終わったらゲームオーバー
  • 一文字ではNG
  • 同じ言葉は使えない

というルールでした

一人しりとりまでは完成しました

次は「ん」でゲームオーバー、一文字はNGの設定をしてみましょう

 

f:id:youji11410:20170107213006p:plain

条件分岐にしてあるので、elifを付け足していけばいいですね

 

f:id:youji11410:20170107213638p:plain

全然オッケーじゃないですね

修正点がわかりますか?これは同じようなミスを以前やっているので、すぐに気がついたと思います

条件は、上から順に適用されるので、一番最初の条件がオッケーならば即ち、全ての条件をクリアしている事になります

順番を入れ替えなきゃいけませんね

 

f:id:youji11410:20170107213451p:plain

実行してみましょう

 

f:id:youji11410:20170108154750p:plain

全然オッケーじゃないですね

一文字の条件はクリアしましたが、「ん」の条件はクリアできませんでした

試しに18から20行目を頭に持ってきても、「ん」の条件をクリアすることができません

 

f:id:youji11410:20170108171541p:plain

実は、この構文では、こういう状態になっています

つまり、「ごん」の判定を19行目ではやっていないということなんですね

 

f:id:youji11410:20170108171736p:plain

関数をわかりやすく書き直してみました

 

f:id:youji11410:20170108172257p:plain

今度はうまくいきましたね

 

15-7 同じ言葉は二回使えないルールを加える

なかなか長期戦になってきましたね

そろそろ頭から煙が出てきそうですが、もうひと頑張り×3なので頑張りましょう

 

それでは最後のルール「同じ言葉は使えない」を加えましょう

ここでは、リストを使っていきます

リストは以前、説明しましたね

【Python入門】プログラミング超初心者が0からはじめる入門編 vol.2

 

対話モードの方がわかりやすいので、ターミナルでPythonを起動します

ここでは、加工が面倒なので、CodingGroundで作業します

 

f:id:youji11410:20170115224025p:plain

まず空のリストをつくります

次に、空のリストの中に単語を入れます

【.append()】メゾットを使います

このメゾットは、リストに単語を加えてくれる呪文です

 

【"a" in x】で、リストの中に文字列が入っているかの確認をします

 

ここまで完了したら、対話モードを終了します

【quit()】で終了できます

 

f:id:youji11410:20170115225352p:plain

それでは、main.pyにコードを追加しましょう

#追加 という部分が追加されています

空のリストを作り、単語をリストの中に入れ、繰り返しの条件を加えました

 

f:id:youji11410:20170115225818p:plain

実行してみましょう

ちゃんと繰り返しを判断してくれました

 

15-8 関数にしてみよう

後二つで、完了します!頑張っていきましょう

 

せっかくつくったプログラムを使い回ししやすいように、全体を関数にすることができます

まずmain.pyを開き、⌘Aで全てを選択します

メニューバーの【テキスト→インデント→右へシフト】で4文字分字下げします(勝手に4文字分字下げされます)

 

f:id:youji11410:20170115230618p:plain

そして、赤い四角で囲ったコードを記述します

せっかくなので、引数を使ってみましょう

引数はデフォルトを「しりとり」とし、変更できるようにします

 

f:id:youji11410:20170115231602p:plain

長くなったので、変更のない後半部分は省略しています

赤い四角で囲った部分を変更します

 

f:id:youji11410:20170115232028p:plain

一番下に【shiritori()】を加えましょう

これが関数を実行するコードになります

これがないと実行できません

例えばshiritori(ごりら)とすれば「ごりら」からしりとりがはじまります

実行してみてください

 

15-9 ライブラリにしてみよう

Pythonにはライブラリという便利な機能がありましたね

今つくったしりとりゲームをせっかく関数にしたので、ライブラリにして、インポートできるようにしてみます

 

f:id:youji11410:20170115232748p:plain

ターミナルを起動したら、【main.py】がある場所に移動します

次にPythonを起動します

【from main import shiritori】と入力するとライブラリがインポートできました

 

これでは、しりとりが開始されてしまいます

 

f:id:youji11410:20170116210813p:plain

最後のコードに書き加えました

それからわかりやすいように、先ほど【shiritori()】としたところを

【shiritori(u"りんご")】に書き換えました

 

f:id:youji11410:20170116211324p:plain

ターミナルを起動し、main.pyのある場所に移動し、直接pythonコマンドで起動します

この場合は、【if __name__ == '__main__':】の中身が読み込まれます

 

f:id:youji11410:20170116213738p:plain

ターミナルを再起動します

まずmain.pyのある場所に移動します

次に、pythonを起動します

起動したら、【from main import shiritori】と入力すると、ライブラリを読み込みました

そしたら、しりとりを開始するために【shiritori()】と記述します

最初にライブラリを読み込んだ時とは違う結果になったのがわかりますか?

shiritori(u"りんご")は確認のためのコードなので実行されません。

つくっている最中に確認するために入力するものだと思えばOKです

 

おわり

いかがでしたでしょうか

突然難しくなった雰囲気がありますね

なかなか実行できなかったりして正直かなりの時間がかかってしまいました。

大抵のミスは、記述間違いなので参考書でしっかり正しいコードを確認しながらやるといいですよ。

つぎはいよいよ最終回です!

スポンサーリンク

▼関連記事▼

プログラミング超初心者が0からはじめる入門編 vol.11

© 2016 よーじ通信