任意の数の最大公約数・最小公倍数を計算するプログラムです。
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()