[Tutor] Python Programming for the Absolute Beginner - Chap 7 Q: 2

2013-08-12 Thread Zack Hasanov
Hello,

 

I am a python newbie.  I am reading this book (Python Programming for the
Absolute Beginner).  I am on Chapter 7, Question 2.  

 

Improve the Trivia Challenge game so that it maintains a high-scores list
in a file. The program should record the player's name and score. Store the
high scores using a pickled object.

I have the following code so far:

 

def high_score():

Records a player's score

 

high_scores = []

 

#add a score // Do current stuff for adding a new score...

name = input(What is your name? )

player_score = int(input(What is your score? ))

entry = (name, player_score)

high_scores.append(entry)

high_scores.sort(reverse=True)

high_scores = high_scores[:5]   # keep only top five

 

# dump scores

f = open(pickles1.dat, wb)

pickle.dump(high_scores, f)

f.close()

 

f = open(pickles1.dat, rb)

high_scores = pickle.load(f)

print(high_scores)

f.close()

 

When I execute this program in the main() program I get only the existing
single name, player_score list combination stored in the pickles1.dat file.

 

Can someone walk me through how it can store all the values each time the
program is ran?

 

Thanks,

Zack H.

 

 

___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Python Programming for the Absolute Beginner - Chap 7 Q: 2

2013-08-12 Thread Alan Gauld

On 12/08/13 01:52, Zack Hasanov wrote:


I have the following code so far:

def high_score():
 high_scores = []

 name = input(What is your name? )
 player_score = int(input(What is your score? ))
 entry = (name, player_score)
 high_scores.append(entry)
 high_scores.sort(reverse=True)
 high_scores = high_scores[:5]   # keep only top five


Note that you never read the stored values from your pickle file you 
just add a single value.




 # dump scores
 f = open(pickles1.dat, wb)
 pickle.dump(high_scores, f)
 f.close()


This then dumps that single value to the file overwriting
anything that might have already been there.


 f = open(pickles1.dat, rb)
 high_scores = pickle.load(f)
 print(high_scores)


You then load the new value and print it.


When I execute this program in the main() program I get only the
existing single name, player_score list combination stored in the
pickles1.dat file.


I have no idea how you call this. Presumably from within a loop?
But because you never read in the stored values before writing the new 
you only ever get the last value stored.


You need to insert code like your last block above at the top of the 
function to pre-populate high_scores before adding the new entry.


Once you get that working we can look at tidying up some
of the unnecessary code that will be left over, but lets
get it working first!

HTH
--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/

___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor