へたっぴpythonista

ド素人pythonistaとして、日々の学習成果や気づいたことについて書きます。

そろばん in python

数値とリストのインデックス値を組み合わせる練習でそろばんを作ってみました。

そろばん

def print_abacus(value): 

      a=len(str(value))
      num=['|00000*****   |','|00000****   *|','|00000***   **|','|00000**   ***|',
                '|00000*   ****|','|00000   *****|','|0000   0*****|','|000   00*****|',
                '|00   000*****|','|0   0000*****|']
      for i in range(10-a):

             print(num[0])            #入力された数字の桁数より大きい部分は0を表示する。
      for i in range(0,a):
             print(num[int(str(value)[i])])    #入力された数字を桁の大きい順に変換する。

 

numリストの中に0~9をそろばんで表現したものを入力して、そのインデックス値とvalueの各桁の数値を対応させることで答えを出力させます。最終行のnum[int(str(value)[i]])が汚いのがきになるなぁ。数値はインデクシングできないから文字列に変えて、でも文字列のままだとnumのインデクシングに使えないから再度数値に変えて・・・などと考えた結果こうなりましたが、後でもっといい方法を考えます、多分。

使用例

>>> print_abacus(123456789)
|00000*****   |
|00000****   *|
|00000***   **|
|00000**   ***|
|00000*   ****|
|00000   *****|
|0000   0*****|
|000   00*****|
|00   000*****|
|0   0000*****|
>>> print_abacus(253675)
|00000*****   |
|00000*****   |
|00000*****   |
|00000*****   |
|00000***   **|
|00000   *****|
|00000**   ***|
|0000   0*****|
|000   00*****|
|00000   *****|

 

リストのインデックス値と入力データの対応は例えばリストに画像URLを配置すれば、入力した値に対応した画像を表示させることができる等、なかなか応用の効きそうなテーマで面白いですね。