如何使用循环来测试整数和列表的元素? [复制]

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&lt;50 for x in [30,60,70]]) 将产生Trueany([x&lt;50 for x in [60,60,70]]) 将产生 False 【参考方案1】:

您可以检查min(test_scores) &gt;= 50。如果min大于等于50,则test_scores中没有小于50的int。

另外,您的代码中存在三个问题。

首先,您不能在循环外使用break 语句。这将引发SyntaxError

其次,你的函数不会返回任何你可以print 的东西。您的main() 将输出“通过”或“失败”,然后为每个print 输出None。您应该删除main() 中的print 或将course_grader() 中的return 替换为return

最后,您的elif 可以替换为else。如果avg_grade &gt;= 70 and test_scores &gt;= 50 不是True,那么必然是avg_code is &lt; 70test_score is &lt; 50 中的一个(或两者)。

【讨论】:

【参考方案2】:

正如@Bill Bell 所指出的,在这里使用anyall 函数可能很有用:

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")

【讨论】:

以上是关于如何使用循环来测试整数和列表的元素? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用for循环时如何获取前一个元素? [复制]

如何在 Python 的 for 循环中删除列表元素? [复制]

Python:如何使用循环仅访问列表的一些布尔元素?

如何将整数添加到列表中的每个元素?

如何复制数组中不同次数的元素?

如何在从列表更新路径的for循环中读取多个json? [复制]