highscores list
Chris
cwitts at gmail.com
Sat Dec 8 15:11:41 EST 2007
On Dec 8, 10:07 pm, Chris <cwi... at gmail.com> wrote:
> On Dec 8, 8:32 pm, Shawn Minisall <trekker... at comcast.net> wrote:
>
>
>
> > I'm writing a game that uses two functions to check and see if a file
> > called highScoresList.txt exists in the main dir of the game program.
> > If it doesn, it creates one. That part is working fine. The problem is
> > arising when it goes to read in the high scores from the file when I
> > play again.
>
> > This is the error msg python is giving me
>
> > Traceback (most recent call last):
> > File "<pyshell#0>", line 1, in <module>
> > main()
> > File "I:\PYTHON\PROJECT #3\PROJECT3.PYW", line 330, in main
> > if(hasHighScore(wins) == True):
> > File "I:\PYTHON\PROJECT #3\PROJECT3.PYW", line 175, in hasHighScore
> > scores[i],names[i] = string.split(line,"\t")
> > ValueError: need more than 1 value to unpack
>
> > Here's the relavant code:
>
> > def hasHighScore(score):
> > #opens highScoresList.txt
> > infile = open("highScoresList.txt",'r')
> > scores = [0,0,0]
> > names = ["","",""]
>
> > #reads in scores from highScoresList.txt
> > i=0
> > for line in infile.readlines():
> > scores[i],names[i] = string.split(line,"\t")
> > names[i]=string.rstrip(names[i])
> > i += 1
> > infile.close()
>
> > #compares player's score with those in highScoresList.txt
> > i=0
> > for i in range(0,len(scores)):
> > if(score > int(scores[i])):
> > return True
> > else:
> > return False
>
> > def setHighScores(score,name):
> > #opens highScoresList.txt
> > infile = open("highScoresList.txt",'r')
> > scores = [0,0,0]
> > names = ["","",""]
>
> > #reads in scores from highScoresList.txt
> > i=0
> > for line in infile.readlines():
> > scores[i],names[i] = string.split(line,"\t")
> > scores[i]=int(scores[i])
> > names[i]=string.rstrip(names[i])
> > i += 1
> > infile.close()
>
> > #shuffles thru the highScoresList.txt and inserts player's score if
> > higher then those in file
> > i=len(scores)
> > while(score > scores[i-1] and i>0):
> > i -= 1
>
> > scores.insert(i,score)
> > names.insert(i,name)
> > scores.pop(len(scores)-1)
> > names.pop(len(names)-1)
>
> > #writes new highScoresList.txt
> > outfile = open("highScoresList.txt","w")
>
> > outfile.write (" High Score Name \n")
> > outfile.write ("-------------------------------------------------\n")
>
> > i=0
> > for i in range(0,len(scores)):
> > outfile.write("\t" + str(scores[i]) + "\t\t\t" + names[i] + "\n")
> > outfile.close()
>
> > And here's the call to the functions at the end of my game, included in
> > the error msg.
>
> > #adds player's score to high score list if high enough
> > if(hasHighScore(wins) == True):
> > setHighScores(wins,getName(wins))
>
> > And this is what the text file looks like when it happens.
>
> > High Score Name
> > -------------------------------------------------
> > 15 SHAWN
> > 0
> > 0
>
> > The answer is probably simple, I've just been working on this program so
> > long that my brain has turned to mush. Any help would be much
> > appreciated...thanks.
>
> Your first two lines in your highscores file has no Tab Characters.
> When reading the file you could do:
>
> for (i, line) in file_input:
> if i < 2:
> continue
>
> # do normal file parsing
>
> There are better ways to structure your code though, but that's for
> you.
Apologies, I meant 'in enumerate(file_input)'
More information about the Python-list
mailing list