Здесь есть несколько хороших ответов, но никто не говорит вам, почему то, что у вас есть, не работает:
Проблема заключается в том, что вы используете любой . Функция any
принимает список логических значений и возвращает true, если хотя бы одно значение в списке истинно.
>>> any([True, True])
True
>>> any([True, False])
True
>>> any([False, False])
False
Независимо от того, сколько True
s в списке, возвращается только один логический тип, и ваш оператор if будет выполняться только один раз . Таким образом, даже если в вашем списке есть два «A +», только один append
будет сформирован.
Ближайшая вещь к тому, что вы пытаетесь достичь с помощью функции any
(что я могу себе представить of) было бы списком со следующим условием:
>>> courses = ['COMP 1000,A+', 'MATH 1000,A+', 'SCIE1000,B+']
>>> [n for n in courses if "A+" in n]
['COMP 1000,A+', 'MATH 1000,A+']
Здесь элементы, не удовлетворяющие условию "A+" in n
, не являются частью нового массива. Это заставит ваш код выглядеть так:
for i in [n for n in courses if "A+" in n]:
grades.append(4.30)
, который говорит, что я бы не рекомендовал делать это . Существуют и другие решения, которые более понятны и удобочитаемы, например Решение Исмила или даже что-то простое:
courses = ["COMP 1000,A+", "MATH 1000,A+", "SCIE1000,B+"]
grades= []
for course in courses:
if "A+" in course:
grades.append("4.30")
...
Бонус Pro tip! Рассмотрим вероятность того, что в курсах может быть BIO,A+
. который прошел бы оператор if. if "B" in course
. Возможно, стоит разделить название курса и оценку.
>>> "Bio,A+".split(",")
['Bio', 'A+']
>>> "Bio,A+".split(",")[1]
'A+'
;) happy coding!