对多个输入使用函数[Python]
我是python新手,现在正在上第一堂课,大约4周后 任务是计算测试平均值并显示输入的每个测试的分数 作业的一部分是使用一个函数来计算平均值,并决定每个分数的字母等级 据我所知,函数应该有助于减少全局变量 我的问题是:如何压缩此代码 我不知道如何使用一个函数来决定字母等级,然后显示,而不为输入的每个等级创建一个全局变量 如果您注意到我的代码中有任何冗余,我希望您能给我一个提示,并给我上一堂关于如何减少冗余的课。我已经闻到了如果我照原样把它交上来我会得到的折扣对多个输入使用函数[Python],python,function,Python,Function,我是python新手,现在正在上第一堂课,大约4周后 任务是计算测试平均值并显示输入的每个测试的分数 作业的一部分是使用一个函数来计算平均值,并决定每个分数的字母等级 据我所知,函数应该有助于减少全局变量 我的问题是:如何压缩此代码 我不知道如何使用一个函数来决定字母等级,然后显示,而不为输入的每个等级创建一个全局变量 如果您注意到我的代码中有任何冗余,我希望您能给我一个提示,并给我上一堂关于如何减少冗余的课。我已经闻到了如果我照原样把它交上来我会得到的折扣 def main():
def main():
grade1=float(input( "Enter score (0-100):"))
while (grade1 <0 or grade1 >100 ):
if grade1 <0 or grade1 >100:
print("Please enter a valid grade")
grade1=float(input( "Enter score (0-100):"))
grade2=float(input( "Enter score (0-100):"))
while (grade2 <0 or grade2 >100 ):
if grade2 <0 or grade2 >100:
print("Please enter a valid grade")
grade2=float(input( "Enter score (0-100):"))
grade3=float(input( "Enter score (0-100):"))
while (grade3 <0 or grade3 >100 ):
if grade3 <0 or grade3 >100:
print("Please enter a valid grade")
grade3=float(input( "Enter score (0-100):"))
grade4=float(input( "Enter score (0-100):"))
while (grade4 <0 or grade4 >100 ):
if grade4 <0 or grade4 >100:
print("Please enter a valid grade")
grade4=float(input( "Enter score (0-100):"))
grade5=float(input( "Enter score (0-100):"))
while (grade5 <0 or grade5 >100 ):
if grade5 <0 or grade5 >100:
print("Please enter a valid grade")
grade5=float(input( "Enter score (0-100):"))
total=grade1+grade2+grade3+grade4+grade5
testAverage=calcAverage(total)
eachGrade1=determineGrade(grade1)
eachGrade2=determineGrade(grade2)
eachGrade3=determineGrade(grade3)
eachGrade4=determineGrade(grade4)
eachGrade5=determineGrade(grade5)
print("\nTest #1 grade:", (eachGrade1))
print("Test #2 grade:", (eachGrade2))
print("Test #3 grade:", (eachGrade3))
print("Test #4 grade:", (eachGrade4))
print("Test #5 grade:", (eachGrade5))
print("\nTest average:", (testAverage),("%"))
def calcAverage(total):
average=total/5
return average
def determineGrade(grade):
if grade >=90:
return "A"
elif grade >=80:
return "B"
elif grade >=70:
return "C"
elif grade >=60:
return "D"
else:
return "F"
def main():
等级1=浮动(输入(“输入分数(0-100):”)
而(一年级100分):
如果等级为1 100:
打印(“请输入有效等级”)
等级1=浮动(输入(“输入分数(0-100):”)
等级2=浮动(输入(“输入分数(0-100):”)
而(二级100):
如果等级为2 100:
打印(“请输入有效等级”)
等级2=浮动(输入(“输入分数(0-100):”)
等级3=浮动(输入(“输入分数(0-100):”)
而(三级100):
如果等级为3 100:
打印(“请输入有效等级”)
等级3=浮动(输入(“输入分数(0-100):”)
等级4=浮动(输入(“输入分数(0-100):”)
而(四级100):
如果等级为4 100:
打印(“请输入有效等级”)
等级4=浮动(输入(“输入分数(0-100):”)
等级5=浮动(输入(“输入分数(0-100):”)
而(五级100):
如果等级为5 100:
打印(“请输入有效等级”)
等级5=浮动(输入(“输入分数(0-100):”)
总计=1级+2级+3级+4级+5级
testAverage=平均值(总计)
每个等级1=确定等级(等级1)
每个等级2=确定等级(等级2)
每个等级3=确定等级(3级)
每个等级4=确定等级(等级4)
每个等级5=确定等级(等级5)
打印(“\n测试1级:,(每级1))
打印(“测试2级:,(每个等级2))
打印(“测试3级:,(每个等级3))
打印(“测试4级:,(每个等级4))
打印(“测试5级:,(每个级别5))
打印(“\n测试平均值:”,(测试平均值),(“%”)
def平均值(总计):
平均数=总数/5
平均回报率
def测定等级(等级):
如果等级>=90:
返回“A”
elif等级>=80:
返回“B”
elif等级>=70:
返回“C”
elif等级>=60:
返回“D”
其他:
返回“F”
我不会重构您的整个代码,但这里有几点提示:
首先,您需要一个函数来获取用户输入,我们称之为get_score
。我不会在这里详细介绍,因为这里有一个关于如何为它编写函数的优秀资源:。该函数应该返回一个浮点或整数,所以不要忘记input
(假设您使用的是python3)返回一个字符串,您必须手动将其转换为int或float
要获得n
分数列表,我建议使用以下函数:
def get_n_scores(n):
return [get_score() for _ in range(n)]
方括号中的内容是一个列表,相当于:
scores = []
for _ in range(n):
scores.append(get_score())
如果您对理解不满意,请使用此代码(不要忘记返回结果
)
变量名通常用于指示未使用的临时值(迭代除外)
您可以避免声明grade1
grade 5
调用all_scores=get_n_scores(5)
,将返回一个包含用户输入的列表。请记住,索引是以零为基础的,因此您可以访问所有分数[0]
<代码>所有分数[4]
不必硬编码total
,只需应用内置的sum
函数:total=sum(all_分数)
,假设all_分数
包含整数或浮点数
最后,您可以通过将函数determineGrade
应用于all_scores
中的每个分数来确定每个分数的分数。同样,您可以使用理解:
all_grades = [determineGrade(score) for score in all_scores]
或者传统的:
all_grades = []
for score in all_scores:
all_grades.append(determineGrade(score))
其他的东西看起来没问题,只是为了打印分数,你可以循环所有的分数,然后打印项目。若您想编写更多的函数来封装我们正在进行的几个单独的函数调用,这取决于您
一般来说,总是避免编写函数。我将编写如下内容:
def get_grade():
while(True):
grade = float(input("Enter score (0-100):"))
if grade >= 0 and grade <= 100:
return grade
print("Please enter a valid grade!")
def get_average(sum_val, counter):
return sum_val/counter
def determine_grade(grade):
if grade >=90:
return "A"
elif grade >=80:
return "B"
elif grade >=70:
return "C"
elif grade >=60:
return "D"
else:
return "F"
test_num = 5
sum_val = 0
result = {}
for i in range(test_num):
grade = get_grade()
result[i] = determine_grade(grade)
sum_val += grade
for key in result:
print ("Test %d Grade is %s" % (key+1, result[key]))
avg = get_average(sum_val, test_num)
print ("Average is %d" % avg)
编码规则#1,切勿复制和粘贴。无论何时你复制和粘贴,这都是一个功能。恐怕我不明白,你指的是什么?你可能需要仔细阅读与本作业相关的课程材料。它可能讨论函数、返回值和列表等主题。您有5个相同的代码块,唯一的区别是变量gradeX。您是否复制并粘贴了该代码,然后更改了变量名?我猜是你干的。与其这样做,不如做一个函数。当然这是你的问题,但这里没有人对你的家庭作业感兴趣。@kurt这肯定不是本文的目的。我第一次上编码课才几周,有些概念对我来说很难理解,我觉得我无法从书中构思出来,只是想寻求帮助。谢谢你花时间把这些都写出来。在使用您的建议并尝试更恰当地使用函数的同时,重新执行整个操作。不要忘记列表中所有数字的平均值是
average=sum(my_list)/len(my_list)
,您也不必硬编码长度。@ByteCommander的确,CalAverage
应该包含两个参数(如果你想要一个功能的话)。我错过了。谢谢你的参与
>>> ================================ RESTART ================================
>>>
Enter score (0-100):89
Enter score (0-100):34
Enter score (0-100):348
Please enter a valid grade!
Enter score (0-100):34
Enter score (0-100):90
Enter score (0-100):85
Test 1 Grade is B
Test 2 Grade is F
Test 3 Grade is F
Test 4 Grade is A
Test 5 Grade is B
Average is 66
>>>