我写了几乎所有的程序,除了我被困在这一部分。我需要写一个平均值来计算所有学生的最终成绩作为课程的统计数据。学生姓名和最终成绩已被附加到外部文件中(请记住,可以添加更多学生和成绩)。
这是我到目前为止所做的一切,我们非常感谢任何意见。
fname = input("What is the file name?")
file1 = open(fname,'r')
sum = 0.0
count = 0
for line in file1:
sum = sum + eval(line)
count = count + 1
print("\nThe average of the numbers is", sum/count)
第6行(sum = sum + eval(line)
)中的我一直在
syntax error: unexpected EOF while parsing (<string>, line 1)
我不太了解Python知道这意味着什么。有人可以在代码中显示我吗?作为参考,外部文件的格式如下:
tom jones,100,
bill smith,89,
等等。
答案 0 :(得分:0)
您收到的错误是:
Traceback (most recent call last):
File "stud.py", line 6, in <module>
sum = sum + eval(line)
File "<string>", line 1
tom jones,100,
^
SyntaxError: invalid syntax
这是因为您尝试将“tom jones,100,
”评估为Python表达式。这不是有效的Python表达式。更不用说在任意字符串上调用eval()
是一个非常糟糕的主意。
您需要split
该行,使用','
作为分隔符。然后你需要取第二个字段(100),并将其转换为int
。您可以将此int
添加到sum
(或total
)并继续。
N.B:sum()
是Python中的内置函数,您将使用相同名称的变量隐藏它。我建议您使用其他作品,例如total
。
答案 1 :(得分:0)
首先,您应该尝试进入Python interactive mode。它使得使用少量代码更容易,因为你可以立即看到会发生什么。
您可以使用str.split将字符串拆分为值,而不是使用eval。启动交互式解释器,并逐行运行以下代码:
a = '1,2,3'
b = a.split(',')
print b
print b[0]
print b[0] + b[1]
print float(b[0]) + float(b[1])
b[0] + b[1]
打印为'12'的原因是因为它们仍然是字符串。你需要告诉python在它们像你期望的那样工作之前将它们作为数字处理(使用float())。
要获得额外的功劳,您可以尝试使用Python csv library来阅读和解析您的文件:
# Tell Python that you are going to use the csv (comma separated value) library
import csv
# Open the file
file = open('marks.csv')
# Use the csv library to read the file, instead of using "for line in file1"
markReader = csv.reader(file)
# Using this for means that each line is read as a list of strings.
for row in markReader:
# Now we get the string we want from the list. 0 would get the name, 1 gets the mark
number_as_string = row[1]
# We now make the string an actual number, because if we add '10' + '20', we get '1020' instead of 30.
number = float(number_as_string)