生物屋さんのためのゼロからのプログラミング

―忘れないための覚書 (たま~に更新)―

余談: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()

このコードの実行した結果が下記である。
f:id:Aki-Miya:20180605095516p:plain
この分子と分母に整数を入れて、Doneを押すと
f:id:Aki-Miya:20180605095557p:plain
この様に、答えを出してくれる。


少し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の方が圧倒的に文字数が少なく済むみたいだ。