您好,我有一个学校练习,我无法解决,我几乎在那里,但有些东西让我失望,所以我有2个.txt文件一个有学生姓名,另一个有学生成绩他们就像:
nomesAlunos.txt :
Ricardo
Filipa
Teresa
Claúdio
nomesNotas.txt :
14 15 14 17
14 14
13 10
13 10 11
我应该创建一个新文件,其中我有学生姓名,然后是学生平均成绩,我的代码如下:
final=open('data/notasFinal.txt','w')
nomes=open('data/nomesAlunos.txt')
notas=open('data/nomesNotas.txt')
for linha in nomes:
final.write(linha)
for line in notas:
lista=line.split()
media=(sum((int(numeros) for numeros in lista)))/(len(lista))
final.write(str(media))
nomes.close()
notas.close()
我的最终.txt文件现在就像这样:
Ricardo
15.014.011.511.333333333333334Filipa
Teresa
Claúdio
解决:
final=open('data/notasFinal.txt','w')
nomes=open('data/nomesAlunos.txt')
notas=open('data/nomesNotas.txt')
media=[]
i=0
for linhas in notas:
lista=linhas.split()
media.append((sum((int(numeros) for numeros in lista)))/(len(lista)))
for nome in nomes:
alunos=nome.split()
final.write(f"{alunos[0]:30}{media[i]}\n")
i+=1
nomes.close()
notas.close()
final.close()
答案 0 :(得分:1)
至于没有给出完整的答案(毕竟这是一个学校作业!),而不是在'nomes'循环中循环你的'notas'文件,你可能要考虑使用Python的notas.readline
在循环的每次迭代中起作用。
现在,每当你尝试循环“nomes”时,你就会在每一行'notas'中循环。但是,在第一个循环中,您已经浏览了整个“nomes”文件,并且没有任何内容可供阅读。
答案 1 :(得分:0)
您的迭代设置不会解决您的问题。
第一个循环遍历名称。它会写出第一个名字,然后跳转到第二个循环。在那里它将寻找所有 所有学生的成绩。完成后,它将继续第一个循环,打印出下一个名称。现在它又回到了成绩的循环中,但是这个文件已经被读到最后了,所以它不再打印了。
解决方案:您只需要一个循环。该循环将遍历BOTH文件中的每个行数。
尽管你可以用next(nomes)
和next(noats)
分别阅读每一行,然后将THAT放入你的循环中,直到没有其他内容可读。
答案 2 :(得分:0)
这会让你开始,如果你在任何时候都不理解,请知道: -
with open('out.txt','w') as outfile, open('names.txt','r') as in1, open('grades.txt','r') as in2:
inp1 = in1.read().split("\n");
inp2 = in2.read().split("\n");
out = list(map(list, (zip(inp1,inp2))));
print(out)
out_text = ("\n").join([" ".join(i) for i in out])
outfile.write(out_text)