0090 - Numar Maxim Vocale: Diferență între versiuni
De la Universitas MediaWiki
Fără descriere a modificării |
|||
Linia 29: | Linia 29: | ||
<br> | <br> | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line="1"> | ||
# 0090 Numar Maxim Vocale | # 0090 Numar Maxim Vocale | ||
def validare(nr_prop, propozitii): | def validare(nr_prop, propozitii): # functia de validare a datelor de intrare | ||
if nr_prop <= 0 or nr_prop >= 100: | if nr_prop <= 0 or nr_prop >= 100: | ||
raise ValueError | raise ValueError | ||
# daca dsatele de intrare nu corespund, ridicam eroarea ValueError | |||
if len(propozitii) != nr_prop: | if len(propozitii) != nr_prop: | ||
raise ValueError | raise ValueError | ||
for prop in propozitii: | for prop in propozitii: # verificam toate propozitiile sa aiba caractere doar litere mici si spatii | ||
if len(prop) > 255: | if len(prop) > 255: | ||
raise ValueError | raise ValueError | ||
for litera in prop: | for litera in prop: | ||
if (litera < 'a' or litera > 'z') and litera != ' ': | if (litera < 'a' or litera > 'z') and litera != ' ': | ||
raise ValueError | raise ValueError | ||
Linia 50: | Linia 49: | ||
def vocala(litera): | def vocala(litera): # functie care verifica daca o litera e vocala | ||
if litera in "aeiou": | if litera in "aeiou": | ||
return True | return True | ||
Linia 57: | Linia 56: | ||
def vocmax(propozitii): | def vocmax(propozitii): # functia de rezolvare | ||
nr_maxim_vocale = 0 | nr_maxim_vocale = 0 # variabila in care salvam numarul maxim de vocale | ||
propozitia_dorita = "" | propozitia_dorita = "" # variabila in care salvam propozitia cu cele mai multe vocale | ||
for prop in propozitii: | for prop in propozitii: # parcurgem fiecare propozitie | ||
nr_vocale = 0 | nr_vocale = 0 | ||
for caracter in prop: | for caracter in prop: | ||
if vocala(caracter): | if vocala(caracter): | ||
nr_vocale += 1 | nr_vocale += 1 # numaram cate vocale sunt in ea | ||
if nr_vocale > nr_maxim_vocale: | if nr_vocale > nr_maxim_vocale: # daca e mai mult de cat era maximul, updatam maximul si propozitia dorita | ||
nr_maxim_vocale = nr_vocale | nr_maxim_vocale = nr_vocale | ||
propozitia_dorita = prop | propozitia_dorita = prop | ||
if len(propozitia_dorita) > 0: | if len(propozitia_dorita) > 0: # daca am gasit o propozitie cu vocale o afisam | ||
file_out.write(propozitia_dorita) | file_out.write(propozitia_dorita) | ||
else: | else: | ||
file_out.write(propozitii[0]) | file_out.write(propozitii[0]) # daca nu, afisam prima propozitie | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
file_in = open("vocmaxin.txt", "r") | file_in = open("vocmaxin.txt", "r") # declararea fisierelor | ||
file_out = open("vocmaxout.txt", "w") | 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: | try: | ||
nr_propozitii = int(file_in.readline()) | nr_propozitii = int(file_in.readline()) # citim numarul de propozitii | ||
lista_propozitii = [] | |||
lista_propozitii = [] # punem fiecare propozitie intr-o lista | |||
for i in range(nr_propozitii): | for i in range(nr_propozitii): | ||
propozitie = file_in.readline().strip() | propozitie = file_in.readline().strip() | ||
lista_propozitii.append(propozitie) | lista_propozitii.append(propozitie) | ||
validare(nr_propozitii, lista_propozitii) | validare(nr_propozitii, lista_propozitii) # apelul functiei de validare | ||
vocmax(lista_propozitii) | vocmax(lista_propozitii) # apelul functiei de rezolvare | ||
except ValueError: | except ValueError: | ||
Linia 96: | Linia 96: | ||
except IndexError: | except IndexError: | ||
file_out.write("Datele de intrare nu corespund restrictiilor impuse") | file_out.write("Datele de intrare nu corespund restrictiilor impuse") | ||
</syntaxhighlight> | </syntaxhighlight> |
Versiunea curentă din 2 mai 2023 19:23
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")