Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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_Output - Fatal编程技术网

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

我正在做一个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 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强制转换为字符串