我正在尝试为用户的加权GPA创建一个计算器。我正在使用PyautoGUI询问用户他们的成绩和上课的类型。但我希望能够接受该用户输入,并从本质上将其重新映射为其他值。
class GPA():
grades = []
classtypes = []
your_format = confirm(text='Choose your grade format: ', title='',
buttons=['LETTERS', 'PERCENTAGE', 'QUIT'])
classnum = int(prompt("Enter the number of classes you have: "))
for i in range(classnum):
grade = prompt(text='Enter your grade for the course
:'.format(name)).lower()
classtype = prompt(text='Enter the type of Course (Ex. Regular, AP, Honors): ').lower()
classtypes.append(classtype)
grades.append(grade)
def __init__(self):
self.gradeMap = {'a+': 4.0, 'a': 4.0, 'a-': 3.7, 'b+': 3.3, 'b': 3.0,'b-': 2.7,
'c+': 2.3, 'c': 2.0, 'c-': 1.7, 'd+': 1.3, 'd': 1.0, 'f': 0.0}
self.weightMap = {'advanced placement': 1.0, 'ap': 1.0, 'honors': 0.5,'regular': 0.0}
答案 0 :(得分:1)
根据gradeMap
字典,您可以定义自己可以使用的list comprehension做事。
我正在谈论的示例是使用Python解释器完成的:
>>> grades = ['a', 'c-', 'c']
>>> gradeMap = {'a+': 4.0, 'a': 4.0, 'a-': 3.7, 'b+': 3.3, 'b': 3.0,'b-': 2.7,
... 'c+': 2.3, 'c': 2.0, 'c-': 1.7, 'd+': 1.3, 'd': 1.0, 'f': 0.0}
>>> [gradeMap[grade] for grade in grades] #here's the list comprehension
[4.0, 1.7, 2.0]
我认为这种方法的弊端可能是确保用户仅给您gradeMap
中定义的分数,否则它将给您KeyError
。
另一种替代方法是使用map
。 map
稍有不同,它需要一个函数和一个输入列表,然后将该函数应用于输入列表。
具有非常简单的功能的示例,仅适用于几个等级:
>>> def convert_grade_to_points(grade):
... if grade == 'a':
... return 4.0
... elif grade == 'b':
... return 3.0
... else:
... return 0
...
>>> grades = ['a', 'b', 'b']
>>> map(convert_grade_to_points, grades)
[4.0, 3.0, 3.0]
这也有我前面提到的缺点,即您定义的功能必须处理用户输入无效成绩的情况。
答案 1 :(得分:0)
您可以就地替换列表中的项目。
for grade in gradeList:
if type is "PERCENTAGE":
grade = grade × some_factor # use your logic
elif type is "LETTERS":
grade="some other logic"