【问题标题】:Python file processing?Python文件处理?
【发布时间】:2015-06-16 02:59:45
【问题描述】:

我的任务是编写一个程序,从文件中提取名字/姓氏、出生年份和 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()

Traceback(最近一次调用最后一次):

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

main()

文件“C:/Users/ovi/Desktop/Python Project 1.py”,第 22 行,在 main

平均 =(grade_1 + Grade_2+grade_3)/3

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

【问题讨论】:

  • 那么,您将grades_x 转换为字符串,然后尝试将它们相加并除以3?也许将字符串转换的成绩存储在不同的命名变量中。将+ 与字符串一起使用会将它们连接在一起,而不是相加。

标签: python python-3.x


【解决方案1】:

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

average =(float(grade_1) + float(grade_2)+ float(grade_3))/3.0
average = str(average)

【讨论】:

  • 哦,好的,谢谢!我想我也可以在计算平均值后移动线条并将成绩作为字符串
【解决方案2】:

您需要将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

【讨论】:

  • 我坚持我是在这里做的:[grade_1,grade_2,grade_3] = [str(grade_1), str(grade_2), str(grade_3)]
  • 我对平均值做了类似的事情。这是错的吗?
  • 仅在打印时将成绩转换为字符串。你的转换方法是错误的。应该是,l = [str(grade_1), str(grade_2), str(grade_3)] ; outfile.write("Grade 1: {} .....".format(*l))
  • 感谢您的帮助!您认为您可以详细说明为什么我的转换方法是错误的吗?我试图更好地理解这一点,而不仅仅是记住它
  • 您无法找到字符串的平均值。使用 int 数据类型进行所有计算。
猜你喜欢
  • 1970-01-01
  • 2017-06-18
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多