99 butelek piwa w Pythonie

Posted on Mon 08 June 2020 in Brain game, Shitz • 1 min read

Znalazłem gdzieś zadanie wygenerowania tekstu piosenki o 99 piwach. To odmiana harcerskiej piosenki, której nauczył mnie Gospodarczyk o Winnteou. Piosenka ta odratowała moje chore gardło i szkolna wycieczka się udała.

Kod jest krótki ale czuję, że może być jeszcze krótszy gdyby się przyłożył do przypadków specjalnych. Przypomina mi to obecnie aktualny temat formantów, cząstek występujących w słowotwórstwie. Temat aktualny bo przed nami egzamin ósmoklasisty.

def tens(t):
    tt = ("","twenty","thirty","fourty","fifty","sixty","seventy","eighty","ninety")
    return tt[int(t)-1]
def ones(o):
    oo = ("","one","two","three","four","five","six","seven","eight","nine")
    return oo[int(o)]
def spell(x):
    if len(str(x))==2:
        if str(x) == '20':
            return "twenty" , "nineteen"
        if str(x) == '15':
            return "fifteen" , "fourteen"
        elif str(x) == '13':
            return "thirteen", "twelve"
        elif str(x) == '12':
            return "twelve", "eleven"
        elif str(x) == '11':
            return "eleven", "ten"
        elif str(x) == '10':
            return "ten", "nine"
        else:
            if str(x)[0] == '1':
                z = str(ones(str(x)[1])+'teen').replace(" ","")
                y = str(ones(str(x-1)[1])+'teen').replace(" ","")
                return z, y
            else:
                z = tens(str(x)[0]) + "-" + ones(str(x)[1])
                y = tens(str(x-1)[0]) + "-" + ones(str(x-1)[1])
                return z, y
    else:
        z = ones(x)
        y = ones(x-1)
        return z, y

for i in range(99,0,-1):
    print spell(i)[0].title(),'bottles of beer on the wall,',spell(i)[0].title(),' bottles of beer. Take one down and pass it around -',spell(i)[1].title(),' bottles of
beer on the wall.'