Python 中文本文件的意外回溯
Unexpected traceback on text file in Python
我在尝试使用此代码写入文本文件时遇到 "Traceback (most recent call last):" 错误。所有这三个文件都已经存在(尽管我相信它们不应该必须存在——代码应该在找不到它们的情况下创建它们,不是吗?),并且它们都与 .py 文件位于同一目录中。我看不到我的错误 - 我做错了什么?
import random
forename=""
surname=""
classno=0
numberone=0
numbertwo=0
correct=False
score=0
ops = ["+", "x", "-"]
while forename == "" or forename.isnumeric():
forename=input("What is your first name? ")
if forename == "":
print("You have to enter your first name.")
if forename.isnumeric() == True:
print("Your name must contain letters.")
while surname == "" or surname.isnumeric():
surname=input("What is your surname? ")
if surname == "":
print("You have to enter your name.")
if surname.isnumeric() == True:
print("Your name must contain letters.")
while classno not in [1,2,3]:
while True:
try:
classno=int(input("What class are you in? "))
break
except ValueError:
print("That wasn't right. Please try again.")
for x in range(10):
operation=random.choice(ops)
if operation == "-":
numberone=random.randint(0,10)
numbertwo=random.randint(0,numberone)
elif operation == "x":
numberone=random.randint(0,12)
numbertwo=random.randint(0,12)
else:
numberone=random.randint(0,100)
numbertwo=random.randint(0,(100-numberone))
while True:
try:
answer=int(input("What is " + str(numberone) + str(operation) + str(numbertwo) + "? "))
break
except ValueError:
print("Incorrect input. Please try again.")
if operation=="+":
if answer==numberone+numbertwo:
correct=True
elif operation=="-":
if answer==numberone-numbertwo:
correct=True
else:
if answer==numberone*numbertwo:
correct=True
if correct==True:
print("Correct!")
score=score+1
else:
print("Wrong!")
correct = False
if classno == 1:
file1=open("class1.txt", "a")
file1.write(forename,surname,score,"\n")
file1.close()
elif classno == 2:
file2=open("class2.txt", "a")
file2.write(forename,surname,score,"\n")
file2.close()
else:
file3=open("class.text", "a")
file3.write(forename,surname,score,"\n")
file3.close()
print("You scored",score,"out of 10.")
编辑:这是我在提问后看到的:
问题可能出在您尝试写入文件时,在这一行中:
file2.write(forename,surname,score,"\n")
write
方法只接收一个参数。构建一个字符串作为参数传递。
例如:
line_to_be_written = str(forename) + " " + str(surname) + " : " + str(score) + "\n"
file2.write(line_to_be_written)
上面的方式比较容易理解,但是按照Bhargav的推荐,可以用format
as:
line_to_be_written = '{0} {1} {2} {3}'.format(forename, surname, score, '\n')
甚至
line_to_be_written = '%s %s %s %s' % (forename, surname, score, '\n')
我在尝试使用此代码写入文本文件时遇到 "Traceback (most recent call last):" 错误。所有这三个文件都已经存在(尽管我相信它们不应该必须存在——代码应该在找不到它们的情况下创建它们,不是吗?),并且它们都与 .py 文件位于同一目录中。我看不到我的错误 - 我做错了什么?
import random
forename=""
surname=""
classno=0
numberone=0
numbertwo=0
correct=False
score=0
ops = ["+", "x", "-"]
while forename == "" or forename.isnumeric():
forename=input("What is your first name? ")
if forename == "":
print("You have to enter your first name.")
if forename.isnumeric() == True:
print("Your name must contain letters.")
while surname == "" or surname.isnumeric():
surname=input("What is your surname? ")
if surname == "":
print("You have to enter your name.")
if surname.isnumeric() == True:
print("Your name must contain letters.")
while classno not in [1,2,3]:
while True:
try:
classno=int(input("What class are you in? "))
break
except ValueError:
print("That wasn't right. Please try again.")
for x in range(10):
operation=random.choice(ops)
if operation == "-":
numberone=random.randint(0,10)
numbertwo=random.randint(0,numberone)
elif operation == "x":
numberone=random.randint(0,12)
numbertwo=random.randint(0,12)
else:
numberone=random.randint(0,100)
numbertwo=random.randint(0,(100-numberone))
while True:
try:
answer=int(input("What is " + str(numberone) + str(operation) + str(numbertwo) + "? "))
break
except ValueError:
print("Incorrect input. Please try again.")
if operation=="+":
if answer==numberone+numbertwo:
correct=True
elif operation=="-":
if answer==numberone-numbertwo:
correct=True
else:
if answer==numberone*numbertwo:
correct=True
if correct==True:
print("Correct!")
score=score+1
else:
print("Wrong!")
correct = False
if classno == 1:
file1=open("class1.txt", "a")
file1.write(forename,surname,score,"\n")
file1.close()
elif classno == 2:
file2=open("class2.txt", "a")
file2.write(forename,surname,score,"\n")
file2.close()
else:
file3=open("class.text", "a")
file3.write(forename,surname,score,"\n")
file3.close()
print("You scored",score,"out of 10.")
编辑:这是我在提问后看到的:
问题可能出在您尝试写入文件时,在这一行中:
file2.write(forename,surname,score,"\n")
write
方法只接收一个参数。构建一个字符串作为参数传递。
例如:
line_to_be_written = str(forename) + " " + str(surname) + " : " + str(score) + "\n"
file2.write(line_to_be_written)
上面的方式比较容易理解,但是按照Bhargav的推荐,可以用format
as:
line_to_be_written = '{0} {1} {2} {3}'.format(forename, surname, score, '\n')
甚至
line_to_be_written = '%s %s %s %s' % (forename, surname, score, '\n')