見出し画像

23/12/28 おみくじを引くだけのプログラム【Python】

こんにちは、とある高専生です。
今回は久しぶりのPythonシリーズです!!

一つ前のブログや、さらにその前のブログではC言語を用いた「確率統計」に関するプログラムの紹介をしました。まだ読んでないよという方はぜひそちらも目を通していただけると嬉しいです。

さて、久しぶりのPythonなわけですが、今回は実際に可視化したGUIソフトを開発しました!!
以前は黒画面(CUI)で動くプログラムだったわけですが、今回はついに簡単に操作できる、マウスで操作できるものを作成しました。
最近Pythonを改めて勉強し直しているので以前作ったものよりはまともなものになっていると思います。

今回作成したプログラムは「おみくじを引くだけのプログラム」です。
もう今年2023年も残りわずか!
そして2024年がまもなくやってきます。
新年といえば「おみくじ」ですよね~!
なのでおみくじを引くだけのプログラムを作ってみました!

てなわけで紹介していきます!

1. 作成したプログラム

まずはいつも通りこちらのURLからダウンロードしてみてください。
今回は「おみくじを引くだけのプログラム.zip」と書かれたやつです。
Zipファイルになっているので展開してお楽しみください。
また今回は「.py」と「.exe」の両方を入れています。

一応ここでもコードを掲載しておきます。

import tkinter, random

#uranai関数
def uranai():
	button["text"]="もう一度占う"
	num = random.randint(1,11)
	
	if num == 1:
		moji_2["text"]="\n大吉"
	elif 2 <= num <= 3:
		moji_2["text"]="\n吉"
	elif 4 <= num <= 6:
		moji_2["text"]="\n中吉"
	elif 7 <= num <= 8:
		moji_2["text"]="\n小吉"
	elif 9 <= num <= 10:
		moji_2["text"]="\n末吉"
	moji_2.update()


#ウィンドウの作成
root = tkinter.Tk()
root.title("おみくじ")
root.geometry('450x450')

#中身の処理
moji_1 = tkinter.Label(root, text="\n今年の運勢を占おう!\n", font=("メイリオ", 15))
button = tkinter.Button(root, text="占う", font=("メイリオ", 12), command=uranai)
moji_2 = tkinter.Label(root, text="\n結果...", font=("メイリオ", 15))

#表示
moji_1.pack()
button.pack()
moji_2.pack()


#ループ
root.mainloop()
図1 完成したソフト

今回はGUI化するためにモジュール(import)の「Tkinter」を使用しました。
初めて本格的にGUIソフトを作ったので色々なサイトを参考にしながら作成しました。
なのでまだ完全に理解したわけではないですが、少し解説もしていこうかと思います。

2. コードの解説

今回は「#」(コメントアウト)ごとに説明していきます。

2-1 モジュール(import)

import tkinter, random

これは「#」をつけていませんが重要なので説明しておきます。
import」で「tkinter」と「random」を使用できるようにしています。
これがないと今回のコードは動かないと思います。

2-2 ウィンドウの作成

#ウィンドウの作成
root = tkinter.Tk()
root.title("おみくじ")
root.geometry('450x450')

最初に記載したコード通りならば先に「uranai関数」を説明すべきかもしれませんが、今説明するとややこしくなるので後で説明します。
では話を戻します。
ここは「ウィンドウの作成」について記載したコードです。
変数rootに「tkinte.Tk()」をインスタンス化?と言うんですかね。
それをしています。
なので「root.title("xxx")」では変数rootが「title()」にアクセスできるわけですね。
ここで「root.title("おみくじ")」と入力すると、ソフトが起動したときの上にタイトルとして表示されます。
次に「root.geometry('450x450')」は「横×縦」という意味で、ウィンドウのサイズを指定しています。今回は縦も横も「450」です。

2-3 中身の処理

#中身の処理
moji_1 = tkinter.Label(root, text="\n今年の運勢を占おう!\n", font=("メイリオ", 15))
button = tkinter.Button(root, text="占う", font=("メイリオ", 12), command=uranai)
moji_2 = tkinter.Label(root, text="\n結果...", font=("メイリオ", 15))

