[Tutor] reading complex data types from text file
Chris Castillo
ctcast at gmail.com
Mon Jul 20 04:56:30 CEST 2009
okay so I figured my program out. I am posting the final version so if
someone else is having problems with something like this it may benefit the
community. (comments are included to help those who might not understand the
code)
------------------------------------------------------------------------------------------------------------
'''
Program reads names of bowlers and their corresponding scores,
then writes their names to a new text file with a description
of either below average, average, above average or a perfect score
'''
scores = {} # empty dictionary
total = 0 #initalize total to 0 value
for line in open("bowlingscores.txt", "r"): # iterate through txt file
with names and scores
if line.strip().isdigit():
score = int(line) # convert score into int type
scores[name] = score # add scores to dictionary
total += score # add score to running total
else:
name = line.strip() # if the line isn't a digit name will be the
key in the dictionary
averageScore = total / len(scores) # get average of all scores
fileOut = open("bowlingaverages.txt", "w") # create a file to write names
and scores to
fileOut.write("Bowling Report\n" + ("-" * 50) + "\n") # header
for name, score in scores.items(): #iterate through each score in the
dictionary to get an score value for each player
if score == 300:
score = "\tPerfect score!\n"
scores[name] = score
elif score < averageScore:
score = "\tBelow average\n"
scores[name] = score
elif score > averageScore:
score = "\tAbove average!\n"
scores[name] = score
else:
score = "\tAverage!\n"
scores[name] = score
for items in scores.items(): #iterate through the items in the dictionary
and format them to the output file
fileOut.write("%s%s\n" % items)
---------------------------------------------------------------------------------------
your output for this code should look like this inside the text file:
*Bowling Report
--------------------------------------------------
sue Below average
bill Above average!
nat Below average
tom Perfect score!*
Thanks to everyone who helped me with this.
On Sun, Jul 19, 2009 at 12:15 AM, Chris Castillo <ctcast at gmail.com> wrote:
> so could I also replace the score of each bowler (key value) in the
> dictionary with a new key such as "below average" or "above average"
> according to each if-elif-else structure and then write to a text file in
> the following format?
>
> Jim Above Average
> Sue Below Average
> Bob Perfect score
>
>
> On Fri, Jul 17, 2009 at 12:48 PM, bob gailer <bgailer at gmail.com> wrote:
>
>> Chris Castillo wrote:
>>
>>> how would i go about adding the names to a dictionary as a key and the
>>> scores as a value in this code?
>>>
>>>
>>> # refactored for better use of Python, correct logic, and flow
>>
>> scores = {} # empty dictionary
>> total = 0
>> for line in open("bowlingscores.txt", "r"):
>> if line.strip().isdigit():
>> score = int(line)
>> scores[name] = score
>> total += score
>> else:
>> name = line.strip()
>> averageScore = total / len(scores)
>> fileOut = open("bowlingaverages.txt", "w")
>> fileOut.write("Bowling Report\n" + ("-" * 50) + "\n")
>> for name, score in scores.items():
>> if score == 300:
>> score = "\tPerfect score!"
>> elif score < averageScore:
>> score = "\tBelow average"
>> elif score > averageScore:
>> score = "\tAbove average!"
>> else:
>> score = "\tAverage!"
>> print name, score
>>
>>
>> --
>> Bob Gailer
>> Chapel Hill NC
>> 919-636-4239
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20090719/b002c93d/attachment.htm>
More information about the Tutor
mailing list