如何使用循环测试整数和列表元素?

时间:2017-08-05 19:33:40

标签: python-3.x average

我一直试图测试参数测试分数,看看是否有任何测试低于50.如果是这样,它应该返回失败。如果平均值高于70并且没有测试低于50,那么它应该返回通过。

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循环,但它给了我太多答案。

2 个答案:

答案 0 :(得分:1)

您可以查看是否min(test_scores) >= 50。如果min高于或等于50,那么test_scores中的int不会低于50。

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

首先,您可以在循环之外使用break语句。这将引发SyntaxError

其次,您的功能不会返回任何可以print的内容。您的main()将输出&#39;通过&#39;或者&#39;失败&#39;然后为每个None print。您应该移除print中的main()或将course_grader()替换为return

最后,您的elif可以替换为else。如果avg_grade >= 70 and test_scores >= 50不是True,则必须(或两者)avg_code is < 70test_score is < 50

答案 1 :(得分:1)

正如@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")