0275 - Perechi Vocale 1
Cerința
Se dă un text în care cuvintele sunt formate din litere mici ale alfabetului englez şi cifre şi sunt separate prin spaţii şi semne de punctuaţie. Să se determine perechea de vocale alăturate din text care apare de cele mai multe ori.
Date de intrare
Fişierul de intrare perechivocale1in.txt conţine textul dat, situat pe mai multe linii.
Date de ieșire
Dacă datele sunt introduse corect, fişierul de ieşire perechivocale1out.txt va conţine pe prima linie textul: " Datele de intrare corespund restrictiilor impuse", apoi pe un rand nou va afișa perechea de vocale găsită. În caz contrar, se va afișa mesajul:" Datele de intrare nu corespund restrictiilor impuse"
- Dacă există mai multe asemenea perechi de vocale, se vor afişa toate, în ordine lexicografică şi separate printr-un spaţiu.
- Dacă în text nu există nici o pereche de vocale consecutive, se va afişa mesajul NU.
Restricții și precizări
- cuvintele din text sunt formate din cel mult 40 caractere;
Exemplu 1
- perechivocale1in.txt
- aleea ce strabate valea
- e-o unduire de pietris scanteietor,
- de-aceea nu stii daca zboara sau doar inoata in unde aurii
- perechivocale1out.txt
- Datele introduse corespund restricțiilor impuse.
- ea oa
Explicație
- Perechile ea şi oa apar de trei ori. Celelalte perechi de vocale din text apar de mai puţine ori.
Exemplu 2
- perechivocale1in.txt
- ANA ARE MERE
- perechivocale1out.txt
- Datele de intrare nu corespund restricțiilor impuse.
Rezolvare
<syntaxhighlight lang="python" line>
- 0275 Perechi Vocale 1
def validare(lista_prop):
for prop in lista_prop: for caracter in prop: if 'A' <= caracter <= 'Z': raise ValueError
for prop in lista_prop: cuvinte_din_propozitie = prop.split() for cuvant in cuvinte_din_propozitie: if len(cuvant) > 40: raise ValueError
file_out.write("Datele de intrare corespund restrictiilor impuse\n")
def vocala(litera):
if litera in "aeiou": return True
return False
def perechi_vocale_1(lista_prop):
lista_perechi_vocale = []
for prop in lista_prop: for index in range(len(prop)-1): caracter_curent = prop[index] caracter_urmator = prop[index+1] if vocala(caracter_curent) == vocala(caracter_urmator) is True: lista_perechi_vocale.append(caracter_curent + caracter_urmator)
lista_perechi_vocale_distinct = list(set(lista_perechi_vocale)) lista_perechi_vocale_distinct.sort()
maxim_aparitii = 0
for pereche in lista_perechi_vocale_distinct: nr_aparitii = lista_perechi_vocale.count(pereche) if nr_aparitii > maxim_aparitii: maxim_aparitii = nr_aparitii
lista_perechi_maxime = [] for pereche in lista_perechi_vocale_distinct: nr_aparitii = lista_perechi_vocale.count(pereche) if nr_aparitii == maxim_aparitii: lista_perechi_maxime.append(pereche)
if len(lista_perechi_maxime) > 0: for pereche in lista_perechi_maxime: file_out.write(pereche + " ") else: print("NU")
if __name__ == '__main__':
file_in = open("perechivocale1in.txt", "r") file_out = open("perechivocale1out.txt", "w") try: lista_propozitii = [] for linie in file_in: propozitie = linie.strip() lista_propozitii.append(propozitie)
validare(lista_propozitii) perechi_vocale_1(lista_propozitii)
except ValueError: file_out.write("Datele de intrare nu corespund restrictiilor impuse") except IndexError: file_out.write("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>