如何使用循环来测试整数和列表的元素? [复制]
Posted
技术标签:
【中文标题】如何使用循环来测试整数和列表的元素? [复制]【英文标题】:How do I use a loop to test both an integer and the elements of a list? [duplicate] 【发布时间】:2018-01-13 12:12:39 【问题描述】:我一直在尝试测试参数测试分数,看看是否有任何测试低于 50。如果是,它应该返回失败。如果 avg 高于 70 并且没有测试低于 50,那么它应该返回 pass。
def course_grader(test_scores):
avg_grade = sum(test_scores) / len(test_scores)
if avg_grade >= 70 and test_scores >= 50:
print("pass")
elif avg_grade < 70 or test_scores < 50:
print("fail")
break
def main():
print(course_grader([100,75,45])) # "fail"
print(course_grader([100,70,85])) # "pass"
print(course_grader([80,60,60])) # "fail"
print(course_grader([80,80,90,30,80])) # "fail"
print(course_grader([70,70,70,70,70])) # "pass"
if __name__ == "__main__":
main()
我也尝试使用 for 循环,但它给了我太多答案。
【问题讨论】:
any([x<50 for x in [30,60,70]])
将产生True
。 any([x<50 for x in [60,60,70]])
将产生 False
。
【参考方案1】:
您可以检查min(test_scores) >= 50
。如果min
大于等于50,则test_scores
中没有小于50的int。
另外,您的代码中存在三个问题。
首先,您不能在循环外使用break
语句。这将引发SyntaxError
。
其次,你的函数不会返回任何你可以print
的东西。您的main()
将输出“通过”或“失败”,然后为每个print
输出None
。您应该删除main()
中的print
或将course_grader()
中的return
替换为return
。
最后,您的elif
可以替换为else
。如果avg_grade >= 70 and test_scores >= 50
不是True
,那么必然是avg_code is < 70
或test_score is < 50
中的一个(或两者)。
【讨论】:
【参考方案2】:正如@Bill Bell 所指出的,在这里使用any
或all
函数可能很有用:
def course_grader(test_scores):
avg_grade = sum(test_scores) / len(test_scores)
if avg_grade >= 70 and all([x >= 50 for x in test_scores]):
print("pass")
elif avg_grade < 70 or any([x < 50 for x in test_scores]):
print("fail")
【讨论】:
以上是关于如何使用循环来测试整数和列表的元素? [复制]的主要内容,如果未能解决你的问题,请参考以下文章