没有决策语句的Python中的评分量表

时间:2016-11-16 23:58:04

标签: python

我正在尝试在python 3中创建一个程序,该程序将采用百分比分数并根据分级等级90-100打印出字母等级:A,80-89:B,70-79:C,60- 69:D,< 60:F使用字符串和列表

#gradeScale.py
#This program takes a percent score and tells the user what letter grade it is based on the grading scale

def main():
    print("This program takes a percent score and tells the user what letter grade it is based on the grading scale")
    gradingScale = ["F","F","F","F","F","F","F","D","C","B","A"]
    grade = eval(input("Please enter the percent score: "))


main()

5 个答案:

答案 0 :(得分:2)

你有一个很好的开始:

gradingScale = ["F", "F", "F" , "F" , "F" , "F", "F", "D", "C", "B", "A"]

这是11个字母等级的列表。您的分数范围从0到100.您如何将101个可能等级(0到100)的范围映射到这些项目?也许除以10然后扔掉其余部分:

print(gradingScale[grade // 10])

但这并不是很正常:70应该是C但是作为D出现.99应该是A但是出现为B.当100-100应该是A时,只有100出现为A.

这里的答案是有两个" bins" 10应该是A. 90-99和100-109(尽管我们只使用100个那个箱子)。因此,我们只需要将事情向下移动:从一开始就取一个F并在评分等级的末尾添加一个A:

gradingScale = ["F", "F" , "F" , "F" , "F", "F", "D", "C", "B", "A", "A"]

现在它有效!

为了简化代码,我们可以利用字母等级是单个字符的事实,并且字符串可以像列表一样被索引(你得到一个字符),因此gradingScale可以是一个简单的字符串:

gradingScale = "FFFFFFDCBAA"

答案 1 :(得分:1)

很抱歉使用Hogwarts的魔法,但是:

sys.prefix

从0到199(90-199是A)

我会尝试解释第3行。

grades = 'FEDCBA' score = int(input('Enter your score: ')) grade = ((score // 10) - 4) * (score // 50) * (100 // (score + 1)) + (score // 100) * 5 print('Grade is', grades[grade]) 帮助我们在(score // 10) - 4)字符串中找到50到99之间的等级作为索引。

grades使得从0到49的所有分数评估为* (score // 50)(' F'的索引)

0使所有得分从100到199评为5(指数为' A')

答案 2 :(得分:0)

您可以使用字符串,只需按索引查找成绩。

grades = ("F" * 60) + ("D" * 10) + ("C" * 10) + ("B" * 10) + ("A" * 11)

def get_grade(score):
    return grades[score]

def main():
    print("This program takes a percent score and tells the user what letter grade it is based on the grading scale")
    grade = get_grade(input("Please enter the percent score: "))
    print(grade)

main()

答案 3 :(得分:0)

编辑:

好的,因为这显然是家庭作业,你到目前为止只学过这些主题(“循环,图形,列表,字符串,一些数学库,以及其他非常基本的东西,比如印刷语句”),我们会尝试其他的东西。

我会在这里留下这个答案,以防你想要了解字典后再回来学习它,但请看下面@kindall和@Yevhen Kuzmovych的答案!到目前为止工作很好。

正如我在评论中提到的,由于您无法使用ifelifelse控制流语句,因此看起来应该dict查找适合你:

def main():
    grades = {'A': range(90, 101), 'B': range(80, 90), 'C': range(70, 80), 'D': range(60, 70), 'F': range(0, 60)}
    grade = eval(input("Please enter the percent score: "))
    return [letter for letter, rnge in grades.items() if grade in rnge][0]

打破它:

grades = {'A': range(90, 101), 'B': range(80, 90), 'C': range(70, 80), 'D': range(60, 70), 'F': range(0, 60)}

这是一本字典,其中您指定的字母等级是键,它们各自的上限和下限是range个对象。

[letter for letter, rnge in grades.items() if grade in rnge][0]

这是一个列表理解,我们遍历grades.items()返回的列表中的每个(键,值)元组,并查看提交的成绩是否落在给定字母等级的范围内。由于范围中没有重叠,因此该列表将包含一个元素。最后的[0]索引允许我们返回str而不是list

试一试:

>>> main()
Please enter the percent score: 80
'B'

答案 4 :(得分:0)

说明为分数提供分数的程序:

def main():
    print "Provides a grade as per the range of marks"
    score=input("Enter the exam score: ")

    gr="FFFFFFDCBAA"
    pos=gr[score/10]
    print "The grade obtained is: ",pos

main()