Python 将格式写入文件
我正在做一个Python入门课程的项目,在那里我必须创建一个成绩册。在这个成绩册中,我需要显示每个成绩字母值的学生人数,并将其写入一个文件。一切正常,它不会断裂或发生任何事情,但在显示时,它看起来如下所示:Python 将格式写入文件,python,output,Python,Output,我正在做一个Python入门课程的项目,在那里我必须创建一个成绩册。在这个成绩册中,我需要显示每个成绩字母值的学生人数,并将其写入一个文件。一切正常,它不会断裂或发生任何事情,但在显示时,它看起来如下所示: (1, " students got A's") (2, " students got B's") (3, " students got C's") (4, " students got D's") (5, ' students failed') 1 students got A's 2
(1, " students got A's")
(2, " students got B's")
(3, " students got C's")
(4, " students got D's")
(5, ' students failed')
1 students got A's
2 students got B's
...and so on
WriteTo.write(str(PrintA))
当我希望它看起来像这样时:
(1, " students got A's")
(2, " students got B's")
(3, " students got C's")
(4, " students got D's")
(5, ' students failed')
1 students got A's
2 students got B's
...and so on
WriteTo.write(str(PrintA))
我该如何解决这个问题?我也许可以照原样上交,但我希望输出不至于太差。完整代码供参考:
#1 Open file
WriteTo=open("ClassNameGrades.txt", "w")
#2 Initialize variables
MoreStudents="Yes"
A=0
B=0
C=0
D=0
F=0
#3 Inputs and writing
ClassName=input("What is the class called? ") + '\n'
TeacherName=input("What is the teacher's name? ") + '\n'
WriteTo.write(ClassName)
WriteTo.write(TeacherName)
#4 Loop student inputs
while MoreStudents=='Yes':
Name=input("What is the student's name? ")
Grade=input("What is the student's grade number? ")
WriteName=str(Name)
SpaceName = ": "
IntGrade=int(Grade)
WriteGrade=Grade + '\n'
WriteTo.write(WriteName)
WriteTo.write(SpaceName)
WriteTo.write(WriteGrade)
#5 Assigning letter to grade
if IntGrade>=90:
A=A+1
elif IntGrade>=80:
B=B+1
elif IntGrade>=70:
C=C+1
elif IntGrade>=60:
D=D+1
else:
F=F+1
MoreStudents=input("Are there any more students? 'Yes' or 'No'")
#6 Assigning what to write in the file
PrintA=A," students got A's"
PrintB=B," students got B's"
PrintC=C," students got C's"
PrintD=D," students got D's"
PrintF=F," students failed"
#7 Writing to file
WriteTo.write(str(PrintA))
WriteTo.write("\n")
WriteTo.write(str(PrintB))
WriteTo.write("\n")
WriteTo.write(str(PrintC))
WriteTo.write("\n")
WriteTo.write(str(PrintD))
WriteTo.write("\n")
WriteTo.write(str(PrintF))
#8 Display in program
print(ClassName)
print(TeacherName)
print(PrintA)
print(PrintB)
print(PrintC)
print(PrintD)
print(PrintF)
假设您已经得到这个结果:
(1, " students got A's")
(2, " students got B's")
(3, " students got C's")
(4, " students got D's")
(5, ' students failed')
对于其中的每一个元素,您只需将第一个元素更改为字符串并将它们连接在一起
def helper(in):
return str(in[0]) + in[1]
helper((5, ' students failed'))
>>>"5 students failed"
因此,只需将函数放在代码中,并使用它修改正在打印的每个内容:
WriteTo.write(helper(PrintA))
假设您已经得到这个结果:
(1, " students got A's")
(2, " students got B's")
(3, " students got C's")
(4, " students got D's")
(5, ' students failed')
对于其中的每一个元素,您只需将第一个元素更改为字符串并将它们连接在一起
def helper(in):
return str(in[0]) + in[1]
helper((5, ' students failed'))
>>>"5 students failed"
因此,只需将函数放在代码中,并使用它修改正在打印的每个内容:
WriteTo.write(helper(PrintA))
执行此操作时:
PrintA=A," students got A's"
…创建两个值的元组
当您对这样的元组调用str
时:
(1, " students got A's")
(2, " students got B's")
(3, " students got C's")
(4, " students got D's")
(5, ' students failed')
1 students got A's
2 students got B's
...and so on
WriteTo.write(str(PrintA))
得到的是括号中的两个值,正如您所看到的
如果要以某种特定方式格式化结果,则必须显式执行此操作,而不是生成元组:
PrintA = f"{A} students got A's"
# ...
WriteTo.write(PrintA)
…或者不只是在元组上调用str
:
WriteTo.write(f"{PrintA[0]} {PrintA[1]}")
第一个版本可能更适合您的情况,但在一些实际应用程序中,可能有理由选择第二个版本
“f-string”格式需要Python3.6。如果您使用的是3.5或2.7,则可以改用
str.format
:
PrintA="{} students got A's".format(A)
…或者,如果您发现format
难以理解,您可以直接使用字符串方法:
PrintA = str(A) + " students got A's"
执行此操作时:
PrintA=A," students got A's"
…创建两个值的元组
当您对这样的元组调用str
时:
(1, " students got A's")
(2, " students got B's")
(3, " students got C's")
(4, " students got D's")
(5, ' students failed')
1 students got A's
2 students got B's
...and so on
WriteTo.write(str(PrintA))
得到的是括号中的两个值,正如您所看到的
如果要以某种特定方式格式化结果,则必须显式执行此操作,而不是生成元组:
PrintA = f"{A} students got A's"
# ...
WriteTo.write(PrintA)
…或者不只是在元组上调用str
:
WriteTo.write(f"{PrintA[0]} {PrintA[1]}")
第一个版本可能更适合您的情况,但在一些实际应用程序中,可能有理由选择第二个版本
“f-string”格式需要python3.6。如果您使用的是3.5或2.7,则可以改用
str.format
:
PrintA="{} students got A's".format(A)
…或者,如果您发现format
难以理解,您可以直接使用字符串方法:
PrintA = str(A) + " students got A's"
这句话的意思是:
PrintA=A," students got A's"
PrintB=B," students got B's"
PrintC=C," students got C's"
PrintD=D," students got D's"
PrintF=F," students failed"
实际上定义了元组
,当打印出元组时,它首先转换为str
,这使它看起来像(x,y)
,因此它打印:
(1, " students got A's")
相反,您要做的是直接创建str
,如下所示:
PrintA=str(A) + " students got A's"
PrintB=str(B) + " students got B's"
PrintC=str(C) + " students got C's"
PrintD=str(D) + " students got D's"
PrintF=str(F) + " students failed"
因此,当它被打印出来时(作为str
),它会像:
1, students got A's
这句话的意思是:
PrintA=A," students got A's"
PrintB=B," students got B's"
PrintC=C," students got C's"
PrintD=D," students got D's"
PrintF=F," students failed"
实际上定义了元组
,当打印出元组时,它首先转换为str
,这使它看起来像(x,y)
,因此它打印:
(1, " students got A's")
相反,您要做的是直接创建str
,如下所示:
PrintA=str(A) + " students got A's"
PrintB=str(B) + " students got B's"
PrintC=str(C) + " students got C's"
PrintD=str(D) + " students got D's"
PrintF=str(F) + " students failed"
因此,当它被打印出来时(作为str
),它会像:
1, students got A's
使用'join'而不是将PrintX强制转换为字符串,使用'join'而不是将PrintX强制转换为字符串