我很感激我的家庭作业任何帮助 - 这是一个简单的课程,应该检查一个文件,如果它存在,它读取文件,并将数据加载到程序中,所以你可以列出分数,并添加更多。它的假定只保留前5个分数。
然后当你关闭程序时(通过选择选项0),它应该将前5个分数写入scores.txt
文件。我认为我能够正常工作,我只是无法让程序正确阅读和填充scores
文件。
到目前为止,这是我的代码:
scores = []
#Check to see if the file exists
try:
file = open("scores.txt")
for i in range(0, 5):
name = file.readline()
score = file.readline()
entry = (score, name)
scores.append(entry)
scores.sort()
scores.reverse()
scores = scores[:5]
file.close()
except IOError:
print "Sorry could not open file, please check path."
choice = None
while choice != "0":
print """
High Scores 2.0
0 - Quit
1 - List Scores
2 - Add a Score
"""
choice = raw_input("Choice: ")
print ""
# exit
if choice == "0":
print "Good-bye."
file = open("scores.txt", "w+")
#I kinda sorta get this now... kinda...
for entry in scores:
score, name = entry
file.write(name)
file.write('\n')
file.write(str(score))
file.write('\n')
file.close()
# display high-score table
elif choice == "1":
print "High Scores\n"
print "NAME\tSCORE"
for entry in scores:
score, name = entry
print name, "\t", score
# add a score
elif choice == "2":
name = raw_input("What is the player's name?: ")
score = int(raw_input("What score did the player get?: "))
entry = (score, name)
scores.append(entry)
scores.sort()
scores.reverse()
scores = scores[:5] # keep only top 5 scores
# some unknown choice
else:
print "Sorry, but", choice, "isn't a valid choice."
raw_input("\n\nPress the enter key to exit.")
答案 0 :(得分:1)
您应该尝试在Comma-Separated-Value (CSV)中编写文件。虽然该术语使用“逗号”一词,但格式实际上只意味着任何类型的一致字段分隔符,每条记录在一行上。
Python有csv module来帮助阅读和编写这种格式。但是我会忽略这一点并手动完成你的作业。
假设你有一个这样的文件:
Bob,100
Jane,500
Jerry,10
Bill,5
James,5000
Sara,250
我在这里使用逗号。
f = open("scores.txt", "r")
scores = []
for line in f:
line = line.strip()
if not line:
continue
name, score = line.strip().split(",")
scores.append((name.strip(), int(score.strip())))
print scores
"""
[('Bob', 100),
('Jane', 500),
('Jerry', 10),
('Bill', 5),
('James', 5000),
('Sara', 250)]
"""
每次阅读和追加时都不必对列表进行排序。你可以在最后做一次:
scores.sort(reverse=True, key=lambda item: item[1])
top5 = scores[:5]
我意识到lambda
对您来说可能不熟悉。这是一个匿名函数。我们在这里使用它来告诉sort函数在哪里找到比较密钥。在这种情况下,我们对分数列表中的每个项目说,使用分数字段(索引1)进行比较。