0090 - Numar Maxim Vocale

De la Universitas MediaWiki

Cerința

Să se scrie un program care citește mai multe propoziții și determină propoziția cu cele mai multe vocale.

Date de intrare

Fișierul de intrare vocmaxin.txt conține pe prima linie un număr natural n, iar pe următoarele n linii câte o propoziție alcătuită din litere mici ale alfabetului englez și spații.

Date de ieșire

Dacă datele sunt introduse corect, fișierul de ieșire vocmaxout.txt va conține pe prima linie: " Datele de intrare corespund restrictiilor impuse", apoi pe un rand nou va afișa propoziția cu cele mai multe vocale. În caz contrar, se va afișa mesajul:" Datele de intrare nu corespund restrictiilor impuse"

Restricții și precizări

  • 0<n<100
  • fiecare propoziție va conține cel mult 250 de caractere
  • dacă sunt mai multe propoziții cu număr maxim de vocale se poate afișa oricare

Exemplu 1

vocmaxin.txt
4
somnoroase pasarele
pe la cuiburi se aduna
se ascund in ramurele
noapte buna
vocmaxout.txt
Datele introduse corespund restricțiilor impuse.
pe la cuiburi se aduna


Exemplu 2

vocmaxin.txt
2
ANA ARE MERE
bACNOTA folosita "$"
vocmaxout.txt
Datele de intrare nu corespund restricțiilor impuse.


Rezolvare

# 0090 Numar Maxim Vocale
def validare(nr_prop, propozitii):      # functia de validare a datelor de intrare

    if nr_prop <= 0 or nr_prop >= 100:
        raise ValueError
    # daca dsatele de intrare nu corespund, ridicam eroarea ValueError
    if len(propozitii) != nr_prop:
        raise ValueError

    for prop in propozitii:     # verificam toate propozitiile sa aiba caractere doar litere mici si spatii
        if len(prop) > 255:
            raise ValueError
        for litera in prop:
            if (litera < 'a' or litera > 'z') and litera != ' ':
                raise ValueError

    file_out.write("Datele de intrare corespund restrictiilor impuse\n")


def vocala(litera):             # functie care verifica daca o litera e vocala
    if litera in "aeiou":
        return True

    return False


def vocmax(propozitii):         # functia de rezolvare

    nr_maxim_vocale = 0         # variabila in care salvam numarul maxim de vocale
    propozitia_dorita = ""      # variabila in care salvam propozitia cu cele mai multe vocale

    for prop in propozitii:     # parcurgem fiecare propozitie
        nr_vocale = 0
        for caracter in prop:
            if vocala(caracter):
                nr_vocale += 1      # numaram cate vocale sunt in ea
        if nr_vocale > nr_maxim_vocale:     # daca e mai mult de cat era maximul, updatam maximul si propozitia dorita
            nr_maxim_vocale = nr_vocale
            propozitia_dorita = prop

    if len(propozitia_dorita) > 0:      # daca am gasit o propozitie cu vocale o afisam
        file_out.write(propozitia_dorita)
    else:
        file_out.write(propozitii[0])       # daca nu, afisam prima propozitie


if __name__ == '__main__':
    file_in = open("vocmaxin.txt", "r")         # declararea fisierelor
    file_out = open("vocmaxout.txt", "w")       # declararea fisierelor out trebuie cu optiunea w (write)

    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam
    try:
        nr_propozitii = int(file_in.readline())     # citim numarul de propozitii
        
        lista_propozitii = []           # punem fiecare propozitie intr-o lista
        for i in range(nr_propozitii):
            propozitie = file_in.readline().strip()
            lista_propozitii.append(propozitie)

        validare(nr_propozitii, lista_propozitii)       # apelul functiei de validare
        vocmax(lista_propozitii)                        # apelul functiei de rezolvare

    except ValueError:
        file_out.write("Datele de intrare nu corespund restrictiilor impuse")
    except IndexError:
        file_out.write("Datele de intrare nu corespund restrictiilor impuse")