我正在尝试在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()
答案 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的答案!到目前为止工作很好。
正如我在评论中提到的,由于您无法使用if
,elif
或else
控制流语句,因此看起来应该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()