50001


Python初心者です  
Pythonを勉強中なのですが  
点数を入力して点数に応じた評価を返すという簡単なプログラムを作成しました  
現在数値以外の入力は今は考えないものとしています

int型の変数をstr.format()メソッドを使って  
文字列としてint型の変数をprint()メソッドで出力しようとしたのですが以下のエラーが出ます  
TypeError: descriptor 'format' requires a 'str' object but received a 'int'

少しプログラムを修正すると一応動くようにはなったのですが  
調べてもエラーの意味や、どういう違いで動かなかったのかということが  
具体的に理解できておらず、教えていただきたいです

環境はPython3.7.1になります

よろしくお願いいたします

動くプログラム

[code]

    evaluation = "NULL"
    i = input("点数を入力:")
    score = int(i)
    
    if score>=0 and score<=59:
        evaluation = "F"
    elif score>=60 and score<=69:
        evaluation = "C"
    elif score>=70 and score<=79:
        evaluation = "B"
    elif score>=80 and score<=89:
        evaluation = "A"
    elif score>=90 and score<=100:
        evaluation = "S"
    
    if evaluation != "NULL":
        print(str.format(i) + "点の評価は" + evaluation + "です")
    else:
        print("エラー:0~100までの数値を入力してください。")
    
[/code]

問題の動かないプログラム

[code]

    evaluation = "NULL"
    score = int(input("点数を入力:"))
    
    if score>=0 and score<=59:
        evaluation = "F"
    elif score>=60 and score<=69:
        evaluation = "C"
    elif score>=70 and score<=79:
        evaluation = "B"
    elif score>=80 and score<=89:
        evaluation = "A"
    elif score>=90 and score<=100:
        evaluation = "S"
    
    if evaluation != "NULL":
        print(str.format(score) + "点の評価は" + evaluation + "です")
    else:
        print("エラー:0~100までの数値を入力してください。")
    
[/code]


CC BY-SA 4.0
2018-11-06T03:10:38.497
50000
2018-11-06T04:09:26.193
2018-11-06T04:09:26.193
19110
question
python python3
str.format()メソッドでTypeError: descriptor 'format' requires a 'str' object but received a 'int'のエラーが出る


[str.format()](https://docs.python.jp/3/library/stdtypes.html#str.format)
は、通常は`str`の部分に書式文字列を指定します。

[code]

    print("{}点の評価は{}です".format(score, evaluation))
    
[/code]

`str.format(score)` と書いた場合は最初の引数が書式文字列と解釈されます。

[code]

    print(str.fomat("{}点の評価は{}です", score, evaluation))
    
[/code]

うまくいくコードでは変数`i`が書式文字列としてパーズされて、結果そのまま返されています。


CC BY-SA 4.0
2018-11-06T03:36:29.433
50001
2018-11-06T03:51:06.010
2018-11-06T03:51:06.010
3475
3475
50000
answer


# エラーの原因

> TypeError: descriptor 'format' requires a 'str' object but received a 'int'

str.formatは引数にstr型のオブジェクトを必要とします。この時、`score`がint型のオブジェクトであるため、エラーが発生しています。

str.format について： <https://docs.python.jp/3/library/stdtypes.html#str.format>

# 解決方法

## 1\. 書式文字列を定義する

int32_t
氏の回答のように、書式文字列を指定することで、その形式に合わせたフォーマットがなされます。但し、`%`演算子を利用したフォーマットは将来的に廃止されることが予告されており、現在は`{}`を利用したものが推奨されます。

<https://docs.python.jp/3/library/string.html#format-examples>

## 2\. 予め文字列に変換してから渡す

現在の形式でも、予め `score` を`str`型に変換することで、問題なく実行することができます。

[code]

        print(str(i) + "点の評価は" + evaluation + "です")
    
[/code]


CC BY-SA 4.0
2018-11-06T03:48:29.233
50002
2018-11-06T03:48:29.233
29826
50000
answer