# ants.py
"""
Ants go marching
function demo for our python class.
This prints the lyrics to the song "The ants go marching";
see for example http://kids.niehs.nih.gov/lyrics/antsgo.htm .
(However, I've adapted the words a bit to the version I know.)
The ants go marching one by one, hurrah, hurrah.
The ants go marching one by one, hurrah, hurrah.
The ants go marching one by one,
The little one stops to suck his thumb
And they all go marching down to the ground
To get out of the rain, boom, boom, boom, BOOM!
The ants go marching two by two, hurrah, hurrah.
The ants go marching two by two, hurrah, hurrah.
The ants go marching two by two,
The little one stops to tie his shoe
And they all go marching down to the ground
To get out of the rain, boom, boom, boom, BOOM!
etc.
Notes :
* Most functions have a docstring and an explicit test.
* Nearly all return strings rather than printing something,
which makes the testing easier.
Jim Mahoney
Oct 6 2008
GPL
"""
def word_for_number(n):
"""Return the word for a number from 0 to 10, e.g. 'one' for 1.
>>> word_for_number(1)
'one'
"""
numbers = ['zero', 'one', 'two', 'three', 'four', 'five',
'six', 'seven', 'eight', 'nine', 'ten']
return numbers[n]
def ant_rhyme(n):
"""Return the rhyming phrase for a given verse.
>>> ant_rhyme(7)
'pray to heaven'
"""
rhymes = ['none',
'suck his thumb',
'tie his shoe',
'climb a tree',
'shut the door',
'take a dive',
'pick up sticks',
'pray to heaven',
'shut the gate',
'check the time',
'say "THE END"',
]
return rhymes[n]
def ant_line(count, line_ending = "hurrah, hurrah."):
"""Return one of the first 3 lines of the verse as a string.
>>> ant_line(6)
'The ants go marching six by six, hurrah, hurrah.'
>>> ant_line(2, "")
'The ants go marching two by two, '
"""
return "The ants go marching " \
+ word_for_number(count) + " by " \
+ word_for_number(count) + ", " + line_ending
def ant_verse(count):
"""Return a verse as a string."""
return ant_line(count) + "\n" \
+ ant_line(count) + "\n" \
+ ant_line(count, "") + "\n" \
+ "The little one stops to " + ant_rhyme(count) + "\n" \
+ "And they all to marching down into the ground \n" \
+ "To get out of the rain, boom, boom, boom, BOOM! \n"
def ant_song(start, end):
"""Return verses 'start' to 'end' (both from 1 to 10) of the ant song."""
song = ""
for count in range(start, end+1):
song = song + "\n" + ant_verse(count)
return song
def _test():
import doctest
doctest.testmod()
# -------------------------------------------------
_test()
print ant_song(1, 10)
syntax highlighted by Code2HTML, v. 0.93pm6