LoginSignup
0
1

More than 1 year has passed since last update.

進数変換ツールを作ってみた。

Posted at

flaskで2進数、10進数、16進数変換toolを作成してみました。

環境

Python version:3.9.7
OS: windows 10.0

イメージ

ドロップダウンメニューで入力する基数を選択し、値を入力し、計算ボタンを押すと、変換した結果が出力されるようにしています。
image.png

ファイル構成

ファイル構成は、下記のようにしています。app.pyでcalc.html内で行う処理を入れています。
flsk_*.ps1は、windowsでflaskを起動する設定を毎回入力する手間だったので、scriptにしています。api内のradix_conversion.pyでは、関数として変換する処理を置いています。
image.png

flaskの起動方法

flaskを扱ったことがなかったので、起動方法を書いておきます。powershellにて、下記コマンドを入力すると、サーバーが起動します。私は、シェル化し./flask_normal.ps1を実行して、起動するようにしました。Flaskサーバが起動したら、ブラウザへ「http://127.0.0.1:5000/」を入力すると、アクセスすることができます。

$env:FLASK_APP = "app"
flask run

flaskのデバックモードで起動すると、エラーを出してくれます。デバックモードでの起動は、下記のコマンドで行えます。

$env:FLASK_APP = "app"
$env:FLASK_ENV = "development"
flask run

PowerShellのshellと実行方法

簡略化のため、shellとして実行できるようにします。PowerShellは、xxx.ps1のテキストファイルでスクリプトを作成できます。実行方法は、powershell .\xxx.ps1または、.\xxx.ps1で実行できます。

プログラム

コードは、githabにあげていますので、参考にして下さい。

app.pyについて、簡単に説明します。app.route("/")は、ルーティングです。ルーティングとは、URLと処理を対応づけています。request.formでは、calc.html内で設定する基数と数値を取得しています。その後、基数に応じてradix_conversion.pyにある変換処理をさせて、結果を出力するようにしています。

app.py
from flask import *
from api.calclate import radix_conversion

app = Flask(__name__)

radix_list=["bin","dec","hex"]

@app.route("/")
def index():
    return render_template('index.html')
 
@app.route("/calc", methods=['GET','POST'])
def calc():
    if request.method == 'GET':
        return render_template('calc.html', radix_list = radix_list)
    elif request.method == 'POST':
        radix_name = request.form['radix_name']
        radix_num = request.form['radix_num']
        if   radix_name == "bin":
            result = radix_conversion.bin_to_dec_hex(radix_num)
            return render_template('calc.html', base_radix=radix_num,conv1_radix=result[0],conv2_radix=result[1],base_name="bin",conv1_name="dec",conv2_name="hex", radix_list = radix_list)
        elif radix_name == "dec":
            result = radix_conversion.dec_to_bin_hex(radix_num)
            return render_template('calc.html', base_radix=radix_num,conv1_radix=result[0],conv2_radix=result[1],base_name="dec",conv1_name="bin",conv2_name="hex", radix_list = radix_list)
        elif radix_name == "hex":
            result = radix_conversion.hex_to_bin_dec(radix_num)
            return render_template('calc.html', base_radix=radix_num,conv1_radix=result[0],conv2_radix=result[1],base_name="hex",conv1_name="bin",conv2_name="dec", radix_list = radix_list)
        else:
            return render_template('calc.html',error=result)

if __name__ == '__main__':
    app.run()

radix_conversion.pyは、pythonの基数変換できる関数を用いて変換処理をし、結果をapp.pyへ戻しています。

radix_conversion.py
def bin_to_dec_hex(bin_num):
    try:
        return int(bin_num,2), hex(int(bin_num,2))
    except :
        return '--'

def dec_to_bin_hex(dec_num):
    try:
        return bin(int(dec_num)), hex(int(dec_num))
    except :
        return '--'

def hex_to_bin_dec(hex_num):
    try:
        return bin(int(hex_num,16)), int(hex_num,16)
    except :
        return '--'

calc.htmlは、app.py内で設定したlistをドロップダウンに表示させるようにしました。nameの値は、app.pyのリクエストフォーム文で読み込むことができ、それを用いてapp.pyで処理をしていまます。結果の出力は、app.pyで記述して変数と{{xxx}}が対応しています。

calc.html

<!doctype html>
<html>
	<head>
		<meta charset="utf-8">
		<title>radix converte page</title>
	</head>
	<body>
	<h1>2進数/10進数/16進数変換ツール</h1>
	<form action='/calc' method='POST'>
		<p>入力する基数:
			<select name="radix_name">
			{% for i in radix_list %}
				<option value="{{ i }}">{{ i }}</option>
			{% endfor %}
			</select>
		</p>
		<p>bin: 2進数 / dec: 10進数 / hex: 16進数</p>
		<input name='radix_num' type='text' placeholder='20'>
		<input type='submit' value='計算'>
	</form>
	{%if base_radix%}
	<p>{{base_name}}は、{{base_radix}}</p>
	<p>{{conv1_name}}は、{{conv1_radix}}</p>
	<p>{{conv2_name}}は、{{conv2_radix}}</p>
	{%else%}
	<p>{{error}}</p>
	{%endif%}
	</body>
</html>

参考リンク

参考にしたリンクです。
【Python Flask入門】使い方の基礎からWebアプリケーション作成までの流れ
PowerShellのPS1ファイルの作成と実行

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1