我在大学的一个入门comp sci课程(我对整个编程很新)和一个项目,我们被告知在下面做 1.设计并编写一个程序,从输入文件中读取学生的分数,计算他们的字母等级 并显示他们的姓名和字母等级。输入文件中的每行文本都将包含所有信息 关于一个学生 - 名字和姓氏,然后是5个作业分数,5个测验分数和2个考试 分数。所有信息字段均以空格分隔。作业得分为100分 20个测验和100个考试。以下是一些示例输入: 史蒂夫史密斯100 70 80 55 90 15 20 18 17 12 78 84
我的问题是它将所有输入视为同一个事情所以我无法将上述示例的特定部分拉出来并计算学生成绩,这是我的代码到目前为止
def file():
myfile = pickAFile()
print myfile
file = open(myfile,"rt")
contents = file.readlines()
list = [contents]
print list[0]
但它不断打印出整个样本输入,而不仅仅是第一个单词,我不知道为什么请尽可能帮助我使用JES
答案 0 :(得分:1)
readlines
已经是list
,因此您要将列表放在包含list =[contents]
的列表中,请使用:
list = contents
print list[0]
或者简单地说:
print file.readlines()[0]
最好避免使用list
作为变量名称,因为它会影响内置list
。
def file():
myfile = pickAFile()
with open(myfile) as f: # with closes your files automatically
contents = f.readlines() # creates a list
print contents[0] # print first element
如果您想将每一行拆分为列,并将这些行拆分为单个单词,请将contents = f.readlines()
替换为:
contents = [x.split() for x in f] # if words are separated by whitespace
In [17]: s= "Steve Smith 100 70 80 55 90 15 20 18 17 12 78 84"
In [18]: s.split()
Out[18]:
['Steve',
'Smith',
'100',
'70',
'80',
'55',
'90',
'15',
'20',
'18',
'17',
'12',
'78',
'84']
或使用f.read().split()
制作单个列表
如评论所述,输入始终采用相同的格式,以便将数字设为整数:
s = "Steve Smith 100 70 80 55 90 15 20 18 17 12 78 84"
spl = s.split()
spl[2:] = map(int,spl[2:])
print(spl)
['Steve', 'Smith', 100, 70, 80, 55, 90, 15, 20, 18, 17, 12, 78, 84]
答案 1 :(得分:1)
看到这会对你有所帮助:
with open("student_data.txt") as f:
lines = [x.split() for x in f]
for line in lines:
print line
print "Full Name: ", " ".join(line[:2])
print "Assignment Scores: ", ", ".join(line[2:7])
print "Quiz Scores: ", ", ".join(line[7:9])
print "Exam Scores: ", ", ".join(line[9:])
print (sum([int(x) for x in line[2:7]])/5 + sum([int(x) for x in line[7:9]])/2 + sum([int(x) for x in line[9:]])/5)/3
我不确定你想要计算的平均值/等级,但我相信你可以解决它。