尝试让它运行超过3行文本但我现在甚至没有正常工作。
文本文件是
74,85,65,56
97,67,83,96
以下是我一直致力于
的代码file = open('grades.txt','r')
for x in file:
read = file.readline()
sep = read.split(",")
def toNumbers():
changeNum = [eval(x) for x in sep]
return changeNum
def sumlist():
total = 0
sum(pls)
average = sum(pls)/len(sep)
print ("Your average is: ", average)
def main():
sumlist()
pls = toNumbers()
main()
输出应为
Your average is: 70.0
Your average is: 85.75
我得到的只是这个
Your average is: 85.75
当我在文本文件中添加第三行时,我收到此错误
SyntaxError: unexpected EOF while parsing
第三行也只是文本文件中的一行数字,可以从那里继续
74,85,65,56
97,67,83,96
10,20,30,40
输出应为
Your average is: 70.0
Your average is: 85.75
Your average is: 25.0
答案 0 :(得分:3)
这很简单。
for x in file:
已遍历文件的行,但您忽略了x
的值,这是第一行的内容。您只需使用以下内容获取第二行的内容:
read = file.readline()
添加另一行会导致错误,因为你告诉Python要做的是for each line in the file, read next line
,所以for
循环将每个奇数行都放入x
,然后每个偶数行存储在{{} 1}}。因此,只处理具有偶数行的文件而没有错误
你想拥有这个:
read
编辑:完成示例:
for read in file:
sep = read.split(",")
答案 1 :(得分:2)
我会删除您的main
函数,因为您的示例中并不需要它,并在for循环中调用toNumbers
和sumlist
。请注意,您需要将变量作为函数的参数传递:
def toNumbers(sep):
changeNum = [int(x) for x in sep]
return changeNum
def sumlist(pls,sep):
average = sum(pls)/len(sep)
print ("Your average is: ", average)
file = open('grades.txt','r')
lines = file.readlines()
for line in lines:
sep = line.split(",")
pls = toNumbers(sep)
sumlist(pls,sep)
这给出了:
Your average is: 70.0
Your average is: 85.75
答案 2 :(得分:1)
上面的代码甚至没有在python 3中为我运行。但是将readline更改为readlines如下所示是完美的。
lines = file.readlines()
for line in lines:
sep = line.split(",")
答案 3 :(得分:1)
问题是因为您在file
循环上使用for
并且在每一步使用file.readline()
。这就是为什么当你有3行显示错误时。尝试添加另一行,4行,它将显示最后一行。
打印read
和sep
会对您有所帮助。
您会注意到使用您的代码,因为sep
分配,您只能获得最新的代码。
以下代码可以实现您的目标:
file = open('sample.txt','r')
raw_lines = file.readlines()
lines = [raw_line.strip() for raw_line in raw_lines]
def show_avg_per_line(line):
line_list = list(map(int, line.split(",")))
average = sum(line_list) / len(line_list)
print("Your average is: ", average)
for line in lines:
show_avg_per_line(line)