0275 - Perechi Vocale 1: Difference between revisions

From Bitnami MediaWiki
No edit summary
Tag: visualeditor
 
Line 29: Line 29:
<br>
<br>
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line="1">
# 0275 Perechi Vocale 1
# 0275 Perechi Vocale 1
def validare(lista_prop):
def validare(lista_prop):           # functia de validare a datelor de intrare


     for prop in lista_prop:
     for prop in lista_prop:
         for caracter in prop:
         for caracter in prop:
             if 'A' <= caracter <= 'Z':
             if 'A' <= caracter <= 'Z':     # sirul nu poate contine majuscule
                 raise ValueError
                 raise ValueError
    # daca datele de intrare nu corespund, ridicam eroarea ValueError


     for prop in lista_prop:
     for prop in lista_prop:
Line 47: Line 49:




def vocala(litera):
def vocala(litera):             # functie care verifica daca litera e sau nu vocala
     if litera in "aeiou":
     if litera in "aeiou":
         return True
         return True
Line 54: Line 56:




def perechi_vocale_1(lista_prop):
def perechi_vocale_1(lista_prop):       # functia de rezolvare


     lista_perechi_vocale = []
     lista_perechi_vocale = []       # adaugam perechile de vocale intr-o lista


     for prop in lista_prop:
     for prop in lista_prop:
         for index in range(len(prop)-1):
         for index in range(len(prop)-1):
            # parcurgem caracterele din fiecare propozitie 2 cate 2 si verificam daca sunt perechi de vocale
             caracter_curent = prop[index]
             caracter_curent = prop[index]
             caracter_urmator = prop[index+1]
             caracter_urmator = prop[index+1]
             if vocala(caracter_curent) == vocala(caracter_urmator) is True:
             if vocala(caracter_curent) == vocala(caracter_urmator) and vocala(caracter_urmator) is True:
                 lista_perechi_vocale.append(caracter_curent + caracter_urmator)
                 lista_perechi_vocale.append(caracter_curent + caracter_urmator)
 
                # daca sunt vocale adaugam perechea in lista
     lista_perechi_vocale_distinct = list(set(lista_perechi_vocale))
     lista_perechi_vocale_distinct = list(set(lista_perechi_vocale))
    # creem o lista in care fiecare pereche de vocale apare o singura data si o sortam lexicografic
     lista_perechi_vocale_distinct.sort()
     lista_perechi_vocale_distinct.sort()


Line 71: Line 75:


     for pereche in lista_perechi_vocale_distinct:
     for pereche in lista_perechi_vocale_distinct:
        # folosind lista de perechi distincte vedem care e numarul maxim de aparitii a fiecarei perechi
        # in lista principala de perechi vocale
         nr_aparitii = lista_perechi_vocale.count(pereche)
         nr_aparitii = lista_perechi_vocale.count(pereche)
         if nr_aparitii > maxim_aparitii:
         if nr_aparitii > maxim_aparitii:
             maxim_aparitii = nr_aparitii
             maxim_aparitii = nr_aparitii


     lista_perechi_maxime = []
     lista_perechi_maxime = []   # creem o lista pentru perechile de vocale ce apar cel mai des
     for pereche in lista_perechi_vocale_distinct:
     for pereche in lista_perechi_vocale_distinct:
         nr_aparitii = lista_perechi_vocale.count(pereche)
         nr_aparitii = lista_perechi_vocale.count(pereche)
         if nr_aparitii == maxim_aparitii:
         if nr_aparitii == maxim_aparitii:   # daca gasim o pereche cu numar maxim de aparitii o adaugam in lista
             lista_perechi_maxime.append(pereche)
             lista_perechi_maxime.append(pereche)


     if len(lista_perechi_maxime) > 0:
     if len(lista_perechi_maxime) > 0:
         for pereche in lista_perechi_maxime:
         for pereche in lista_perechi_maxime:   # afisam fiecare pereche maxima
             file_out.write(pereche + " ")
             file_out.write(pereche + " ")
     else:
     else:
         print("NU")
         file_out.write("NU")         # daca nu exista afisam mesajul NU
 


