どうも!リョクちゃです!
だいぶ遅れての更新になりますが、あけましておめでとうございます。
本年も変わらず自身の学んできた上での経験や知識をメモとして発信・共有していきます!
さて、新年1発目は、Pythonでおみくじアプリを作ってみることにしました。
以前にVBでは作っていたのですが、それよりも簡単に、コンソール上でおみくじの結果が
わかるアプリを簡単に作ってみることにします。
これができたらグラフィカルなモノに仕上げてもいいかなと思っています。
ちなみに前回(去年)の記事は、こちら
目次
完成イメージ
今回作成するおみくじアプリ?の完成形は、下図のような形になります。
コンソールウィンドウ上でPythonで作成したプログラムを実行すると、
今日の運勢が表示されるといった、いたってシンプルなプログラムです。
シンプル故に簡単に作れるので、ちょっと凝らしを入れて、作成をしていきます。
おみくじアプリの構成
下図のようなファイル構成にします。
メインアプリは、実際にコンソールウィンドウで実行するアプリを指します。
メインアプリは、運勢などが格納されたclsOmikuji.pyに対して、
今日の運勢を問い合わせます。
問い合わせが来たら、clsOmikuji.pyは今日の運勢を返します。
上図のような順番で処理が行われるようにしていきます。
運勢クラスを作成する
まずは、運勢を格納するクラスを作成していきます。
運勢クラスは、特に処理をするわけではなく、
データを格納しておくだけのクラスとして利用します。
そのため、データクラスとして作成をしていきます。
データクラスとは?
データクラスとは、データを保持するクラスのことを呼びます。
YUMARU BLOG
データクラスを使うには、
1 |
from dataclass import dataclass |
でdataclassをimportします。
通常のクラスを宣言する要領で、class クラス名の上に@dataclassと記述します。
classを修飾する形で宣言します。
1 2 |
@dataclass class Omikuji: |
データクラスのクラス名はOmikujiとします。
このクラスには、運勢データを格納します。
今回は、凶、小吉、中吉、大吉の運勢を扱います。
それぞれの運勢が選ばれたときに、文言を添えて返すように、それぞれの運勢に対して
文言を配列として持たせておきます。
各運勢と文言は1:1の関係になるように、辞書型として宣言し、代入しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 |
@dataclass class Omikuji: lstDaikichi = ["金運は非常によく、思わぬ収入がありそう。"] lstChukichi = ["気力充実するでしょう。", "嫌いな人に好かれてるかも!思い当たらなければ逆"] lstShokichi = ["金運工場の兆しがあるが、ムダ遣いは控えましょう。", "健康は可もなく不可もありません。", "可もなく不可もなく、普通に過ごすがよい。"] lstkichi = ["恋愛は心がけ次第でしょう。", "金運は、ボランティア活動が上昇のきっかけになるはず。"] lstkyo = ["流れが来るまで、無理するべからず。", "恋愛は辛抱が大事です。"] dictFortune = {"吉": lstkichi, "小吉": lstShokichi, "中吉": lstChukichi, "大吉": lstDaikichi, "凶": lstkyo} |
これで運勢クラスの準備ができました。
メインのアプリを作成
次にメインアプリを作成していきます。
先ほど作成した運勢クラスを使うために、まずは運勢クラスをimportしておきます。
1 |
from clsOmikuji import Omikuji |
肝心な運勢を引く際の処理はどうするかというと、
今回は、1~9の数字からそれぞれ運勢を割り当てて、ランダムで選ばれた数字に対して、
運勢を返すようにしていきます。
割り当てはこんな感じにしました。
- 1 : 大吉
- 2 : 中吉
- 3 : 小吉
- 4 : 吉
- 5 : 吉
- 6 : 吉
- 7 : 小吉
- 8 : 中吉
- 9 : 凶
これらの数字をインプットとして、運勢クラスから運勢を問い合わせ、運勢を引きます。
運勢を引く行為については、メインアプリ内で関数として宣言をしておきます。
1 |
def drawOmikuji(drawNumber): |
引数には、ランダムに選ばれた数字が渡されます。
これを基に、先ほどの割り当てから運勢を引くようにします。
1 2 3 4 5 6 7 8 9 10 11 |
def drawOmikuji(drawNumber): if drawNumber == 1: resFortune = "大吉" elif drawNumber == 9: resFortune = "凶" elif drawNumber == 2 or drawNumber == 8: resFortune = "中吉" elif drawNumber == 3 or drawNumber == 7: resFortune = "小吉" else: resFortune = "吉" |
それぞれの運勢に対して、文言を獲得する処理も加えます。
文言は運勢クラスにあるので、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
def drawOmikuji(drawNumber): omikujiBox = Omikuji() if drawNumber == 1: resFortune = "大吉" resFortuneWord = omikujiBox.dictFortune['大吉'] elif drawNumber == 9: resFortune = "凶" resFortuneWord = omikujiBox.dictFortune['凶'][num] elif drawNumber == 2 or drawNumber == 8: resFortune = "中吉" resFortuneWord = omikujiBox.dictFortune['中吉'][num] elif drawNumber == 3 or drawNumber == 7: resFortune = "小吉" resFortuneWord = omikujiBox.dictFortune['小吉'][num] else: resFortune = "吉" resFortuneWord = omikujiBox.dictFortune['吉'][num] |
omikujiBoxという変数に対して、Omikuji()をインスタンス化させます。
インスタンス化させたomikujiBoxから運勢を引き当てます。
先ほど、運勢クラスでは各運勢に対して文言を複数持たせている運勢もあり、
そうした場合は、ランダムで文言を選べるようにしておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import random as rdm def drawOmikuji(drawNumber): omikujiBox = Omikuji() if drawNumber == 1: resFortune = "大吉" resFortuneWord = omikujiBox.dictFortune['大吉'] elif drawNumber == 9: num = rdm.randint(0, 1) resFortune = "凶" resFortuneWord = omikujiBox.dictFortune['凶'][num] elif drawNumber == 2 or drawNumber == 8: num = rdm.randint(0, 1) resFortune = "中吉" resFortuneWord = omikujiBox.dictFortune['中吉'][num] elif drawNumber == 3 or drawNumber == 7: num = rdm.randint(0, 2) resFortune = "小吉" resFortuneWord = omikujiBox.dictFortune['小吉'][num] else: num = rdm.randint(0, 1) resFortune = "吉" resFortuneWord = omikujiBox.dictFortune['吉'][num] |
randomモジュールをimportし、
num変数に各運勢の個数の範囲内でランダムな数値を返します。
最後におみくじの結果をprint()で出力するようにします。
1 2 |
print("今日の運勢は:" + resFortune + "です。") print(resFortuneWord) |
最後にdrawOmikujiをMainOmikuji内で呼び出します。
1 2 |
drawNumber = rdm.randint(1, 9) drawOmikuji(drawNumber) |
drawNumber変数にはランダムな数値を1~9の範囲内で返します。
これを基に、今日の運勢を引きます。
実行するには、保存した場所でコンソールウィンドウ(コマンドプロンプト)より
python MainOmikuji.py
と実行すると、おみくじを引くことができます。
まとめ
コンソールウィンドウでおみくじを引くアプリを作成してみました。
少し凝らして作ってみたモノの、まだまだデータクラスを
十分に活用できていないかもしれないです。
おみくじを引くだけなら、もっと簡単に作れますが、
今回はデータクラスと、それを呼び出す別ファイルを作成し、
複数ファイルを用いたおみくじアプリを作ってみました。
もう少し鍛錬を積んで、データクラスを使えるようになりたいです。
何かしらの参考になれば嬉しいです。
最後までお読みいただき、ありがとうございます。
・こちらの書籍を参考にPythonの理解を深めました。