Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 下面的简单文件操作程序是否有较短的代码?_Python_Python 3.x - Fatal编程技术网

Python 下面的简单文件操作程序是否有较短的代码?

Python 下面的简单文件操作程序是否有较短的代码?,python,python-3.x,Python,Python 3.x,以下是问题所在,我已经编写了代码。有人可以缩短答案代码吗 假设文件studentdata.txt包含关于学生在各种课程中获得的成绩的信息 作业。每行都有一个学生的姓氏(你可以假设是一个单词)和 学生获得的数字分数。所有分数都在100分以内。学生可以出现 在文件中多次出现。 下面是一个示例文件: 编写一个函数,将文件中的数据读入字典。然后继续提示 用户输入学生姓名。对于每个学生,它应该打印该学生的平均成绩。 当用户输入不在词典中的学生姓名时,停止提示。 给定文件的示例运行: Enter name:

以下是问题所在,我已经编写了代码。有人可以缩短答案代码吗

假设文件studentdata.txt包含关于学生在各种课程中获得的成绩的信息 作业。每行都有一个学生的姓氏(你可以假设是一个单词)和 学生获得的数字分数。所有分数都在100分以内。学生可以出现 在文件中多次出现。 下面是一个示例文件:

编写一个函数,将文件中的数据读入字典。然后继续提示 用户输入学生姓名。对于每个学生,它应该打印该学生的平均成绩。 当用户输入不在词典中的学生姓名时,停止提示。 给定文件的示例运行:

Enter name: Arnold
The average for Arnold is: 85.0 
Enter name: Brown
The average for Brown is: 84.0
Enter name: Cocher
The average for Cocher is: 88.5
Enter name: Doherty
Goodbye!
这是我的密码:

import os
PATH="C:/Users/user/Desktop/studentdata.txt"
fd=open("C:/Users/user/Desktop/studentdata.txt","r")

d=fd.read()
p1=r"\b[A-za-z]+\b"
p2=r"\b[0-9]+\b"
l1=re.findall(p1,d) 
fd=open("C:/Users/user/Desktop/studentdata.txt","r")
l2=re.findall(p2,d)
d={}
for key,val in list(zip(l1,l2)):
    if key not in d:
        d[str(key)]=int(val)
    else:
        d[str(key)]+=int(val)
for key in d:
    d[key]=d[key]/l1.count(key)


while True:
    key=input("Enter name:")
    if key not in d:
        print("Goodbye!")
        break
    print("the average for "+key+" is: "+str(d[key]))

这可能很有用。

这是一个针对的问题。要回答您的问题,可以将其缩短。阅读
语句和
集合。defaultdict
。。。。不管一行程序有多酷,你真的不希望一个完整的程序成为一个。如果简单的
拆分
就足够了,我不会使用正则表达式。这部分内容很有用,但不起作用:它不处理重复的名称,也不取平均值。顺便说一句,欢迎使用堆栈溢出!退房。@wjandrea我还没有读完整的问题,很抱歉这个误会。我修正了密码。也谢谢你的欢迎。这很接近,但还没有确定。问题有预期的输出,你的应该与之匹配。那么你真的试过运行它吗?阿诺德的平均值应该是85,但你的密码是45。啊,我知道你在做什么。你可以简化这一过程,方法是与学生[学生]
一起做
笔记,列出分数列表,然后稍后获取其
len
,或者更好地使用
统计。mean
import os
PATH="C:/Users/user/Desktop/studentdata.txt"
fd=open("C:/Users/user/Desktop/studentdata.txt","r")

d=fd.read()
p1=r"\b[A-za-z]+\b"
p2=r"\b[0-9]+\b"
l1=re.findall(p1,d) 
fd=open("C:/Users/user/Desktop/studentdata.txt","r")
l2=re.findall(p2,d)
d={}
for key,val in list(zip(l1,l2)):
    if key not in d:
        d[str(key)]=int(val)
    else:
        d[str(key)]+=int(val)
for key in d:
    d[key]=d[key]/l1.count(key)


while True:
    key=input("Enter name:")
    if key not in d:
        print("Goodbye!")
        break
    print("the average for "+key+" is: "+str(d[key]))
PATH = "C:/Users/user/Desktop/"
FILE = "studentdata.txt"
with open(PATH + FILE, 'r') as fp:
  lines = fp.readlines()
notes_with_students = {}

for line in lines:
  student = line.split()[0]
  note = line.split()[1]
  if student not in notes_with_students:
    notes_with_students.setdefault(student, [int(note), 1])
  else:
    notes_with_students[student][0] += int(note)
    notes_with_students[student][1] += 1

while True:
  student = input("Enter name: ")
  if student not in notes_with_students:
    print("Goodbye!")
    break
  print("The average for {} is: {}".format(student, notes_with_students[student][0]/notes_with_students[student][1]))