見出し画像

Pythonでコマンドプロンプトにサヨナラする(3)

簡単に入出力ができたので、さっそく簡単にプログラムを作成してみたいと思います!

バイオリズム占いプログラム

バイオリズム診断はご存知でしょうか。
人が生まれてから、体調・感情・知性の調子が一定の周期で繰り替えしていると考えて、その日の体調などを知ろうという診断方法です。(それはそれは眉唾モノですが、占いとしては乙なものですはい)
詳細はWikipediaなどを参照。。。

誕生日からの日数が計算できれば、あとは身体・感情・知性がそれぞれ23日・28日・33日周期で繰り替えすように三角関数のSIN関数で計算します。

入力はtkinterのsimpledialogを使うとして、年月日の文字列を入力してもらった後は、どのように変換すればいいでしょうか?

サンプルプログラム

メモ帳などにコピペして試してみてください。
Windows、Linuxsどちらでも使えます。
モジュールのインストール(pip)は必要に応じて。

import tkinter as tk
from tkinter import messagebox, simpledialog
import math
from datetime import datetime

def message(score):
   if score<10:
       return "ど低調"
   elif score<30:
       return "低調"
   elif score<45:
       return "やや低調"
   elif score<55:
       return "不安定(注意)"
   elif score<70:
       return "やや好調"
   elif score<90:
       return "好調!"
   else:
       return "絶好調!!"


root= tk.Tk()
root.withdraw()

strday= simpledialog.askstring("バイオリズム占い","誕生日を入力してください(yyyy/mm/dd)")
lstymd= strday.split('/')

y= int(lstymd[0])
m= int(lstymd[1])
d= int(lstymd[2])

if y>0 and m>0 and d>0:
   Today= datetime.now()
   Birthday= datetime(y, m, d)
   
   Days= Today -Birthday
   
   p= int(math.sin(Days.days/23*2*math.pi)*50+50)
   s= int(math.sin(Days.days/28*2*math.pi)*50+50)
   i= int(math.sin(Days.days/33*2*math.pi)*50+50)
   
   result = f"誕生日が{y}/{m}/{d}の人は\n"
   result+= f"今日は生まれてから{Days.days}日目です\n"
   result+= f"今日のバイオリズム診断結果は\n"
   result+= f"身体:{message(p)} ({p}%)\n感情:{message(s)} ({s}%)\n知性:{message(i)} ({i}%)"
   messagebox.showinfo("占い結果", result)
   

プログラム中盤あたりで、simpledialogを使って、誕生日を入力してもらいます。
入力文字列は「2001/12/25」のように、「/」スラッシュで区切ってある(と、信じているw)ので、splitをつかって「2001」「12」「25」のリストに分割しています。

年月日の文字列はそのままでは数値計算に使えないので、int関数を使って整数に変換します。

if文は、年・月・日がすべて1以上であれば計算を実行する分岐です。

計算ではまず、datetimeを使って「誕生日(Birthday)」「今日(Today)」の2つのオブジェクトを作り、それらを引き算して、生まれてからの日数(Days)を求めました。

次に周期の波を計算します。SIN関数は高校で習うと思います。360°で波が一周するアレです。Pythonでは角度をラジアンで表現する関数で、360°=2πで換算してsin関数に渡します。(mathの使い方はまた別途…)

あとは、メッセージを作って完了です。

前半にあるdef messageはここで使っていますが、0〜100の数値を受けて、メッセージの文字列を返すサブルーチンでした。

実行してみると

入力ボックスが現れて誕生日を入力するよう促します。
誕生日を入力すると、結果がちゃんと現れましたでしょうか?
(下の図はLubuntu(LXDE)で実行した結果。誕生日は適当。2021/1/19の結果)

画像1

さて、ここまできて、まだ実行はコマンドプロンプトで行ったと思います。せっかくなので、exe化してみましょうか。(後日)

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