ここでは変数moji_1が「tkinter.Label」なので「文字の表示」をするための設定、同様に変数moji_2も同じ設定をされています。
変数buttonは「tkinter.Button」なので「ボタンの表示」をするための設定を行っています。
現段階ではそれぞれの変数に役割を割り振っているだけなので何も表示されません。

また、変数buttonに関しては「command=uranai」と書かれています。
この「uranai」は初めに飛ばした「uranai関数」を呼び出して処理を行うみたいです。
ということで次は「uranai関数」を見ていきます。

2-4 uranai関数

#uranai関数
def uranai():
	button["text"]="もう一度占う"
	num = random.randint(1,11)
	
	if num == 1:
		moji_2["text"]="\n大吉"
	elif 2 <= num <= 3:
		moji_2["text"]="\n吉"
	elif 4 <= num <= 6:
		moji_2["text"]="\n中吉"
	elif 7 <= num <= 8:
		moji_2["text"]="\n小吉"
	elif 9 <= num <= 10:
		moji_2["text"]="\n末吉"
	moji_2.update()

一つ前の2-3よりuranai関数にアクセスしました。
この関数内での処理を順に見ていきます。
まず初めに変数buttonの「text」部分に「もう一度占う」という文字列を代入するので、2-3時点では「text="占う"」だったところが「text="もう一度占う"」になります。

次にやっと登場したrandom関数です。
ここでは変数numに「1~10」のランダムな整数を生成し代入します。
そして、その次にif文を通して条件に該当するとこの処理が行われます。
てかPythonって数学みたいに「a <= x <= b」のように書けるのですね!
初めて知りました。
例えば変数numにランダム生成で整数「1」が代入されたとしましょう。
その場合は一番上のif文と条件が一致するので、変数moji_2の「text」部分に「\n大吉」が代入されます。
そうすると、2-3時点では「text="\n結果..."」だったところが「text="\n大吉"」となります。

最後に「moji_2.update()」と書かれたものがありますが、これに関しては謎です。一応なくても普通に動きました。

2-5 表示

#表示
moji_1.pack()
button.pack()
moji_2.pack()

ここでは2-3で作成した変数たちがついに仕事をします。
2-3ではそれぞれの変数がなんの役割をするのかという風に役職を与えました。(例 : Label , Button)
「tkinter.Label」なら文字の表示
「tkinter.Button」ならボタンの表示
を行う役職です。
ここでは、そんな変数たちに表示する命令を与えます。
例えば、変数moji_1を表示する場合「moji_1.pack()」と書きます。
この「pack()」はデフォルトでは真ん中に表示されていきます。
次に変数buttonも「pack()」なのでその下に表示されます。
変数moji_2も同じその下に表示されていきます。

この他にも表示する方法として、「grid()」などがあります。
今回は「pack()」以外については説明しないので気になる方は調べてみてください。個人的には「grid()」おすすめです。

2-6 ループ

#ループ
root.mainloop()

これはなんと言えばいいのかわかりませんね。
とにかく「Tkinter」を使う際には最後にかならず記載すること!

3. 遊んでみよう!

それでは実際に作成したプログラムで遊んでみたいと思います。

まず起動すると初めに示した図1のように表示されます。
遊び方は簡単!!
真ん中の「占う」ボタンを押すだけ!
てことで実際に押してみましょう!

図2 遊んでみた!

ボタンをワンクリックすると、「小吉」となりました!
つまりこの場合は小吉です。(※!!?)

またプログラム的な面についてお話すると、確かに図1と比べるとボタンの表示や、その下の文字が運勢に変わったりしていますね!
こんな感じで動きます。
またこのおみくじは「random関数」を用いているのでほんとにランダムで運試しをすることができます。
大吉が出る確率は「1/10」です。
もう少し出るおみくじの確率を調整したいならば、2-4でやった「uranai関数」の「random.randint(1, 11)」のところの数値を少し変えてみたりするといいかもしれません!
ただしその数値を変更した場合はその下のif文もしっかり条件が一致するように修正してあげてください。

ということで今回はここまで!
最後までお読みくださりありがとうございました。

この記事が気に入ったらサポートをしてみませんか?