任意の数の最大公約数・最小公倍数を計算するプログラムです。

 

PythonとAnacondaをインストールした後、JupyterNoteBookに以下のソースコードを貼り付けて実行してください。

実行後、以下のダイアログが起動しますので、数値の個数を指定し、ボタンをクリックすると2段階目のダイアログが起動します。

 

2段階目のダイアログに数値を入力し、ボタンをクリックすると計算結果が下部に表示されます。

(下記に表示のダイアログは一例)

 

 

[ソースコード]

import math

# GUIアプリケーションモジュールのインポート
from tkinter import messagebox
import tkinter as tk

# 入力ボックスの幅を指定
inputwidth = 15

# 方程式の次元を指定(メインウィンドウ)
root = tk.Tk()
root.title('最大公約数・最小公倍数')
root.geometry('360x80')

# 係数入力フォームを開く(サブウィンドウ)
def varform():
    
    global number, formvar # このプログラム全体で有効な変数の指定(グローバル変数)
    
    # 入力チェック・フォームから値取得
    if numberform.get() == '':
        messagebox.showerror('エラー', '数値が入力されていません')
    elif not numberform.get().isdecimal(): # 10進数の正の数字かどうか判定
        messagebox.showerror('エラー', '数値は2以上の正の整数で入力してください')
    else:
        number = int(numberform.get()) # 配列の個数を指定
        if number < 2:
            messagebox.showerror('エラー', '数値は2以上の正の整数で入力してください')
        else:
            formvar = [0] * number
            labelsymbol = [0] * (number-1)
            varformat = tk.Toplevel()
            varformat.title(str(number) + '個の最大公約数・最小公倍数')
            varformat.geometry( str((inputwidth*6+20)*(number+1)) + 'x60')
            for i in range(number):
                formvar[i] = tk.Entry(varformat, width = inputwidth)
                formvar[i].grid(row = 0, column = i*2)
                if i < number-1:
                    labelsymbol[i] = tk.Label(varformat, text = ' , ')
                    labelsymbol[i].grid(row = 0, column = i*2+1)
            button = tk.Button(varformat, text = "最大公約数・最小公倍数計算", command = commoncalculation)
            button.grid(row = 1, column = 0, columnspan = number*2+1)

# 最大公約数・最小公倍数計算
def commoncalculation():
    
    # 入力チェック・フォームから値取得
    var = [0] * (number)
    for i in range(len(var)):
        if formvar[i].get() == '':
            messagebox.showerror('エラー', '数値が入力されていません')
            return # 関数を終了
        elif not formvar[i].get().isdecimal(): # 10進数の正の数字かどうか判定
            messagebox.showerror('エラー', '数値は正の整数で入力してください')
            return # 関数を終了
        else:
            var[i] = int( formvar[i].get() )
            if var[i] == 0:
                messagebox.showerror('エラー', '数値は正の整数で入力してください')
                return # 関数を終了
    root.destroy()
    
    print(var)
    print('最大公約数:' + str(math.gcd(*var)) )
    print('最小公倍数:' + str(math.lcm(*var)) )

# 配列の個数を指定するフォーム(メインウィンドウ)
numberlabel = tk.Label(root, text = '配列の個数を正の整数で指定してください[2個以上]:')
numberlabel.grid(row = 0, column = 0)
numberform = tk.Entry(root, width = 10)
numberform.grid(row = 0, column = 1)
blank1 = tk.Label(root, text = '')
blank1.grid(row = 1, column = 0)
button = tk.Button(root, text = '数値入力フォームを開く', command = varform)
button.grid(row = 2, column = 0, columnspan = 2)

root.mainloop()