Python文件处理?

Python文件处理?,python,python-3.x,Python,Python 3.x,我的任务是编写一个程序,从文件中提取名字/姓氏、出生年份和ID,处理这些信息以创建用户名和格式化ID,提示用户输入3个测试分数,计算平均值,最后将所有信息写入一个新文件。这是我写的程序,我得到的错误列在程序下面。 定义主要功能 def main(): infile = open("studentinfo.txt", "r") data = infile.read() fName, lName, ID, year = data.split(",") year = int(year) 提示用户输入

我的任务是编写一个程序,从文件中提取名字/姓氏、出生年份和ID,处理这些信息以创建用户名和格式化ID,提示用户输入3个测试分数,计算平均值,最后将所有信息写入一个新文件。这是我写的程序,我得到的错误列在程序下面。 定义主要功能

def main():
infile = open("studentinfo.txt", "r")
data = infile.read()
fName, lName, ID, year = data.split(",")
year = int(year)
提示用户输入三个测试分数

grades = eval(input("Enter the three test scores separated by a comma: "))
创建一个用户名

uName = (lName[:4] + fName[:2] + str(year)).lower()
converted_id = ID[:3] + "-" + ID[3:5] + "-" + ID[5:]
grade_1, grade_2, grade_3 = grades
将等级转换为字符串,以便将其写入新文件

[grade_1, grade_2, grade_3] = [str(grade_1), str(grade_2), str(grade_3)]
计算平均数

average =(grade_1 + grade_2+ grade_3)/3
将平均值转换为字符串

average = str(average)
将信息写入文件

outfile = open("studentreport.txt", "w")
outfile.write("*******Student Report*******\nStudent Name:" + fName + " " + lName)
outfile.write("\nStudent ID:  " + converted_id + "\n" + "Username:    " + uName + "\n\n")
outfile.write("Grade 1:    " + grade_1 + "\n" "Grade 2:    " + grade_2 + "\n" + "Grade 3:    " + grade_3 + "\n" + "Average:    " + average)   

infile.close()
outfile.close()

main()
回溯(最近一次呼叫最后一次):

文件“C:/Users/ovi/Desktop/pythonproject 1.py”,第34行,在

main()

文件“C:/Users/ovi/Desktop/pythonproject 1.py”,第22行,主视图

平均值=(1级+2级+3级)/3

TypeError:/:“str”和“int”的操作数类型不受支持


您需要将
int
类型的变量转换为字符串

outfile.write("Grade 1:    " + str(grade_1) + "\n" "Grade 2:    " + str(grade_2) + "\n" + "Grade 3:    " + str(grade_3) + "\n" + "Average:    " + str(average))

你可以这样做

>>> gr1 = 23
>>> gr2 = 45
>>> gr3 = 56
>>> total = gr1+gr2+gr3
>>> avg = total/3
>>> l = [gr1, gr2, gr3, total, avg]
>>> print("GRade 1: {} grade 2: {} grade 3: {} total: {} average : {}".format(*l))
GRade 1: 23 grade 2: 45 grade 3: 56

您需要将转换后的字符串等级转换为浮点(或整数)


那么,你把你的
成绩x
转换成字符串,然后把它们加在一起,除以3?可能将字符串转换的等级存储在不同的命名变量中。使用带字符串的
+
将它们连接在一起,而不是添加。我认为我在这里这样做了:[grade_1,grade_2,grade_3]=[str(grade_1),str(grade_2),str(grade_3)],我对平均值做了类似的事情。这不对吗?只需在打印时将分数转换为字符串即可。你的转换方法是错误的。它将是,
l=[str(等级1)、str(等级2)、str(等级3)];outfile.write(“1年级:{}…..”格式(*l))
谢谢您的帮助!你能解释一下为什么我的转换方法是错误的吗?我试图更好地理解这一点,而不仅仅是记住它。你无法找到字符串的平均值。。使用int数据类型进行所有计算。哦,好的,谢谢!我想我也可以在计算平均值后,把线移动一下,把分数变成字符串
average =(float(grade_1) + float(grade_2)+ float(grade_3))/3.0
average = str(average)