[Tutor] Projects (fwd)
Danny Yoo
dyoo at cs.wpi.edu
Thu Jan 24 00:50:55 CET 2008
Hi Jason,
Looking back at that Java code:
////////////////////////////////////////////////
static String convertDigitToEnglish(int d) {
switch ( d )
{
case 1: return "one";
case 2: return "two";
case 3: return "three";
case 4: return "four";
case 5: return "five";
case 6: return "six";
case 7: return "seven";
case 8: return "eight";
case 9: return "nine";
default: return "\nFatal Error!\n"; // should I abort pgm?
} // end of switch
} // end of convertDigitToEnglis
////////////////////////////////////////////////
Frankly, this seems silly to me. First, it ignores zero, which is a cardinal
sin. I'm being somewhat serious about this: functions should do what they say,
and that function isn't.
But the code could also be written much more tightly as:
////////////////////////////////////////////////
static String digitToString(int n) {
String[] words = {"zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine"};
if (0 <= n && n < 10) {
return words[n];
}
throw new IllegalArgumentException("input not a single digit");
}
////////////////////////////////////////////////
I don't mean to make this post so Java-centric; it just seems a little unfair
to compare a bad Java routine to a good Python routine. :) Writing an
equivalent in Python is also pretty straightforward:
#################################
## Pseudocode: just a sketch
def digitToString(n):
words = ["zero", "one", ...]
if 0 <= n < 10:
return words[n]
...
#################################
Like dictionaries, the list data structure works pretty well for key/value
lookup if the input key is a small number.
Good luck!
More information about the Tutor
mailing list