

【問題文】  
ある受験番号 num を与えた時に、以下の結果を表示させるプログラムを作成しなさい。num
の値を変更し（例えば、“A01”、“A02”、“A07”など）、プログラムの動作確認を行いなさい。

  * 受験しており試験の点数が 60 点以上の場合は、「合格」と表示させる
  * 受験しており試験の点数が 60 点未満の場合は、「不合格」と表示させる
  * 受験していない場合は、「未受験」と表示させる

以上3つの条件を満たしたものを作っています。  
最後まで自分でやってみたのですが、行き詰ってしまっています。

[code]

    result = {"A01":50, "A03":80, "A04":100, "A05":20, "A07":60}
    
    num = 'A03'
    
    if num in result:
         print("合格")
    elif  0 <= num < 60:
        print("不合格")
    else:
        print("未受験")
    
[/code]

A01までは条件通りの評価が表示されるのですが、それ以降は `TypeError: '<=' not supported between instances
of 'int' and 'str'` というエラーになってしまいます。  
どこが間違いでどういう訂正をしたらいいのか教えていただきたいです。

追記：もう少し詳しく情報がわかるように編集しました！  
教えていただくというのに申し訳ないです…。よろしくおねがいします！


CC BY-SA 4.0
2020-05-27T09:31:00.420
67036
2020-05-28T00:24:51.217
2020-05-28T00:24:51.217
40354
40354
question
python python3
辞書を作成して、ある受験番号を与えたときに結果を表示させるプログラムを課題でやっています。


おそらく、受験番号と点数を混同されているのではないでしょうか。

変数 `num` について、`num = 'A03'` という代入をしているように、`num` には受験番号の文字列 `'A03'`
が入っています。点数は入っていません。今回出ているエラーは「`<=` っていうから数値かと思ったら、文字列だからできないよ」というもので、実際 `num`
は文字列なので `0 <= num` という比較はできません。

点数を知るためには辞書 `result` からもらってこなければいけません。たとえば `'A03'` の点数は `result['A03']`
と書くと取得できます。

* * *

ところで、今の条件分岐のやり方だと受験番号と点数の混同を直しても上手く動きません。今のままだと `result`
に点数が格納されているだけで「合格」が出力されてしまいます。if 文がどのように動くのかよく確認してみてください。


CC BY-SA 4.0
2020-05-27T11:13:59.733
67039
2020-05-27T11:13:59.733
19110
67036
answer


3 つの条件からするとやりたかったことはこういう感じのことでしょうか？

[code]

    students = ["A01", "A02", "A03", "A04", "A05", "A06", "A07"]
    result = {"A01":50, "A03":80, "A04":100, "A05":20, "A07":60}
    
    for student in students:
        if not student in result.keys():
            print("未受験")
        elif result[student] >= 60:
            print("合格")
        else:
            print("不合格")
    
[/code]

質問文に提示されたプログラムについてですが、まず

[code]

    if num in result:
    
[/code]

これは、ループと条件文がごっちゃになっていると思います。まずはループ文を作るため、全受験者の ID のリストを `students` として用意し、その
ID をひとつずつ使うのがループの基本です。それが

[code]

    students = ["A01", "A02", "A03", "A04", "A05", "A06", "A07"]
    for student in students:
        （以下ループブロック）
    
[/code]

とした部分です。

次に、辞書なので、key から value を取り出して使う必要があります。それが `result[student]`
という記述の部分で、そうやって初めて、数値の 60 との比較が可能となります。

[code]

    elif result[student] >= 60:
    
[/code]

また最後に、未受験の場合にも対応しなければならないので、result の key の一覧の中に含まれない ID の場合を条件分岐で判定しています。

[code]

    if not student in result.keys():
    
[/code]


CC BY-SA 4.0
2020-05-27T12:35:45.907
67043
2020-05-27T12:35:45.907
7290
67036
answer