余談:Pythonで分数の計算 (約分付き)
「バイオインフォマティックス屋さんがすなるPythonといふものを、生物屋さんもしてみむとてするなり。」と言うわけではないが、機械学習をやってみたいので、Pythonも勉強することにした。
とりあえず、Pythonの練習材料として、今までJavaで書いていたものをPythonで書き直してみることに。
今回は、余談:Javaで分数の計算(約分つき) - 生物屋さんのためのゼロからのプログラミングを取り扱う。
Pythonで書き直したコードが下記。
import tkinter #約分 def Yaku(event): #入力された数値の取得 s1Val = int(bs1.get()) b1Val = int(bb1.get()) s2val = int(bs2.get()) b2Val = int(bb2.get()) #分母と分子の単純な計算 sVal = s1Val * b2Val + b1Val * s2val bVal = b1Val * b2Val #上記の計算の小さい方をminValにする minVal = min (sVal, bVal) #約分の主要部分 for i in range(1, minVal): if (sVal % i == 0) and (bVal % i == 0): sVal = sVal/i bVal = bVal/i i -= 1 #計算結果を表記 sLabel = tkinter.Label(text = int(sVal)) bLabel = tkinter.Label(text = int(bVal)) sLabel.place(x = 140, y = 50) bLabel.place(x = 140, y = 80) #GUIの作成 root = tkinter.Tk() root.title("Yakubun Test") root.geometry("300x200") bs1 = tkinter.Entry(width = 3) bb1 = tkinter.Entry(width = 3) bs2 = tkinter.Entry(width = 3) bb2 = tkinter.Entry(width = 3) bs1.place(x = 20, y = 50) bb1.place(x = 20, y = 80) bs2.place(x = 80, y = 50) bb2.place(x= 80, y = 80) pLabel = tkinter.Label(text = "+") eLabel = tkinter.Label(text = "=") pLabel.place(x = 64, y = 70) eLabel.place(x = 120, y = 70) #ボタンの作成およびイベントの設定 button1 = tkinter.Button(text = "Done", width = 10) button1.bind("<Button-1>", Yaku) button1.place(x = 30, y = 120) root.mainloop()
このコードの実行した結果が下記である。
この分子と分母に整数を入れて、Doneを押すと
この様に、答えを出してくれる。
少しPythonのコードを見ていく。
#GUIの作成 root = tkinter.Tk() root.title("Yakubun Test") root.geometry("300x200")
上記の部分で、JavaのJFrameに相当するものを作成している。
root.mainloop()
そして、上の部分がものすごく大雑把にいうと、下記のJavaのmain部分に相当する
public static void main (String[] args) {}
JavaのJTextFieldに相当するのが、
.Entry
の部分。
ボタンにイベントを結びつけるのが、
button1.bind("<Button-1>", Yaku)
の部分である。
分数の計算の主たる部分の内容は前回の記事余談:Javaで分数の計算(約分つき) - 生物屋さんのためのゼロからのプログラミングを参照。
分数の計算の主たる部分には大して違いはないが、GUIの部分に関してはPythonの方が圧倒的に文字数が少なく済むみたいだ。