Pythonで金種計算プログラム

ある金額を入力して、それを支払うだけのお札あるいは硬貨の最小の枚数を計算します。
このプログラムは高校生の人にもわかるように,なるべく簡潔にコーディングしてみました。
何かプログラムを作る際に、何らかの参考になれば幸いと思っています。まず、プログラムですが,

	kinshu = (10000, 5000, 1000, 500, 100, 50, 10, 5, 1)	# お金の種類

	while True:

		maisu = []			# それぞれのお金の枚数
		a = -1

		while a < 0:		# 金額の入力
			a = int(input("金額を入力して下さい。"))


		for i in kinshu:	# リスト maisu にそれぞれの金種の枚数を追加する
			maisu.append(a // i)
			a = a % i

		maisu.append(a)

		print("ーーーーーーーーーーーーーーーーーー")
		for i in range(len(kinshu)):
			if maisu[i] == 0:	# 枚数0のお金は
				continue	# スキップする
			if i <= 2: 		# お札と硬貨の場合で分けて表示
				print(str(kinshu[i]) + "円札が、" + str(maisu[i]) + "枚です。")
			else:
				print(str(kinshu[i]) + "円玉が、" + str(maisu[i]) + "枚です。")

		print("ーーーーーーーーーーーーーーーーーー")

		print("お札は、合計", maisu[0] + maisu[1] + maisu[2], "枚です。")
		print("硬貨は、合計", maisu[3] + maisu[4] + maisu[5] + maisu[6] + maisu[7] + maisu[8], "枚です。\n" )
	
説明:
まず、kinshu() に金種計算をするための,お金の種類を代入しています。(10000円札から大きい順番に格納する)
kinshu() はタプル型なので、変更は不可です。そのあと、whileループが来て、無限に繰り返しする処理を記述しています。
一回でプログラムが終わってしまうと,なんか寂しいので、while Trueループを入れました。
リスト maisu[] は,それぞれのお金の枚数を代入するためのリスト型変数になります。ちょうど、kinshu() の要素と一対一で対応しています。
変数 a はユーザが入力した金額で,ここでも while文が使われていますが、 a が負の値の場合に繰り返し入力を求めています。
次の forループで,maisu[] にそれぞれの金種の枚数を格納しています。枚数は,金額から順次 金種の額を割っていくことで得られます。
被除数は、金額から金種の額で割った余り(剰余)を使用しています。 a = a % i は、a = a - (a // i) * i と書いても同じになります。
最後に,金種とその枚数を表示していき,紙幣と硬貨それぞれの合計枚数を求めてプログラムは終了です。(枚数 0 の金種はスキップしています)。
自分なりに改良の余地はあると思います。 例えば、紙幣・硬貨すべてを合わせた合計を最後の最後表示するとかですね。
あとは、昔(2000年代前半頃?)2000円札というのがありましたが、現在もそのお札があった場合は結果はどうなるのか検証してみるだとか、
50000円札というのを新たに発行したとして、その結果はどうなるか検証してみるとか。
いろいろアイデア工夫次第で面白いプログラムができあがるんではないかと思います。

●プログラム実行画面●


※プログラムは Control キー + C キーで強制終了します。