python - If 语句在每次出现时重复

标签 python python-3.x list if-statement

我有一个列表,其中包含不同的类(class)名称,后跟一个逗号,然后是成绩。

courses = ['COMP 1000,A+', "MATH 1000,A+", 'SCIE1000,B+"]

每次列表中出现成绩时,我都会将其更改为成绩点值并将其添加到不同的列表中。然后从那里我通过找到平均值来计算 GPA。我为此使用以下代码:

if any("A+" in n for n in courses):
    grades.append(4.30)
if any("B+" in n for n in courses):
    grades.append(3.30)

这对于每个等级重复一次的列表来说效果很好,但对于上面的类(class)列表,有两个 A+,但 4.30 只被添加一次。每次列表中有成绩时,是否有办法将 4.30 添加到新列表?

谢谢

最佳答案

你的做法是错误的。遍历类(class),以逗号分隔,并在字典中查找成绩到成绩点的转换(相当于其他语言中的 case 语句)。

courses = ['COMP 1000,A+', 'MATH 1000,A+', 'SCIE1000,B+']
grades = []

grade_to_grade_point = {
    "A+": 4.30,
    "B+": 3.30,
    # ...
    }
for course in courses:
    course_name, grade = course.split(',')
    grades.append(grade_to_grade_point[grade])

print(grades)  # -> [4.3, 4.3, 3.3]

或者作为列表理解:

grades = [grade_to_grade_point[c.split(',')[1]] for c in courses]

关于python - If 语句在每次出现时重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59700127/

相关文章:

python - 查找某列具有该特定行的最大数量的次数

python - “复杂”对象没有属性 '__getitem__'

python-3.x - 获取从 "/etc/group"开始排序的组 ID

python - 合并两个列表python

java - 在 Java 中创建新的对象列表会引发 NullPointerException

python - 通过 iter_messages 识别相册和图像

python - 无向图上的networkx pagerank?

python - Python 中的 MCTS *树* 并行化 - 可能吗?

python - 前端的 Django 管理员

python - 检索满足某些条件的字典