

大学のPythonの課題で次のプログラムを作ることになっています。  
入力された 1 から 9999 までの整数に対して，その漢字表記を返す関数 `thousand()` というものを作成しています。

期待している実行例：

[code]

    thousands(9876) → "九千八百七十六"
    thousands(12) → "十二"
    thousands(102) → "百二"
    
[/code]

千の位、百の位、、といった形で場合分けして空っぽのリストに足していくようにしているのですが、千の位だけうまく実行できません。他の位の場合と似た形でコードを記述しているのですが、なぜうまくいかないのかがわかりません。

私の書いたコード

[code]

    def thousands(n):
        s = ""
        a = str(n)
        
        if len(a) == 4:
        
            d = a[-4]
    
            list3 =["","千","二千","三千","四千","五千","六千","七千","八千","九千"]
    
            for i in range(0,9):
                if int(d) == 0:
                    s += list3[0]
                elif int(d) ==i:
                    s +=  list3[i]
    
        if len(a) >= 3:
            
            e = a[-3]
            
            list4 =["","百","二百","三百","四百","五百","六百","七百","八百","九百"]
    
            for j in range(0,9):
                if int(e) == 0:
                    s +=  list4[0]
                elif int(e) ==j:
                    s += list4[j]
    
        if len(a) >= 2:
            
            f = a[-2]
            
            list5 =["","十","二十","三十","四十","五十","六十","七十","八十","九十"]
    
            for k in range(0,9):
                if int(f) == 0:
                    s +=  list5[0]
                elif int(f) ==k:
                    s +=  list5[k]
    
        if len(a) >= 1:
            
            g = a[-1]
            list1 =["","一","二","三","四","五","六","七","八","九"]
    
            for l in range(0,9):
                if int(g) == 0:
                    s +=  list1[0]
                elif int(g) ==l:
                    s += list1[l]    
        return s
    
[/code]


CC BY-SA 4.0
2021-10-26T01:10:09.800
83259
2021-10-26T02:11:04.343
2021-10-26T02:09:27.597
19110
48732
question
python python3
入力された 1 から 9999 までの整数に対して、その漢字表記を返す関数が千の位だけうまく動かない


`range`の範囲指定が原因で、千の位に限らず`9`の処理が対象から外れています。  
例えば`print(thousands(192))`を実行すると`百二`が出力されます。

[`range`](https://docs.python.org/ja/3/library/stdtypes.html#ranges)は第二引数を
**含まない** 連続した数値を返します。

[code]

    >>> list(range(0,9))
    [0, 1, 2, 3, 4, 5, 6, 7, 8]
    
[/code]

上記の通り`9`がループ対象に含まれませんので、`range(0,10)`に書き換えて範囲を広げると正しい値が出力されます。


CC BY-SA 4.0
2021-10-26T02:11:04.343
83261
2021-10-26T02:11:04.343
9820
83259
answer