【问题标题】:Need help reading data from input files and displaying it需要帮助从输入文件中读取数据并显示它
【发布时间】:2014-11-10 10:24:17
【问题描述】:

我在大学的介绍 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

【问题讨论】:

  • 也许你的意思是list = [item for item in contents.split(" ")
  • list = [contents]contents(行列表)放入列表中。然后,您将打印出该列表的第一个也是唯一的元素,它是文件中所有行的列表。如果您将其更改为 list = contents,您将只打印第一行。
  • 我已经尝试过了,当我需要能够从中挑选出个别的东西时,我仍然可以得到整个示例输入,例如只打印 Steve 或只打印数字
  • 如何让样本的每个部分在同一个列表中输入不同的元素?

标签: python arrays string list input


【解决方案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]

【讨论】:

  • JES 似乎无法识别“with”,其他建议仍然不允许我从包含以下内容的输入文件中打印单个元素:Steve Smith 100 70 80 55 90 15 20 18 17 12 78 84
  • 对不起,我错过了 JES 部分,我从未使用过它,但以上所有内容都是有效的 python 语法,file.read().split() 在你自己的代码中工作吗?它应该像上面那样拆分
  • 没关系,没有 file.read().split() 不起作用我仍在获得完整的示例输入,为了清楚起见,这里是任务的完整描述
  • 1.设计并编写一个程序,从输入文件中读取学生的分数,计算他们的字母成绩并显示他们的姓名和字母成绩。输入文件中的每一行文本都将包含有关单个学生的所有信息 - 名字和姓氏,后跟 5 个作业分数、5 个测验分数和 2 个考试分数。所有信息字段均以空格分隔。作业满分 100,测验满分 20,考试满分 100。以下是一些示例输入:Steve Smith 100 70 80 55 90 15 20 18 17 12 78 84
  • 然后我们需要做一些基本的计算并打印出成绩,我的问题是我不知道如何更改列表中的每个元素,所以我不知道如何显示学生姓名或计算那里的成绩,因为我无法访问各个元素,但除此之外我非常有信心
【解决方案2】:

看到这对你有帮助:

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

我不确定你要如何计算平均/成绩,但我相信你可以整理出来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多