[Tutor] Yahtzee-like Program
Allan Crooks
allan.crooks@btinternet.com
Sat, 18 Aug 2001 13:09:36 +0100
> I've written a small program that is a lot like Yahtzee, without the
> pretty graphics. It's more of a command line style game. It works
> and obeys all the standard rules.
>
> However, I know that my 250+ line code is horribly ugly. But, it is
> the only way I know how to write it. I would like it if someone would
> look at it and give me some pointers to help clean my code, but I am
> hesitant to post all of it on the Tutor list.
>
> If you want to look at it, it is available at
> <http://hemlock.centre.edu/~tmbrau00/Yahtzee.txt>
<snip>
Well, there quite a few ways it could be improved (by which, I mean
"shortened"). :)
You could put in the following method:
def score_single_helper (self, val, cat, letters):
self.score_single(val=val, cat=cat)
for letter in letters: self.scored.append (letter)
Then the "if option in Aa, elif option in Bb" and so on would be a lot smaller. :)
Also, I'd also encourage you to use the % operator for strings (so put %s in the
string itself). That way, you can get out of putting all the messy "...+str(x)+..."
code.
You might want to split the self.score values into two dictionaries (maybe
more), one containing the ones - sixes, and the other one for the rest.
Then the following code:
sum=(self.score['ones']+self.score['twos']... <snip>
can become:
def score_top_bonus(self):
import operators
sum = reduce (operators.add, self.score.values())
Another point is that if you have an if statement, you don't need to put "else:
pass", you can just omit that. It's not always necessary to have an else
statement.
The following line:
option=raw_input('Please choose [A-M] ')
could be changed to:
option = raw_input('Please choose [A-M] ').lower()
That will convert the string to lower case. That way, you don't have to worry
about adding 'M' and 'm' to 'scores'.
Note that I haven't actually run the program, I'm just saying how I'd make it
smaller. :)
Allan.