【问题标题】:Final Grades Program: how to convert number to letter for grades with method最终成绩程序:如何使用方法将成绩的数字转换为字母
【发布时间】:2021-04-19 20:58:36
【问题描述】:

我正在尝试创建一个程序,它将: 提示用户输入将要输入的成绩数。 输入用户名,然后在两个提示中输入他们的成绩。 显示每个人的字母等级。 然后根据输入计算班级平均分、最高分和最低分。

我需要有一个convertGrade 的方法(从数字到字母)。

上面的每个方法都应该接受一个列表作为参数。

输出可能如下所示:

Welcome to the Final Grades Program

Enter the number of students: 3

Student's name: t
Student's mark (%): 32

Student's name: d
Student's mark (%): 78

Student's name: r
Student's mark (%): 89

t          F
d          B
r          A

Class Average:    67
Highest Mark:     89
Lowest Mark:      32

但是,我不知道如何将分数转换为字母(因为 int 和 str 不能与 > 或

我乱七八糟的代码:

def intro():
    name = []
    mark = []

    while True:
        # Number of students
        numStudents = input("Enter the number of students: ")
        print ()

        #Info (Name/grade)
        for x in range(int(numStudents)):
            stuName = input("Student's name: ")
            stuMark = input("Student's mark (%): ")
            name.append(stuName)
            mark.append(stuMark)
                print ()

       if stuMark > 80:
                 print ("A")

            elif stuMark > 70 and stuMark < 79:
                 print ("B")

            elif stuMark > 60 and stuMark < 69:
                 print ("C")

            elif stuMark > 50 and stuMark < 59:
                 print ("D")
         
            elif stuMark < 50:
                 print ("F")

            else:
                 print ("Could not calculate grade.")
                 
# List
def list():
    print ()
    print("Student Name \t\t Student Grade")
    print("---------------------------------------------")
    for x in range(len(name)):
        print(f"{name[x]} \t\t\t {mark[x]}")

def main():
    print ("Welcome to the Final Grades Program")
    print()
    start = intro()
    show = list()

main()

【问题讨论】:

  • 虽然@Daniel Hao 为您的问题提供了更复杂和优雅的解决方案,但只需将每个条件句中的stuMark 替换为int(stuMark) 就会给您正确的答案。您收到错误的原因是输入始终返回字符串类型值。要将值视为数字,您需要将 str 变量转换为 int。
  • list 是 Python 内置的,所以尽量避免将它用于变量或函数名。您的程序中存在一些错误,我已尝试在帖子中解决这些错误。看看你能不能看懂。

标签: python python-3.x


【解决方案1】:

@Mitzy,Python 中有一些不错的函数可用于快速查找 - 例如。 bisect() 模块。尝试熟悉它。 所以你的程序可以在这里改进:

import bisect

def grading(score, points=[50, 60, 70, 80], grades='FDCBA'):
    i = bisect.bisect(points, score)
    #print(i)
    return grades[i]



def intro():
    students, marks = [], []

    while True:
        # Number of students
        numStudents = input("Enter the number of students: ")
        print ()

        #Info (Name/grade)
        for x in range(int(numStudents)):
            name = input("Student's name: ")
            mark = int(input("Student's mark (%): "))
            print(name, mark, grading(mark))
            
            students.append(name)
            marks.append(mark)
      

# List
def my_list():
    print ()
    print("Student Name \t\t Student Grade")
    print("---------------------------------------------")
    for x in range(len(name)):
        print(f"{name[x]} \t\t\t {mark[x]}")

if __name__ == '__main__':
    print ("Welcome to the Final Grades Program")
    print()
    intro()
    my_list()

输出:

Welcome to the Final Grades Program

Enter the number of students: 3

Student's name: Alex
Student's mark (%): 91
Alex 91 A
Student's name: Bill
Student's mark (%): 82
Bill 82 A
Student's name: Cindy
Student's mark (%): 75

Cindy 75 B
Enter the number of students: 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 2020-02-20
    • 1970-01-01
    • 2021-04-19
    • 2016-08-13
    • 2012-03-31
    • 1970-01-01
    相关资源
    最近更新 更多