【问题标题】:How to make a grade calculator in Python如何用 Python 制作成绩计算器
【发布时间】:2019-05-11 13:45:02
【问题描述】:

我是 python 的初学者,我正在处理这个项目,该项目将打印学生的结果。除了百分比之外,我几乎完成了所有事情。看,在我的代码中,程序只会打印百分比最后一个人的分数。我需要让它单独计算每个人的百分比,然后在最后打印出来。非常感谢您的帮助。谢谢

T_marks = 1100
data = {}
while True:
    ask = input("What do you want? ")
    if ask == "y":
        name = input("Enter your name: ")
        marks = int(input("Enter marks: "))
        data[name] = marks
        percentage =(marks / T_marks) * 100
    elif ask == "print":
        for (key,value) in data.items():
            print(key,"::",value)
            if percentage > 90:
                print("Passed with A grade")
            elif percentage >= 70 and percentage < 90:
                print("Passed with B grade")
            elif percentage >= 60 and percentage < 70:
                print("Passed with C grade")
            elif percentage >= 50 and percentage < 60:
                print("passed with D Grade")
            else:
                print("You failed")
    else:
        print("Your work has ended")
        break

【问题讨论】:

  • 我注意到for (key,value) in data.items(): 行之后没有任何缩进,这意味着循环没有主体 - 因此,循环将运行直到它到达最后一项,然后控制在下一行继续。我假设keyvalue 变量包含发生这种情况后列表中最后一项的数据。那么,你能修复你的缩进,看看问题是否仍然存在吗?
  • 刚刚修复了缩进...问题仍然存在。
  • 请注意,elif 条件仅在前一个条件为假时才被评估。所以如果你有一个if percentage &gt;= 90,那么elif percentage &gt;= 70 and percentage &lt; 90 上的第二个条件将永远为真

标签: python python-3.x dictionary for-loop while-loop


【解决方案1】:

input() 方法读取一个字符串,但不能转换 e。 G。 "4 4 4 5" 到 int。不带参数的方法split() 会在字符串中创建一个单词列表,如下所示:

"4 5 5" -> ["4", "5", "5"]

将您的输入更改为:

marks_string = input("Enter marks: ")
marks = [int(mark) for mark in marks_string.split()]  # convertion to int

并改变百分比的计算:

percentage =(sum(marks) / T_marks) * 100

【讨论】:

    【解决方案2】:

    您需要在 print 情况下计算 percentage,这应该可以得到您想要的:

    T_marks = 1100
    data = {}
    while True:
        ask = input("What do you want? ")
        if ask == "y":
            name = input("Enter your name: ")
            marks = int(input("Enter marks: "))
            data[name] = marks
        elif ask == "print":
            for (key,value) in data.items():
                # NOTE percentage is under the case when user asks for print
                percentage =(value / T_marks) * 100
                print(key,"::",value)
                if percentage > 90:
                    print("Passed with A grade")
                elif percentage >= 70 and percentage < 90:
                    print("Passed with B grade")
                elif percentage >= 60 and percentage < 70:
                    print("Passed with C grade")
                elif percentage >= 50 and percentage < 60:
                    print("passed with D Grade")
                else:
                    print("You failed")
        else:
            print("Your work has ended")
            break
    

    还有两个提示:如果某人的成绩为 90,则此代码将输出 "You failed"。对于其中一种情况,您需要将相等设置为 90。 python还简化了不需要and的比较。这是一个简化版本,并针对 90 的情况进行了修正以获得 A 级:

    T_marks = 1100
    data = {}
    while True:
        ask = input("What do you want? ")
        if ask == "y":
            name = input("Enter your name: ")
            marks = int(input("Enter marks: "))
            data[name] = marks
        elif ask == "print":
            for (key,value) in data.items():
                percentage =(value / T_marks) * 100
                print(key,"::",value)
                if percentage >= 90:
                    print("Passed with A grade")
                elif 90 > percentage >= 70:
                    print("Passed with B grade")
                elif 70 > percentage >= 60:
                    print("Passed with C grade")
                elif 60 > percentage >= 50:
                    print("passed with D Grade")
                else:
                    print("You failed")
        else:
            print("Your work has ended")
            break
    

    【讨论】:

      【解决方案3】:

      缩进,在编辑中固定:

      T_marks = 1100
      data = {}
      while True:
          ask = input("What do you want? ")
          if ask == "y":
              name = input("Enter your name: ")
              marks = int(input("Enter marks: "))
              data[name] = marks
              percentage =(marks / T_marks) * 100
          elif ask == "print":
              for (key,value) in data.items():
                  print(key,"::",value)
                  if percentage > 90:
                      print("Passed with A grade")
                  elif percentage >= 70 and percentage < 90:
                      print("Passed with B grade")
                  elif percentage >= 60 and percentage < 70:
                      print("Passed with C grade")
                  elif percentage >= 50 and percentage < 60:
                      print("passed with D Grade")
                  else:
                      print("You failed")
          else:
              print("Your work has ended")
              break
      
      >>> What do you want? y
      >>>Enter your name: Alex
      >>>Enter marks: 12
      >>>What do you want? y
      >>>Enter your name: Michael
      >>>Enter marks: 22
      >>>What do you want? print
      >>>Alex :: 12
      >>>You failed
      >>>Michael :: 22
      >>>You failed
      >>>What do you want?
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-09
        • 2017-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多