高分列表

我正在编写一个使用两个功能检查并查看文件的游戏
Game计划的主要DIR中存在称为HighScoreslist.txt.
如果没有,它会创建一个.那部分正常.问题是
当我在我的文件中读取时,我会从文件中读取时出现
再玩一遍.
这是MSG Python给我的错误
Trackback(最近的最新电话):
文件" ",第1行,在<模块>中
主要的()
文件" i:\ python \ project#3 \ project3.pyw",第330行
if(hashighscore(wins)== true):
文件" i:\ python \ project#3 \ project3.pyw",第175行,在hashighscore中
分数[i],名称[i] = string.split(行," \ t")
ValueError:需要超过1个值才能解开包装
这是Relavant代码:
DEF HASHIGHSCORE(得分):
#opens HighScoreslist.txt
infile = open(" highScoreslist.txt",'r')
分数= [0,0,0]
名称= ["","",""]
#从HighScoreslist.txt中读取的分数
i = 0
对于Infile.ReadLines()中的行:
分数[i],名称[i] = string.split(行," \ t")
名称[i] = string.rstrip(名称[i])
i += 1
infile.close()
#Compares Player在HighScoreslist.txt中的得分
i = 0
对于我的范围(0,Len(分数)):
if(得分int(得分[i])):
返回true
别的:
返回false
def sethighscores(得分,名称):
#opens HighScoreslist.txt
infile = open(" highScoreslist.txt",'r')
分数= [0,0,0]
名称= ["","",""]
#从HighScoreslist.txt中读取的分数
i = 0
对于Infile.ReadLines()中的行:
分数[i],名称[i] = string.split(行," \ t")
分数[i] = int(得分[i])
名称[i] = string.rstrip(名称[i])
i += 1
infile.close()
#shuffles通过HighScoreslist.txt并插入玩家的得分
比文件中的人更高
i = len(得分)
而(得分分数[I-1]和I> 0):
i- = 1
分数(i,得分)
names.insert(i,名称)
SCORES.POP(LEN(得分)-1)
names.pop(len(names)-1)
#writes new HighScoreslist.txt
OUTFILE = OPEN(" HighScoreslist.txt"," W")
outfile.write("高分名称\ n")
OutFile.Write(" -------------------------------------------------------------------------------------------------------- ----- \ n")
i = 0
对于我的范围(0,Len(分数)):
outfile.write(" \ t" + str(分数[i]) +" \ t \ t \ t" +名称[i] +" \ n")
outfile.close()
这是我游戏结束时对功能的呼吁,其中包括
错误消息.
如果足够高的话,#ADDS球员的分数
if(hashighscore(wins)== true):
SethighScores(获胜,GetName(Wins))
这就是文本文件发生时的样子.
高分名称
-----------------------------------------------------------------------------
15肖恩
0
0
答案可能很简单,我刚刚在这个程序上工作,所以
我的大脑已经变成糊状了.任何帮助都会大大
感谢...谢谢.

# 回答1


在12月8日,晚上8:32,肖恩·迷你 高分文件中的前两行没有标签字符.
阅读文件时,您可以执行:
对于(i,line)中的file_input:
如果我<2:
继续
#进行普通文件解析
有更好的方法来构建您的代码,但这是为了
你.
# 回答2


我是W 介绍一个使用两个函数检查并查看文件是否的游戏
错误消息很简单,您正在尝试解开1个值
元组至2个值
它之所以要元组的原因是您的第一行是:
在此上运行拆分('\ t')将返回一个长度的元组(因为那里
在该行中没有标签)
您的代码也确实是非常不明智的,请查看此重写以查看
您可以做得更好:
Def GethighScorelist():
得分= []
尝试:
highScore_file = list(open(" highScoreslist.txt"))
对于HighScore_file [2:]中的行:
得分,名称= line.split('\ t \ t \ t')
scores.append((int(score),name.rstrip()))
除了ioError:#尚无HIGHSCORE文件
经过
返回分数
DEF HASHIGHSCORE(得分):
分数= [s for(s,n)在GethighScorelist()]中
如果分数:
回报分数最小(分数)
返回true
def sethighscores(新闻,纽名):
max_scores = 3
分数= GethighScorelist()
对于我(分数)中的我(得分,名称):
如果新闻库得分:
scores.insert(i,(NewsCore,newname))
休息
别的:
SCORES.APPEND((NewsCore,NewName))
OUTFILE = OPEN(" HighScoreslist.txt"," W")
outfile.write("高分名称\ n")
OutFile.Write(" -------------------------------------------------------------------------------------------------------- ----- \ n")
对于我的范围(max_scores):
尝试:
得分,名称=分数[i]
除了IndexError:
得分,名称= 0,''
outfile.write(" \ t%s \ t \ t \ t \ t%s \ n"%(得分,名称))
outfile.close()
如果HashighScore(获胜):
sethighscores(获胜,getName(wins))
# 回答3


