0157 - Doar Vocale

From Bitnami MediaWiki
Revision as of 13:24, 4 May 2023 by Hotico Iulia Denisa (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința[edit]

Se dă un șir de n cuvinte, fiecare format din cel mult 30 caractere. Să se determine numărul cuvintelor care conțin doar vocale.

Date de intrare[edit]

Fişierul de intrare doarvocalein.txt conţine pe prima linie numărul n, iar pe n următoarele n linii câte un cuvânt.

Date de ieșire[edit]

Dacă datele sunt introduse corect, fişierul de ieşire doarvocaleout.txt va conține pe prima linie : " Datele de intrare corespund restrictiilor impuse", apoi pe un rand nou va afișa numărul cuvintelor care conțin doar vocale. În caz contrar, se va afișa mesajul:" Datele de intrare nu corespund restrictiilor impuse"

Restricții și precizări[edit]

  • 0 < n ≤ 1000
  • cuvintele vor conține doar litere mici ale alfabetului englez
  • se consideră vocale caracterele din mulțimea {a,e,i,o,u}

Exemplu 1[edit]

doarvocalein.txt
5
creion
lemn
ou
ea
voce
doarvocaleout.txt
Datele introduse corespund restricțiilor impuse.
2


Explicație[edit]

Sunt 2 cuvinte formate doar din vocale: ou, ea.

Exemplu 2[edit]

doarvocalein.txt
1
Textul descriptiv literar este un text, în versuri sau în proză, în care se prezintă sugestiv un colț/aspect din natură, un obiect sau o persoană, prin intermediul figurilor de stil și a imaginilor artistice.
doarvocaleout.txt
Datele de intrare nu corespund restricțiilor impuse.


Rezolvare[edit]

<syntaxhighlight lang="python" line="1">

  1. 0157 Doar Vocale

def validare(nr_cuv, cuvinte): # functia de validare a datelor de intrare

   if nr_cuv <= 0 or nr_cuv >= 1000:
       raise ValueError
   if len(cuvinte) != nr_cuv:
       raise ValueError
   # daca datele de intrare nu corespund, ridicam eroarea ValueError
   for cuv in cuvinte:
       if len(cuv) > 30:
           raise ValueError
       for litera in cuv:
           if litera < 'a' or litera > 'z':    # trebuie sa fie doar litera mica
               raise ValueError
   file_out.write("Datele de intrare corespund restrictiilor impuse\n")


def vocala(litera): # functie care verifica daca litera este o vocala

   if litera in "aeiou":
       return True
   return False


def doar_vocale(cuvinte):

   nr_cuvinte_doar_vocale = 0           # variabila in care numaram cate cuvinte contin doar vocale
   for cuv in cuvinte:
       are_consoane = False    # presupunem ca fiecare cuvant nu are consoane
       for litera in cuv:
           if vocala(litera) is False:
               are_consoane = True         # daca vreo litera din cuvant nu e vocala atunci are consoane
               break
       if are_consoane is False:           # daca nu are consoane, numaram acel cuvant
           nr_cuvinte_doar_vocale += 1
   file_out.write(str(nr_cuvinte_doar_vocale))     # afisarea


if __name__ == '__main__':

   file_in = open("doarvocalein.txt", "r")             # declararea fisierelor
   file_out = open("doarvocaleout.txt", "w")           # fisierul out trebuie declarat cu optiunea "w" (write)
   # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam
   try:
       nr_cuvinte = int(file_in.readline())        # citim numarul de cuvinte
       lista_cuvinte = []                          # adaugam cuvintele intr-o lista
       for i in range(nr_cuvinte):
           cuvant = file_in.readline().strip()
           # fiecare cuvant il "curatam" de \n sau spatii de la final ce pot aparea in fisier apoi il adaugam in lista
           lista_cuvinte.append(cuvant)
       validare(nr_cuvinte, lista_cuvinte)         # apelul functiei de validare
       doar_vocale(lista_cuvinte)                  # 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")
       

</syntaxhighlight>