Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么无论课程定义如何(包括平均值),每个年级的输入都是相同的?_Python - Fatal编程技术网

Python 为什么无论课程定义如何(包括平均值),每个年级的输入都是相同的?

Python 为什么无论课程定义如何(包括平均值),每个年级的输入都是相同的?,python,Python,程序如下:编写一个程序,要求用户输入5个测试分数。程序应显示每个分数和平均测试分数的字母等级 我有问题,我的输出显示我的字母等级的第一个输入等级为每个等级,包括平均值。我的数字平均值也被输出为字母等级,但它给出了正确的平均值字母,而不是等级的正确数字结果。我在一个低级别的编码类,因此程序必须以这种格式编写 代码如下: a=float(input("Enter score 1:")) b=float(input("Enter score 2:")) c=float(input("Enter sco

程序如下:编写一个程序,要求用户输入5个测试分数。程序应显示每个分数和平均测试分数的字母等级

我有问题,我的输出显示我的字母等级的第一个输入等级为每个等级,包括平均值。我的数字平均值也被输出为字母等级,但它给出了正确的平均值字母,而不是等级的正确数字结果。我在一个低级别的编码类,因此程序必须以这种格式编写

代码如下:

a=float(input("Enter score 1:"))
b=float(input("Enter score 2:"))
c=float(input("Enter score 3:"))
d=float(input("Enter score 4:"))
e=float(input("Enter score 5:"))
def determine_grade(a,b,c,d,e):
    num=a
    if(num<=100 and num>=90):
        grade='A'
    elif(num<=89 and num>=80):
        grade='B'
    elif(num<=79 and num>=70):
        grade='C'
    elif(num<=69 and num>=60):
        grade='D'
    else:
        grade='F'
    return grade

def calc_average(a,b,c,d,e):
    mean=(a+b+c+d+e)//5
    if mean<=100 and mean>=90:
        avggrade='A'
    elif(mean<=89 and mean>=80):
        avggrade='B'
    elif(mean<=79 and mean>=70):
        avggrade='C'
    elif(mean<=69 and mean>=60):
        avggrade='D'
    else:
        avggrade='F'
    return avggrade

grade=determine_grade(a,b,c,d,e)
avggrade=determine_grade(a,b,c,d,e)
mean=calc_average(a,b,c,d,e)
determine_grade(a,b,c,d,e)
calc_average(a,b,c,d,e)
print("Score           Numeric Grade   Letter Grade")
print("--------------------------------------------")
print("Score 1:         ",a,"            ",grade)
print("Score 2:         ",b,"            ",grade)
print("Score 3:         ",c,"            ",grade)
print("Score 4:         ",d,"            ",grade)
print("Score 5:         ",e,"            ",grade)
print("--------------------------------------------")
print("Average Score:   ",mean,"            ",avggrade)
我得到一个语法错误来代替代码中显示的内容:

TypeError: '<=' not supported between instances of 'tuple' and 'int'

好的,这里有一些事情要谈。首先,我建议您对更简单的函数进行更多的实验,以便正确地适应它们。当您定义
determinate_grade(a,b,c,d,e)
时,您的函数将期望在函数中找到a,b,c,d,e参数,但如果您再次阅读,您会注意到您只提到
a
。这意味着当你调用
grade=determinate_grade(a,b,c,d,e)
时,你只计算了a的分数,这就是为什么你对每个人都有相同的分数(如果你用你的代码键入
grade
,你会注意到它将输出
'a'

另一种编写函数的方法是:

def determine_grade(score):
    num=score
    if(num<=100 and num>=90):
        grade='A'
    elif(num<=89 and num>=80):
        grade='B'
    elif(num<=79 and num>=70):
        grade='C'
    elif(num<=69 and num>=60):
        grade='D'
    else:
        grade='F'
    return grade
这将带来一个包含所有等级的列表

然后,如果您想要平均分数,最好计算平均分数,这样您就可以使用相同的函数来获得分数:

mean_score=np.array([a,b,c]).mean()
mean_grade(determine_grade(mean_score)

这样,您就可以用更少的代码行获得所需的所有信息(并且您可以使用列表理解使其更加高效,但这有点高级).

好的,这里有一些事情要谈。首先,我建议你对更简单的函数进行更多的实验,以正确地适应它们。当你定义
时,确定等级(a、b、c、d、e)
您的函数期望在函数中找到a、b、c、d、e参数,但如果您再次阅读,您会注意到您只提到了
a
。这意味着当您调用
grade=determinate_grade(a、b、c、d、e)
时,您只计算了a的等级,这就是为什么每个人都有相同的等级(如果用代码键入
grade
,您会注意到它将输出
'A'

另一种编写函数的方法是:

def determine_grade(score):
    num=score
    if(num<=100 and num>=90):
        grade='A'
    elif(num<=89 and num>=80):
        grade='B'
    elif(num<=79 and num>=70):
        grade='C'
    elif(num<=69 and num>=60):
        grade='D'
    else:
        grade='F'
    return grade
这将带来一个包含所有等级的列表

然后,如果您想要平均分数,最好计算平均分数,这样您就可以使用相同的函数来获得分数:

mean_score=np.array([a,b,c]).mean()
mean_grade(determine_grade(mean_score)

这样,您就可以用更少的代码行获得所需的所有信息(并且您可以使用列表理解使其更加高效,但这有点高级).

要回答您的问题,您的函数应该重写为接受一个输入,然后调用几次。此外,您的程序是一个典型的情况,应该进行干燥处理(不要重复)。而不是手动键入
a=input()
b=input()为什么不考虑把所有这些输入扔进一个列表中(也许在你的提示符上有一些字符串格式化,比如我的代码)。下面是一个程序,可以很容易地调整以接受任意数量的输入:

input_scores = [] # make our list
scores_input = 5 # tell the program we have 5 scores to record
for input_count in range(1, scores_input + 1):
    input_scores.append(float(input("Enter score {}:".format(input_count))))

def determine_grade(percent): # single input
    if 90 <= percent <= 100:
        grade = 'A'
    elif 80 <= percent <= 89:
        grade = 'B'
    elif 70 <= percent <= 79:
        grade = 'C'
    elif 60 <= percent <= 69:
        grade = 'D'
    else:
        grade = 'F'
    return grade # single output

def calc_average(local_score_list): # expects the list we made earlier (many inputs)
    mean = sum(local_score_list) // len(local_score_list)
    if 90 <= mean <= 100:
        average_grade = 'A'
    elif 80 <= mean <= 89:
        average_grade = 'B'
    elif 70 <= mean <= 79:
        average_grade = 'C'
    elif 60 <= mean <= 69:
        average_grade = 'D'
    else:
        average_grade = 'F'
    return mean, average_grade # have our function return both values, since it calculated them both anyways

compiled_scores = []
for test_score in input_scores:
    letter_grade = determine_grade(test_score) # calling our single input/output function many times in a for loop
    compiled_scores.append((test_score, letter_grade)) # creating a tuple so each letter and percent is stored together

mean_percent, mean_letter_grade = calc_average(input_scores) # decompile both values from our function
print("Score           Numeric Grade   Letter Grade")
print("--------------------------------------------")
# now we iterate through all the scores made and print them
for count, result_tuple in enumerate(compiled_scores, 1): # just print the scores in a loop
    print("Score {}:         ".format(count), result_tuple[0], "            ", result_tuple[1])

print("--------------------------------------------")
print("Average Score:   ", mean_percent, "            ", mean_letter_grade)

如果您需要对我发布的内容进行进一步澄清,请告诉我!

要回答您的问题,您的函数应该重写为接受单个输入,然后调用多次。此外,您的程序是一个典型的情况,应该进行干燥处理(不要重复)。而不是手动键入
a=input(),<代码> b=输入()/code >为什么不考虑把所有这些输入扔进一个列表(也许在你的提示符上有一些字符串格式化,比如我的代码)。下面是一个程序,可以很容易地调整以接受任意数量的输入:

input_scores = [] # make our list
scores_input = 5 # tell the program we have 5 scores to record
for input_count in range(1, scores_input + 1):
    input_scores.append(float(input("Enter score {}:".format(input_count))))

def determine_grade(percent): # single input
    if 90 <= percent <= 100:
        grade = 'A'
    elif 80 <= percent <= 89:
        grade = 'B'
    elif 70 <= percent <= 79:
        grade = 'C'
    elif 60 <= percent <= 69:
        grade = 'D'
    else:
        grade = 'F'
    return grade # single output

def calc_average(local_score_list): # expects the list we made earlier (many inputs)
    mean = sum(local_score_list) // len(local_score_list)
    if 90 <= mean <= 100:
        average_grade = 'A'
    elif 80 <= mean <= 89:
        average_grade = 'B'
    elif 70 <= mean <= 79:
        average_grade = 'C'
    elif 60 <= mean <= 69:
        average_grade = 'D'
    else:
        average_grade = 'F'
    return mean, average_grade # have our function return both values, since it calculated them both anyways

compiled_scores = []
for test_score in input_scores:
    letter_grade = determine_grade(test_score) # calling our single input/output function many times in a for loop
    compiled_scores.append((test_score, letter_grade)) # creating a tuple so each letter and percent is stored together

mean_percent, mean_letter_grade = calc_average(input_scores) # decompile both values from our function
print("Score           Numeric Grade   Letter Grade")
print("--------------------------------------------")
# now we iterate through all the scores made and print them
for count, result_tuple in enumerate(compiled_scores, 1): # just print the scores in a loop
    print("Score {}:         ".format(count), result_tuple[0], "            ", result_tuple[1])

print("--------------------------------------------")
print("Average Score:   ", mean_percent, "            ", mean_letter_grade)

如果您需要进一步澄清我发布的内容,请告诉我!

嘿,Josh,如果您只使用
a
变量,为什么
determinate\u grade
要使用五个参数?您可能应该调用该函数五次,而不是编写未使用的参数。y Josh,为什么
determinate\u grade
要使用五个参数您只使用其中的
变量吗?您可能应该调用该函数五次,而不是编写未使用的参数
Enter score 1:90
Enter score 2:88
Enter score 3:76
Enter score 4:68
Enter score 5:40
Score           Numeric Grade   Letter Grade
--------------------------------------------
Score 1:          90.0              A
Score 2:          88.0              B
Score 3:          76.0              C
Score 4:          68.0              D
Score 5:          40.0              F
--------------------------------------------
Average Score:    72.4              C