指示是: 编写一个名为calc_average的函数,它接受一个表示以下格式的文件名的字符串,例如:
Smith 82
Jones 75
Washington 91
该函数应计算并返回文件中数据的类平均值。
到目前为止,我有:
def calc_average():
infile = open("filename.txt", "r")
readlines = infile.readlines()
for line in readlines:
parts = line.split()
name = parts[0]
clsavg = parts[1]
average = 0
我试图通过这部分,但我找不到正确的方法来做平均值。有什么建议?我只需要这个功能,文件只是一个例子。
答案 0 :(得分:2)
def calc_average():
infile = open("filename.txt", "r")
readlines = infile.readlines()
for line in readlines:
parts = line.split()
name = parts[0]
clsavg = parts[1]
average = 0
毕竟,你只是在函数中输入一些东西,但不要求任何东西出来。
使用return
将有助于从功能中获取一些东西。
return [variable]
是一种使用它的方式。
下面:
添加此行
return [variable]
到代码的末尾,如下所示:
def calc_average():
infile = open("filename.txt", "r")
readlines = infile.readlines()
for line in readlines:
parts = line.split()
name = parts[0]
clsavg = parts[1]
average = 0
return variable #where you replace variable with
#the thing you want to get out of your function
要调用此函数(或者我应该说“运行”它)只需写出它的名称,但是缩进。
def calc_average():
infile = open("filename.txt", "r")
readlines = infile.readlines()
for line in readlines:
parts = line.split()
name = parts[0]
clsavg = parts[1]
average = 0
return variable
calc_average() #<- this calls the function
您可能还想阅读参数:
parametere是传递给函数并被使用的值。
示例:
def test1(number):
number = number + 1 #this can be written as number += 1 as well
return number
x = test1(5)
首先,我使用number
参数定义函数。这意味着number
将用于此功能。请注意def test1(number)
下方的行也如何使用变量number
。传递给函数的任何内容number
都将被视为函数中的number
。
然后,我调用该函数并使用5
作为参数。
当它被调用时,该函数接受5
(因为那是输入参数)并将变量number
存储为5.(来自def test1(number)
)因此,它就像写{{ 1}}在函数本身。
然后,number = 5
将获取该数字(在这种情况下被添加为6,return number
)并将其返回到外部代码。因此,就像说number = 6
。
现在回到最底层的几行。 return 6
将使x = 6,因为函数返回6。
希望我能帮助你更多地理解功能。
答案 1 :(得分:0)
该函数需要一个参数。它还需要返回平均值,因此最后应该有一个return
语句。
def calc_average(file_name):
...
return <something>
答案 2 :(得分:0)
你没有计算平均值。也没有从函数calc_average
返回任何内容。所以试试这个
def calc_average():
with open('filename.txt') as text:
nums = [int(i.split()[1]) for i in text]
avg = float(sum(nums)) / float(len(nums))
return avg
>>>print(calc_average())
82.6666666667
答案 3 :(得分:0)
要继续使用您自己的代码和示例,您可以这样做:
def calc_average(filename):
infile = open(filename, "r")
readlines = infile.readlines()
average = 0 # use this to sum all grades
index = 0 # keep track of how many records or lines in our txt
for line in readlines:
parts = line.split()
name = parts[0] # basically useless
# for each line in txt we sum all grades
average = average + float(parts[1]) # need to convert this string to a float
index = index + 1
# divide by the number of entries in your txt file to get the class average
return average / index
然后:
calc_average('grades.txt')
打印:
82.66666666666667
答案 4 :(得分:0)
def calc_average():
infile = open("filename.txt", "r")
readlines = infile.readlines()
clsavg = 0
counter = 0
for line in readlines:
parts = line.split()
clsavg = clsavg+ float(parts[1])
counter = counter + 1
print clsavg/counter
答案 5 :(得分:0)
好的,让我们来看看这部分:
编写一个名为calc_average的函数
def calc_average():
采用表示文件名的字符串
让它成为一个有意义的变量名称:
def calc_average(filename):
现在我们已经掌握了基础知识,让我们谈谈如何真正解决问题:
文件中的每一行都包含名称和成绩。您希望跟踪成绩,以便计算平均成绩。所以,你需要能够:
因此,似乎将相关部分保存在列表中会有所帮助。然后我们需要一个计算数字列表平均值的函数。所以让我们写下
def average(L):
sum = 0
for num in L:
sum += num
return sum/len(L)
当然,有一种更简单的方式来写这个:
def average(L):
return sum(L)/len(L) # python has a built-in sum function to compute the sum of a list
现在我们有了计算平均值的函数,让我们读取文件并创建一个我们想要计算其平均值的数字列表:
def read_from_file(filename):
answer = [] # a list of all the numbers in the file
with open(filename) as infile: # open the file to read
for line in infile:
parts = line.split()
grade = int(parts[-1]) # the integer value of the last entity in that line
answer.append(grade)
return answer
既然我们有一个从文件中返回相关信息的函数,以及一个计算平均值的函数,我们只需要将两者结合使用:
def calc_average(filename):
numbers = read_from_file(filename)
answer = average(numbers)
return answer
现在,您可能会注意到您不需要跟踪每个数字,因为您只是将它们相加并除以数字的数量。因此,这可以更简洁地完成如下:
def calc_average(filename):
nums = 0
total = 0
with open(filename) as infile:
for line in infile:
total += int(line.split()[-1])
nums += 1
return total/nums
答案 6 :(得分:0)
你做错的第一件事就是不在你的帖子中标记源代码,作为源代码。将它放在与帖子其余部分分开的行中,并使用编辑器顶部的{}
链接将其标记为源代码。那应该是这样的:
def calc_average():
infile = open("filename.txt", "r")
readlines = infile.readlines()
for line in readlines:
parts = line.split()
name = parts[0]
clsavg = parts[1]
average = 0
你应该对文件内容做同样的事情:我假设你每行有一个名字和一个数字。
如果您想将一小段代码与文字内联,例如&#34; foo()
函数&#34;,在代码的每一侧都添加一个反引号。反引号就像一个重音坟墓,有时被错误地用作文本文件中的开头引号。
接下来,您要编写一个包含文件名的字符串的函数。但你有
def calc_average():
infile = open("filename.txt", "r")
这不会带走任何东西。 <怎么样
def calc_average(filename):
infile = open(filename, "r")
现在,你的函数正在做的是,读取行确定,将它们分成名称和数字 - 但两者仍然是字符串,包含数字的字符串放在变量clsavg
中,然后在每次读取一行时将变量average
设置为0。
但是你想做什么?我想当你说&#34;班级平均&#34;,这些都是班上的人,数字是他们的分数,你想计算数字的平均值?这意味着将所有数字相加,然后除以文件中的行数。
因此,您需要在循环开始之前将变量设置为0 ONCE,然后在每次读取一行时,将其增加数字值。我想可以使用clsavg变量。所以你需要将parts[1]
转换为整数。您可以使用int()
。然后,您需要使用+=
或x = x + y
之类的语句来增加它。如果您想了解更多详情,请询问谷歌。这样你就可以建立所有数字的总价值。最后,在循环结束后(意味着只在缩进到for
的行上),您需要将总数除以行数。那将是readlines
中元素的数量。你应该谷歌len()
功能。 Division使用/
运算符。您可以使用x /= y
将x设置为x / y的值。
这做了很多假设:你想要一个整数平均值,文件中的每一行都有名字和数字(没有空白行或注释等)顺便说一句,你可以使用{{1如果你想要更高的精度,而不是float()
。