1. ホーム
  2. python

[解決済み] Pythonです。成績評価システム電卓に「最終成績」コンバータを追加するには?

2022-03-02 09:47:26

質問

なんとなくのイメージはあるのですが、うまくいきません。プログラムは、生徒の名前と3つのテストの点数を取得し、3つの点数のうち平均点(パーセント)を取得することができる必要があります。その後、点数(割合)を成績に変換する必要があります。

EDIT グレードの真ん中のスペースと"%"を削除するにはどうしたらよいでしょうか?

  • Enter"キーを押してください。
  • 名前を入力してください。ジョーダン・シンプソン
  • 最初のテストのスコア:67
  • 2回目のテストの得点:78
  • 第3回テストスコア:89
  • 最終的なレターグレード C+
  • ジョーダン・シンプソンのテストスコアは 78.0 %
  • プログラムを再開しますか?

成績評価基準。


input ('Please press "Enter" to begin')

while True:
    import math

    studentName = str(input('Enter your Name: '))
    firstScore = int(float(input('First test score: ').replace('%', '')))
    secondScore = int(float(input('Second test score: ').replace('%', '')))
    thirdScore = int(float(input('Third test score: ').replace('%', '')))
    scoreAvg = (firstScore + secondScore + thirdScore) / 3

    def grade():
        if scoreAvg >= 93 and <= 100:
            return 'A'
        if scoreAvg <= 92.9 and >= 89:
            return 'A-'
        if scoreAvg <= 88.9 and >= 87:
            return 'B+'
        if scoreAvg <= 86.9 and >= 83:
            return 'B'
        if scoreAvg <= 82.9 and >= 79:
            return 'B-'
        if scoreAvg <= 78.9 and >= 77:
            return 'C+'
        if scoreAvg <= 76.9 and >= 73:
            return 'C'
        if scoreAvg <= 72.9 and >= 69:
            return 'C-'
        if scoreAvg <= 68.9 and >= 67:
            return 'D+'
        if scoreAvg <= 66.9 and >= 60:
            return 'D'
        return 'F'

    print(grade(scoreAvg))
    print(studentName, "test score is: ",scoreAvg,'%')


    endProgram = input ('Do you want to restart the program?')

    if endProgram in ('no', 'No', 'NO', 'false', 'False', 'FALSE'):
        break

解決方法は?

ご質問の意味がよくわからないのですが、レターグレードを取得するための、より簡潔な方法をご紹介します。

>>> scores = [93, 89, 87, 83, 79, 77, 73, 69, 67, 60, 0]
>>> grades = ['A', 'A-', 'B+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'F']
>>> 
>>> def gradeFor(s):
...     grade_scores = zip(scores, grades)
...     for score, grade in grade_scores:
...        if s >= score:
...            return grade

>>> gradeFor(87)
B+
>>> gradeFor(89)
A-
>>> gradeFor(88)
B+
>>> gradeFor(67)
D+
>>> gradeFor(72)
C-
>>> gradeFor(40)
F

また、以下のようなことも可能です。

if endProgram.lower() in ('no', 'false'):