Основываясь на словаре gradeMap
, который вы определили, вы можете сделать что-то с так называемым пониманием списка .
Пример того, о чем я говорю, сделан с использованием интерпретатора 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]
Это также страдает недостатком, о котором я упоминал ранее, что определяемая вами функция должна обрабатывать случай, когда пользователь вводит недопустимую оценку.