(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]]