Python 为什么无论课程定义如何(包括平均值),每个年级的输入都是相同的?
程序如下:编写一个程序,要求用户输入5个测试分数。程序应显示每个分数和平均测试分数的字母等级 我有问题,我的输出显示我的字母等级的第一个输入等级为每个等级,包括平均值。我的数字平均值也被输出为字母等级,但它给出了正确的平均值字母,而不是等级的正确数字结果。我在一个低级别的编码类,因此程序必须以这种格式编写 代码如下:Python 为什么无论课程定义如何(包括平均值),每个年级的输入都是相同的?,python,Python,程序如下:编写一个程序,要求用户输入5个测试分数。程序应显示每个分数和平均测试分数的字母等级 我有问题,我的输出显示我的字母等级的第一个输入等级为每个等级,包括平均值。我的数字平均值也被输出为字母等级,但它给出了正确的平均值字母,而不是等级的正确数字结果。我在一个低级别的编码类,因此程序必须以这种格式编写 代码如下: a=float(input("Enter score 1:")) b=float(input("Enter score 2:")) c=float(input("Enter sco
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
要使用五个参数?您可能应该调用该函数五次,而不是编写未使用的参数。y Josh,为什么determinate\u grade
要使用五个参数您只使用其中的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