(ohjelmoinnin perusteet -kurssilta)
import re def tavut(sana): return re.findall("[bcdfghjklmnpqrstvwxz]*" + "(?:[aeiouyäö]i|[aeiou]u|[äeiöy]y" + "|aa|ää|[ie]e|[uo]o|[yö]ö|[aeiouyäö])" + "(?:[bcdfghjklmnpqrstvwxz]+(?![aeiouyäö]))?", sana, re.IGNORECASE) def jollekin(lista): return True in lista def kaikille(lista): return False not in lista def sisaltaako_tavuduplikaation(sana): tavulista = tavut(sana) return jollekin([tavu == seuraava for tavu, seuraava in zip(tavulista, tavulista[1:])]) def sotke_sanajarjestys(lause): return ' '.join(sotke_lista(lause.split())) def even(n): return n % 2 == 0 def sotke_lista(ls): if not even(len(ls)): return sotke_lista(ls[:-1]) + [ls[-1]] return [ls[index + 1 - 2 * (index % 2)] for index in range(len(ls))] def sotke_sanajarjestys(lause): return sotke_ja_yhdistele(lause.split()) def sotke_ja_yhdistele(lista): if len(lista) % 2 == 1: return sotke_ja_yhdistele(lista[:-1]) + ' ' + lista[-1] sanat1 = lista[0::2] sanat2 = lista[1::2] yhdistellyt = [sana2 + ' ' + sana1 for sana1, sana2 in zip(sanat1, sanat2)] return ' '.join(yhdistellyt) def flatten(lsls): return [e for ls in lsls for e in ls] def sotke_lista(ls): if not even(len(ls)): return sotke_lista(ls[:-1]) + [ls[-1]] return flatten([[sana2, sana1] for sana1, sana2 in zip(ls[0::2], ls[1::2])]) def sotke_lista(ls): if not even(len(ls)): return sotke_lista(ls[:-1]) + [ls[-1]] return [sana for sana1, sana2 in zip(ls[0::2], ls[1::2]) for sana in [sana2, sana1]]