我有一个清单,说:
list = ['KAYE', 'DAVID', 'MUSIC', '88', 'ART', '45', 'FRENCH', '36']
我想计算列表中少于50的标记数,所以我写道:
count = 0
if list[3] < '50' or list[5] < '50' or list[7] < '50':
count = count + 1
但是,计数总是1,当有多个标记小于50时,它不会累积。
我该如何解决这个问题?非常感谢您的帮助
答案 0 :(得分:0)
您只运行一次代码,因此当然最大数量可以是F
。
如果您想测试1
中的每个元素并查看list
的数字,您可以执行以下操作:
< 50
答案 1 :(得分:0)
您正在使用if
语句检查多个内容。如果其中一个成功,它将运行下一行(仅一次),增加count
。尝试更像:
my_list = ['KAYE', 'DAVID', 'MUSIC', '88', 'ART', '45', 'FRENCH', '36']
count = 0
for i in [3,5,7]:
if int(my_list[i]) < 50:
count += 1
count
为2(45和36 <50)。这将遍历您指定的索引([3,5,7]
)。 for
循环对每个循环运行检查,如果计算结果为True,则递增count
。
此外,我已将您的list
重命名为my_list
(由@ user3100115建议),因为list
是列表的内置符号。
我觉得很奇怪你已经知道要检查的索引了。如果您已经知道,这很好。但是,如果你不这样做呢?您可以通过整个my_list
查看任何小于50的数字:
my_list = ['KAYE', 'DAVID', 'MUSIC', '88', 'ART', '45', 'FRENCH', '36']
count = 0
for i in my_list:
try:
if int(i) < 50:
count += 1
except:
pass
try
和except
内容是因为i
作为int
的解释可能会引发错误,如果它实际上不是数字。如果转换失败,except: pass
会忽略它。
答案 2 :(得分:0)
以下是一种方法:
count = len([x for x in (list[3], list[5], list[7]) if (int(x) < 50)])
和 - 如此处所示 - 您需要在比较之前转换为int,否则,例如,&#34; 100&#34;将会出现低于&#34; 50&#34;。
答案 3 :(得分:0)
您正在运行一个测试,它会查看多个可能的条件并执行一段代码,如果其中任何一个是真的。
我认为您想要计算有多少标记<50,并报告总数。
让我们做一个简单的版本,然后从那里成长:
student = ['KAYE', 'DAVID', 'MUSIC', '88', 'ART', '45', 'FRENCH', '36']
ALARM = 50
num_alarms = 0
if int(student[3]) < ALARM:
num_alarms += 1
print("Alarm! The " + student[2] + " grade is too low!")
if int(student[5]) < ALARM:
num_alarms += 1
print("Alarm! The " + student[4] + " grade is too low!")
if int(student[7]) < ALARM:
num_alarms += 1
print("Alarm! The " + student[6] + " grade is too low!")
if num_alarms != 0:
print("There were " + str(num_alarms) + " grades too low.")
这就是我认为你正在尝试做的事情。但我们可以稍微清理一下:
student = ['KAYE', 'DAVID', 'MUSIC', '88', 'ART', '45', 'FRENCH', '36']
ALARM = 50
num_alarms = 0
# count from 3 .. by 2
for score in range(3,len(student), 2):
if int(student[score]) < ALARM:
print("Alarm! The " + student[score-1] + " grade is too low!")
num_alarms += 1
if num_alarms != 0:
print("There were " + str(num_alarms) + " grades too low.")
最后,我们可以去完整的Python&#34;并添加列表推导:
alarms = [ student[class] for class in range(2, len(student), 2) if int(student[class + 1]) < ALARM ]
for class in alarms:
print("Alarm! The " + class + " grade is too low!")
num_alarms = len(alarms)
if num_alarms != 0:
print("There were " + str(num_alarms) + " grades too low.")
答案 4 :(得分:0)
另一个简短的方法......
>>> marks = ['KAYE', 'DAVID', 'MUSIC', '88', 'ART', '45', 'FRENCH', '36']
>>> sum(int(x) < 50 for x in marks[3::2])
2
如果大卫有多于或少于三个分数,这也会有效。