| 1 | 1 | def recite(start_verse, end_verse): |
| 2 | | pass |
| 2 | # Edge Case: Invalid input where start_verse or end_verse is out of range |
| 3 | if start_verse < 1 or end_verse > 8 or start_verse > end_verse: |
| 4 | raise ValueError("Invalid verse range") |
| 5 | |
| 6 | animals = [ |
| 7 | "fly", |
| 8 | "spider", |
| 9 | "bird", |
| 10 | "cat", |
| 11 | "dog", |
| 12 | "goat", |
| 13 | "cow", |
| 14 | "horse" |
| 15 | ] |
| 16 | |
| 17 | reactions = [ |
| 18 | "", |
| 19 | "It wriggled and jiggled and tickled inside her.", |
| 20 | "How absurd to swallow a bird!", |
| 21 | "Imagine that, to swallow a cat!", |
| 22 | "What a hog, to swallow a dog!", |
| 23 | "Just opened her throat and swallowed a goat!", |
| 24 | "I don't know how she swallowed a cow!", |
| 25 | "She's dead, of course!" |
| 26 | ] |
| 27 | |
| 28 | verses = [] |
| 29 | |
| 30 | # Edge Case: Single verse requested |
| 31 | for i in range(start_verse, end_verse + 1): |
| 32 | verse = [] |
| 33 | animal = animals[i-1] |
| 34 | verse.append(f"I know an old lady who swallowed a {animal}.") |
| 35 | |
| 36 | # Edge Case: Last verse has special ending |
| 37 | if i == 8: |
| 38 | verse.append(reactions[i-1]) |
| 39 | verses.append(verse) |
| 40 | continue |
| 41 | |
| 42 | if reactions[i-1]: |
| 43 | verse.append(reactions[i-1]) |
| 44 | |
| 45 | # Edge Case: First verse has no chain |
| 46 | if i > 1: |
| 47 | for j in range(i-1, 0, -1): |
| 48 | if j == 2: |
| 49 | verse.append(f"She swallowed the {animals[j]} to catch the {animals[j-1]} that wriggled and jiggled and tickled inside her.") |
| 50 | else: |
| 51 | verse.append(f"She swallowed the {animals[j]} to catch the {animals[j-1]}.") |
| 52 | |
| 53 | verse.append("I don't know why she swallowed the fly. Perhaps she'll die.") |
| 54 | verses.append(verse) |
| 55 | |
| 56 | # Edge Case: Formatting output as list of strings per verse |
| 57 | result = [] |
| 58 | for i, verse in enumerate(verses): |
| 59 | result.extend(verse) |
| 60 | # Edge Case: Adding empty line between verses except for the last one |
| 61 | if i < len(verses) - 1: |
| 62 | result.append("") |
| 63 | |
| 64 | return result |
| 65 | |
| 66 | # Handled Edge Cases: Invalid input where start_verse or end_verse is out of range, Single verse requested, Last verse has special ending, First verse has no chain, Formatting output as list of strings per verse, Adding empty line between verses except for the last one |