if __name__ == '__main__':
if __name__ == '__main__':
     file_in = open("perechivocale1in.txt", "r")
     file_in = open("perechivocale1in.txt", "r")     # declararea fisierelor
     file_out = open("perechivocale1out.txt", "w")
     file_out = open("perechivocale1out.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:
     try:
         lista_propozitii = []
         lista_propozitii = []       # creem o lista cu fiecare propozitie ce urmeaza sa fie citita
         for linie in file_in:
         for linie in file_in:
             propozitie = linie.strip()
             propozitie = linie.strip() # adaugam propozitia din care eliminam whitespace-urile de la final
             lista_propozitii.append(propozitie)
             lista_propozitii.append(propozitie)


         validare(lista_propozitii)
         validare(lista_propozitii)             # apelul functiei de validare
         perechi_vocale_1(lista_propozitii)
         perechi_vocale_1(lista_propozitii)     # apelul functiei de rezolvare


     except ValueError:
     except ValueError:

Latest revision as of 13:34, 4 May 2023

Cerința[edit]

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[edit]

Fişierul de intrare perechivocale1in.txt conţine textul dat, situat pe mai multe linii.

Date de ieșire[edit]

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[edit]

  • cuvintele din text sunt formate din cel mult 40 caractere;

Exemplu 1[edit]

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[edit]

Perechile ea şi oa apar de trei ori. Celelalte perechi de vocale din text apar de mai puţine ori.


Exemplu 2[edit]

perechivocale1in.txt
ANA ARE MERE
perechivocale1out.txt
Datele de intrare nu corespund restricțiilor impuse.


Rezolvare[edit]

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

  1. 0275 Perechi Vocale 1

def validare(lista_prop): # functia de validare a datelor de intrare

   for prop in lista_prop:
       for caracter in prop:
           if 'A' <= caracter <= 'Z':      # sirul nu poate contine majuscule
               raise ValueError
   # daca datele de intrare nu corespund, ridicam eroarea 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): # functie care verifica daca litera e sau nu vocala

   if litera in "aeiou":
       return True
   return False


def perechi_vocale_1(lista_prop): # functia de rezolvare

   lista_perechi_vocale = []       # adaugam perechile de vocale intr-o lista
   for prop in lista_prop:
       for index in range(len(prop)-1):
           # parcurgem caracterele din fiecare propozitie 2 cate 2 si verificam daca sunt perechi de vocale
           caracter_curent = prop[index]
           caracter_urmator = prop[index+1]
           if vocala(caracter_curent) == vocala(caracter_urmator) and vocala(caracter_urmator) is True:
               lista_perechi_vocale.append(caracter_curent + caracter_urmator)
               # daca sunt vocale adaugam perechea in lista
   lista_perechi_vocale_distinct = list(set(lista_perechi_vocale))
   # creem o lista in care fiecare pereche de vocale apare o singura data si o sortam lexicografic
   lista_perechi_vocale_distinct.sort()
   maxim_aparitii = 0
   for pereche in lista_perechi_vocale_distinct:
       # folosind lista de perechi distincte vedem care e numarul maxim de aparitii a fiecarei perechi
       # in lista principala de perechi vocale
       nr_aparitii = lista_perechi_vocale.count(pereche)
       if nr_aparitii > maxim_aparitii:
           maxim_aparitii = nr_aparitii
   lista_perechi_maxime = []   # creem o lista pentru perechile de vocale ce apar cel mai des
   for pereche in lista_perechi_vocale_distinct:
       nr_aparitii = lista_perechi_vocale.count(pereche)
       if nr_aparitii == maxim_aparitii:   # daca gasim o pereche cu numar maxim de aparitii o adaugam in lista
           lista_perechi_maxime.append(pereche)
   if len(lista_perechi_maxime) > 0:
       for pereche in lista_perechi_maxime:    # afisam fiecare pereche maxima
           file_out.write(pereche + " ")
   else:
       file_out.write("NU")         # daca nu exista afisam mesajul NU


if __name__ == '__main__':

   file_in = open("perechivocale1in.txt", "r")      # declararea fisierelor
   file_out = open("perechivocale1out.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:
       lista_propozitii = []       # creem o lista cu fiecare propozitie ce urmeaza sa fie citita
       for linie in file_in:
           propozitie = linie.strip()  # adaugam propozitia din care eliminam whitespace-urile de la final
           lista_propozitii.append(propozitie)
       validare(lista_propozitii)              # apelul functiei de validare
       perechi_vocale_1(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")

</syntaxhighlight>