四十半ばの手習(python編)〜自粛期間を通り抜けて〜
2020年2月1日にpythonを学び始めた頃は、こんな自粛自粛の世の中になるとは全く思ってはいなかったわけですが、結果として、なかなか良いタイミングでプログラミングを始めたことになりました。
本職は自粛対象の業種ではないため、ありがたいことに正直いつもよりも忙しいくらいで、noteを更新する気力も体力もなかったのですが、それでも毎日必ず少しでもいいからpythonの勉強をする、というノルマは守り続けていました。
何をやっていたかというと。一つ一番大きいのは、前回の記事のすぐ後に、給与計算のプログラミングを作り上げたことです。休校中の息子にいつでもヘルプしてもらえるのはとてもラッキーでした。おかげで、国税庁のcsvの形式の源泉徴収の対応表から欲しい所得税の額をとりだしてpython上で給与計算までできるようになりました。いやあ、とっても楽。(実際とは額を変えて、架空の額にしてあります。)
import math
import csv
def ff_round(num):
if num % 1 < 0.5:
return int(num)
else:
return int(num) + 1
kihonkyuu = 245000 # 基本給
seikaikin = 5000 # 精皆勤
jikangai_cost = 1670 # 時間外時給
jikangai_hour = 15 # 時間外労働時間
jikangaiteate = ff_round(jikangai_cost * jikangai_hour) # 時間外手当
sinyajikangai_cost = 2010 # 深夜時間外時給
sinyajikangai_hour = 0.9 # 深夜時間外労働時間
sinyajikangaiteate = ff_round(sinyajikangai_cost * sinyajikangai_hour) # 深夜時間外手当
sousikyuugaku = kihonkyuu + seikaikin + jikangaiteate + sinyajikangaiteate
print("基本給:" + str(kihonkyuu) + "円")
print("精皆勤:" + str(seikaikin) +"円")
print("時間外:" + str(jikangaiteate) +"円")
print("深夜時間外:" + str(sinyajikangaiteate) + "円")
print("総支給額:" +str(sousikyuugaku) +"円")
koyouhoken = int(math.floor(sousikyuugaku * 3 / 1000)) # 雇用保険
koujogosougaku = sousikyuugaku - koyouhoken # 控除後所得額
print("労働保険:" + str(koyouhoken) + "円")
print("控除後給与:" + str(koujogosougaku) + "円")
with open("/Users/****/PythonProjects/加工済み令和二年源泉徴収税額表.csv","r") as f:
rows = list(csv.reader(f))
for i in range(len(rows)):
for j in range(len(rows[i])):
rows[i][j] = rows[i][j].replace(",","")
for row in rows:
if row[2] != "" and int(row[2]) > koujogosougaku:
syotokuzei = int(row[3])
break
kuminzei = 15000 # 区民税
koujogakugoukei = koyouhoken + syotokuzei + kuminzei # 控除額合計
print("所得税:" + str(syotokuzei) + "円")
print("区民税" + str(kuminzei) + "円")
print("控除額合計:" + str(koujogakugoukei) + "円")
sikyuugaku = sousikyuugaku - koujogakugoukei # 支給額=総支給額-控除額合計
print("支給額:" + str(sikyuugaku) + "円")
そして、今月は賞与の月でもあるので、今日は賞与の計算のプログラムも完成させました。こちらは、簡素化して、一部のみ所得税率を条件によって出せるようにしました。うふふ、瞬殺で賞与の計算も終わる!
syouyogaku = int(245000 * 1.2) # 賞与支給額
sousikyuugaku = syouyogaku
print("賞与:" + str(syouyogaku) + "円")
print("総支給額:" +str(sousikyuugaku) +"円")
koyouhoken = int(math.floor(sousikyuugaku * 3 / 1000)) # 雇用保険
koujogosougaku = sousikyuugaku - koyouhoken # 控除後所得額
zengetukoujogogaku = 290000 #前月控除後額
if zengetukoujogogaku < 252000: #賞与所得税率割り出し
zeiritu = 4.084
if zengetukoujogogaku >= 252000 and zengetukoujogogaku < 300000:
zeiritu = 6.126
print("労働保険:" + str(koyouhoken) + "円")
print("控除後給与:" + str(koujogosougaku) + "円")
syotokuzei = int(koujogosougaku * zeiritu / 100) #所得税=控除後所得額*税率
print("所得税率" + str(zeiritu) + "%")
koujogakugoukei = koyouhoken + syotokuzei # 控除額合計
print("所得税:" + str(syotokuzei) + "円")
print("控除額合計:" + str(koujogakugoukei) + "円")
sikyuugaku = sousikyuugaku - koujogakugoukei # 支給額=総支給額-控除額合計
print("支給額:" + str(sikyuugaku) + "円")
さっそくプログラミングを学んだ成果を本業でも発揮できて、満足満足。4ヶ月半でここまでこれれば、なかなかよね、と自画自賛。本来ならちゃんと英単語を調べて、変数名をつけるべきでしょうが、ミスを引き起こすほうが怖いので、とりあえず格好悪いですが、日本語名の変数にしてしまいました。
あとは、この給与の計算したものを、exelのファイルに出力したいなと考えていますが、そちらはまだこれからです。exelとのやりとりはまだ不慣れなので、しばらく試行錯誤が必要そうです。
それから何をやっていたかというと、どうもpaizaで一通り学習したような気がするものの、なんとなく定義とかピンときていないことが多かったこともあり、ちょっと気になっていた本を一通り読み進めることにしました。
実はこの本、ずいぶん前にとある喫茶店で、白髪のきっと定年後であろう老紳士が読んでいるのを見かけて、ちょっと気になっていたのです。あんなおじいさんができるなら、私の方が若いんだし、私にもプログラミングできるんじゃないかと思ったのが、プログラミングを始めたきっかけの一つでもあったのです。一通り学んだ後だったので、ちょうどタイミング的にも読んでよかったと思いました。特に2進法のあたりは、なぜfloat型だと値が微妙にずれたりするのかとか、マイナスってどうなってるんだ、とかの理解が進んだので、なるほどーとちょっとすっきりしました。そういうのに納得できないと、気になって前に進まないのです。あと、行列の計算を使って図形を移動させたりしてるのも分かってよかったです。直接、プログラミングに役にたつかはわかりませんが、本質に少し触れられたのは収穫だったと思います。
そして、そのあとは、ちょっと何をしようかと足踏みしていたところで、息子に勧められたAizu Online Judgeのpythonのプログラミング入門編をやってみました。
こちらも無料で、それこそHelloWorldから始まる問題を解いていく形式です。会津大学の学習用ツールで一般公開されているものです。自分でもどんなプログラムが書けて、何ができないのかさっぱりわからない状態だったので、これも結構いいタイミングでやってよかったなと思います。最初の方は特に問題なく解けていったのですが、最後のほうはもう四苦八苦しながら、検索しながら、格闘していきました。こちらも毎日ではなく休み休みやりながら、1ヶ月ちょっとで入門編をクリアして、今は『アルゴリズムとデータ構造入門』を少しずつ暇なときに進めている感じです。
これからはexcelと互換させる作業を仕事で使いたいので、その辺をすすめていきたいなと考えています。ボチボチではありますが、少しずつ自分がなにかを身につけていく感覚は、いくつになっても楽しいものです。若者に負けないようがんばります!