Python 每次发生时重复If语句
我有一个不同课程名称的列表,后面跟一个逗号,然后跟分数Python 每次发生时重复If语句,python,python-3.x,list,if-statement,Python,Python 3.x,List,If Statement,我有一个不同课程名称的列表,后面跟一个逗号,然后跟分数 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):
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)
这对于每个年级重复一次的课程列表来说效果很好,但是对于上面的课程列表,有两个A+,但是4.30只添加了一次。是否有一种方法可以在每次成绩表中都增加4.30分
谢谢使用一台电脑怎么样
你走错了路。在课程上循环,在逗号上拆分,并在dict中查找年级到年级点的转换(相当于其他语言中的
case
语句)
或作为列表:
grades = [grade_to_grade_point[c.split(',')[1]] for c in courses]
如果您希望将其放在一行中,可以使用以下命令:
courses=['COMP 1000,A+',“MATH 1000,A+”,“SCIE1000,B+”]
点数={'A+':4.30,'B+':3.30}
分数=[分数的值,分数的值。如果课程中有分数,则课程中的项目()为]
印刷品(等级)
>>> [4.3, 4.3, 3.3]
这里有一些很好的答案,但没有一个能告诉你为什么你现有的不起作用:
问题在于你使用的是什么。any
函数接受布尔值列表,如果列表中至少有一个值为true,则返回true
>>> any([True, True])
True
>>> any([True, False])
True
>>> any([False, False])
False
无论列表中有多少个True
s,都只返回一个布尔值,并且if语句只运行一次。因此,即使列表中有两个“A+”,也只执行一个append
最接近您试图用任何函数(我能想到)实现的目标是列表理解,条件是:
>>> courses = ['COMP 1000,A+', 'MATH 1000,A+', 'SCIE1000,B+']
>>> [n for n in courses if "A+" in n]
['COMP 1000,A+', 'MATH 1000,A+']
在这里,如果新数组不满足条件,则不属于n
中的“A+”项。这将使您的代码如下所示:
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")
...
奖金专业提示强烈地考虑在课程中可能是<代码> BIO,A+< /代码>。它将通过if语句<代码>如果课程中出现“B”
。将课程名称和等级分开可能是值得的
>>> "Bio,A+".split(",")
['Bio', 'A+']
>>> "Bio,A+".split(",")[1]
'A+'
)()快乐编码 现有的答案很好,但我想展示一种更面向对象的方法,以备启发。就我个人而言,我更喜欢函数式风格,但OO是目前所教授的主要内容
from decimal import decimal#用于精确小数而不是浮点数学
班级课程:
定义初始(自我、姓名、字母等级):
self.name=名称
self.lettergrade=lettergrade
@类方法
来自_字符串的def(cls,s):
名称,lettergrade=s.split(',')
返回cls(name.strip(),lettergrade.strip())
@财产
def爬坡点(自):
映射={
“A+”:十进制('4.3'),
“A”:十进制('4'),
“A-”:十进制('3.7'),
“B+”:十进制('3.3'),
“B”:十进制('3'),
等等
}
返回映射.get(self.lettergrade)
#将输入读入“课程”,然后:
课程=[Course.from_字符串(c)表示课程中的c]
成绩=[c.课程中c的成绩点]
从统计数据看进口意味着什么
平均分数=平均分数#给出一个等于你平均分数的小数点
courses = ["COMP 1000,A+", "MATH 1000,A+", "SCIE1000,B+"]
grades= []
for course in courses:
if "A+" in course:
grades.append("4.30")
...
>>> "Bio,A+".split(",")
['Bio', 'A+']
>>> "Bio,A+".split(",")[1]
'A+'