在12月8日,晚上10:07,Chris 高分文件中的前两行没有标签字符.
阅读文件时,您可以执行:
对于(i,line)中的file_input:
如果我<2:
继续
#进行普通文件解析
有更好的方法来构建您的代码,但这是为了
你.
抱歉,我的意思是"枚举(file_input)"
# 回答4


在2007年12月8日星期六13:32:08 -0500,肖恩·米诺尔(Shawn Minisall)写道:
不是您最初的问题,但您应该想看看这个而不是
创建另一个解析器:http://docs.python.org/lib/rawconfigparser-objects.html
-Samuel
# 回答5


Shawn Minisall aécrit:
硬编码的文件名是一个坏主意.和fwiw,您的文件将被查找
在当前的Wirking目录中 - 不一定是
"游戏计划的主要目录".
您可以直接通过文件迭代.
String.split(str,sep)长期弃用.改用Str方法:
s,n = line.split('\ t')
另外,如果该行没有完全一个选项卡,这显然会提出
在里面.就像,即,这是一个空的线...
您可以使用枚举(iTable)而不是手动计数行.
另外,如果您的文件有3行以上怎么办?
您显然不知道如何使用Python's进行循环:
对于分数中的项目:
#现在使用项目而不是分数[i]
您在这里有逻辑错误.这只会比较
您的分数清单.您想要类似的东西:
对于分数中的项目:
如果得分int(项目):
返回true
返回false
下摆. ..您在这里不看到像重复的东西吗?所有的意思
在" read_scores"函数中提取此代码.
我的天啊.
这比需要的要复杂十倍.
如果您的文件以这种方式形成,则不足为奇,您的代码会断开.没有
您写的内容与读取它的代码的期望相匹配.
而且您正在做两次文件的解析.
您问题的答案确实很简单:要么重写
读取文件以使其匹配您在文件中所写的代码,
或重写编写文件以使其与之匹配的代码
对读取它的代码的期望. IOW:做两个部分
代码以相同的文件格式工作! - )
此外,学会有效利用Python的功能会有所帮助! - )
这是您的代码的重新实现 - 未测试,因此可能
有错误,但应该解决问题.
文件格式是每行非常简单的"分数:名称".没有其他的.
(哎呀,此文件用于存储数据,并不是要看到
用户).
实例化时必须通过HISCORE文件完整路径
HISCORS对象(即,在初始化程序时 - 您只需要
您计划的整个生命周期中的一个HISCORE对象).你必须
还要通过您要保留的最大His核数量和可选
标志告诉阅读HISCORE文件时是否存在错误
异常或被忽略(最终使用空的HISCORE列表出现).
hiscores = hiscores('/path/to/your/file.ext',3)
完成后,您只需使用它:
如果hiscores.update(42,'bibi'):
打印"是的,你的老板"
别的:
打印"再试一次..."
#hiscores.py
导入系统
def _read_scores(路径):
F =开放(路径)
#我们不期望一个庞大的文件,所以更简单
#在记忆中阅读全部
线= f.Readlines()
f.close()
得分= []
对于过滤器中的线(无,映射(str.Strip,lines)):
尝试:
得分,名称= line.split(':')
得分= int(得分)
除了Valueerror,E:
#要么线没有得分:名称或
#分数不是INT的合适价值
err ="文件%s:错误的文件格式" \
% 小路
提高价值ERRER(ERR)
别的:
scores.append((Score,name))
#应该已经分类了,但我们想确定.
#nb:自然排序将在这里做右(tm)
SCORES.SORT()
返回分数
def _write_scores(路径,得分):
分数=" \ n" .join([[%s:%s"分数中的项目))
f = open(路径,'w')
F.Write(分数)
f.close()
类Hiscores(对象):
def __init __(self,path,nb_scores,rise_on_error = false):
self._path =路径
self._nb_scores = nb_scores
尝试:
self._scores = _read_scores(路径)[0:self.nb_scores-1]
除了(ioError,valueerror),e:
如果rish_on_error:
增加
别的:
#记录错误
err ="读取hiscore file%s:%s" \
%(路径,E)
打印> sys.stderr,err
#使用一个空列表
self._scores = []
DEF索引(自我,得分):
对于我,在枚举中(self._scores):
如果得分S [0]:
返回i
返回-1
def更新(自我,得分,名称):
index = self.index(得分)
如果index == -1:
返回false
self._scores.insert(inde X,(得分,名称)) self._scores.pop() _write_scores(self._path,self._scores) 返回true def is_hi_score(self,得分): 返回self.index(得分)-1 hth
# 回答6

Bruno Desthuilliers Aécrit: (剪) 哎呀! 在这里缺少线: score.reverse()

标签: python

添加新评论