我正在尝试创建一个程序,为用户提供一个简短的测验并创建一个得分,我已经完成了,然后我想将它们添加到.txt文件中的列表中。在程序中,我会问他们他们的名字,所以说我有一个这样的清单;
鲍勃,7
比尔,5
简,6
并且有人接受测验并输入名称Bob并获得列表将更新的分数4;
鲍勃,4
比尔,5
简,6
或者有新人参加测验,Sarah会改为;
鲍勃,4
比尔,5
简,6
萨拉,7
到目前为止,我有;
import random
file = open("scores.txt", "r")
UserScore=random.randint(0,10)
lines = file.readlines()
file.close()
student=input('What is your name? ')
file = open("scores.txt", "w")
for line in lines:
line = line.strip()
name, score = line.strip().split(",")
if name!=student:
file.write(line)
else:
file.write(name +',' +str(UserScore))
我现在已经将分数随机化,以便更容易阅读,但是这将来自用户正确回答的内容,我认为这段代码会读取文件,然后检查每行的每个名称,如果名称是输入与列表中的名称相同,该行将替换为名称和分数。但是,文件最后空白,我做错了什么?
答案 0 :(得分:0)
以下是我认为使用Python pickle模块的更好主意:
在[1]中:导入泡菜
在[2]中:得分= {' Bob' 75,' Angie':60,' Anita':80}#创建一个名为得分的词典
在[3]中:pickle.dump(得分,打开(' scores.dat',' wb'))#dump将pickle对象放入文件
在[4]中:!ls scores.dat #verify文件已创建
scores.dat
在[5]中:!cat scores.dat #list输出文件
(DP0
S'鲍勃'
P1
I75
SS'安琪'
P2
I60
SS'阿妮塔'
P3
I80
第
在[9]中:tscores = pickle.load(打开(' scores.dat',' rb'))#验证:将文件中的pickle对象加载到新文件中字典
在[10]中:tscores #Verification:列出新的词典
Out [10]:{' Angie':60,' Anita':80,' Bob':75}
在[11]中:得分== tscores #Verify dict对象相当于新创建的dict对象
出[11]:真实
答案 1 :(得分:-1)
我尝试了你的代码,第一次运行它,然后你在一行中重写文件。因此,下次在此单行文件上运行脚本时,您会在split函数中获得解包异常,因此您不会对该文件写任何内容,从而导致文件为空。
解决方案可能是在将行写入文件时再次添加换行符。
import random
file = open("scores.txt", "r")
UserScore=random.randint(0,10)
lines = file.readlines()
file.close()
student=input('What is your name? ')
file = open("scores.txt", "w")
for line in lines:
line = line.strip()
name, score = line.strip().split(",")
if name!=student:
file.write(line + '\n')
else:
file.write(name +',' +str(UserScore) + '\n')
答案 2 :(得分:-1)
这应该做你想要的事情
import random
file = open("scores.txt", "r")
UserScore=random.randint(0,10)
lines = file.readlines()
file.close()
student=input('What is your name? ')
flag = True
file = open("scores.txt", "w")
for line in lines:
line = line.strip()
name, score = line.strip().split(",")
if name!=student:
file.write(line + '\n')
else:
file.write(name +',' +str(UserScore) + '\n')
flag = False
if flag:
file.write(student +',' +str(UserScore) + '\n')
答案 3 :(得分:-1)
我调整了一些你的代码并冒昧地删除随机部分和名称,得分部分。但我得到了一些工作代码。我认为你可以让它适合你的情况。
file = open("scores.txt", "r+")
lines = file.readlines()
file.close()
us = 15
student = input('What is your name? ')
ls = []
file = open("scores.txt", "r+")
found_student = False
for line in lines:
line = line.strip()
ls = line.split(",")
print("Parsing: " + str(ls))
if not line:
print("Empty line")
pass
elif ls[0] != student:
file.write(line + "\n")
else:
found_student = True
file.write(ls[0] + ',' + str(us) + "\n")
if not found_student:
file.write(student + ',' + str(us) + "\n" )
file.close()