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.'