繁体   English   中英

Python中的链接函数

[英]Chaining Functions in Python

我正在尝试为 Python 作业简介创建一个考试评分程序。 我成功地编写了每个函数来完成我需要的工作,但是当我尝试执行整个程序时,我遇到了返回变量未被引用的问题。

这是我的上下文代码:

def userinput():
    allinputs = []
    while True:
        try:
            results = list(map(int, input('Exam points and exercises completed: ').split(' ')))
            allinputs.append(results)
        except:
            ValueError
            break
    return allinputs

def points(allinputs):
    exampoints = []
    exercises = []
    exercises_converted = []
    gradepoints = []
    counter = 0
    for i in allinputs:
        exampoints.append(i[0])
        exercises.append(i[1])
    for e in exercises:
        exercises_converted.append(e//10)
    for p in exampoints:
        p2 = exercises_converted[counter]
        gradepoints.append(p + p2)
        counter += 1  
    return (gradepoints, exampoints, exercises_converted)
    
def average(gradepoints):
    avg_float = sum(gradepoints) / len(gradepoints)
    points_avg = round(avg_float, 1)
    return points_avg

def pass_percentage(exercises_converted, exampoints):
    failexam = []
    passexam = []
    passorfail = []
    i = 0
    while i < len(exampoints):
        if exampoints[i] < 10 or exercises_converted[i] + exampoints[i] < 15:
            failexam.append("fail")
            passorfail.append(0)
        else:
            passexam.append("pass")
            passorfail.append(1)
        i += 1
    percentage_float = len(passexam)/len(failexam)
    percentage = round(percentage_float, 1)
    return (percentage, passorfail)
    
def grades_distribution(passorfail, gradepoints):
    grades = []
    i = 0
    l = 5
    while i < len(gradepoints):
        if passorfail[i] == 0:
            grades.append(0)
        elif passorfail[i] != 0 and gradepoints[i] >= 15 and gradepoints[i] <= 17:
            grades.append(1)
        elif passorfail[i] != 0 and gradepoints[i] >= 18 and gradepoints[i] <= 20:
            grades.append(2)
        elif passorfail[i] != 0 and gradepoints[i] >= 21 and gradepoints[i] <= 23:
            grades.append(3)
        elif passorfail[i] != 0 and gradepoints[i] >= 24 and gradepoints[i] <= 27:
            grades.append(4)
        elif passorfail[i] != 0 and gradepoints[i] >= 28 and gradepoints[i] <= 30:
            grades.append(5)
        i += 1
    while l >= 0:
        print(l, ": ", "*" * grades.count(l))
    return 



userinput()
print("Statistics:")
points(allinputs)
print(f"Points average: {average(gradepoints)}")
print(f"Pass percentage: {pass_percentage(exercises_converted, exampoints)}")
print("Grade distribution")
grades_distribution(passorfail, gradepoints)

我对每个功能的机制没有任何问题; 相反,我的错误在于我尝试从主函数调用它们中的每一个。

user input()函数运行良好,并返回allinputs 但是,当调用第二个函数points(allinputs)时,程序声明参数未定义。 我对 Python 和编程非常陌生,所以这可能是我缺少的基本内容,但如果有人能指出我正确的方向,我将不胜感激。

您应该在将函数的返回值作为参数传递之前存储它。 这应该可以解决您的问题

allinputs = userinput()
points(allinputs)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM