1423 - Vocale Vector

De la Universitas MediaWiki

Cerința

Se citesc de la tastatura n elemente ale unui vector alcatuit exclusiv din litere mici ale alfabetului englez. Rearanjati vectorul astfel incat vocalele sa fie plasate pe primele pozitii. Vocalele (si consoanele) isi vor pastra ordinea initiala, de la stanga la dreapta.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n litere mici, separate prin spații.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: " Datele de intrare corespund restrictiilor impuse", apoi pe un rand nou va afișa componentele vectorului rearanjat, separate prin spatii. În caz contrar, se va afișa mesajul:" Datele de intrare nu corespund restrictiilor impuse"

Restricții și precizări

1 ≤ n ≤ 4000
Codurile ASCII ale vocalelor sunt:
  • a= 97
  • e= 101
  • i= 105
  • o= 111
  • u= 117

Exemplu 1

Intrare
12
b a e d x y p i m f i c
Ieșire
Datele introduse corespund restricțiilor impuse.
a e i i b d x y p m f c


Exemplu 2

Intrare
5
h t a k e
Ieșire
a e h t k

Exemplu 3

Intrare
4
B A I A
Ieșire
Datele de intrare nu corespund restricțiilor impuse.

Explicație

Ex. 1: Se iau toate vocalele (a, e, i, i) si se plasează pe primele locuri, în ordinea inițiala, iar consoanele rămase (b, d, x, y, p, m, f, c) se vor așeza după ele, tot în ordinea inițială.
Ex. 2: Se iau toate vocalele (a, e) și se plasează pe primele locuri, în ordinea inițială, iar consoanele rămase (h, t, k) se vor așeză după ele, tot în ordinea inițială.


Rezolvare

# 1423 VocaleVector

def validare(nr_elemente, sir_litere):          # functia de verificare a datelor de intrare
    # in cazul in care nu este respectata vreo restrictie, vom marca acest lucru prin eroarea ValueError
    if nr_elemente > 4000 or nr_elemente < 0:
        raise ValueError

    for litera in sir_litere:
        if litera < 'a' or litera > 'z':
            raise ValueError

    if nr_elemente != len(sir_litere):
        raise ValueError

    print("Datele de intrare corespund restrictiilor impuse")


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


def vocalevector(sir_litere):
    sir_vocale = []                 # impartim sirul in 2 siruri, unul cu vocale si unul cu consoane
    sir_consoane = []               # astfel se va pastra ordinea
    for litera in sir_litere:
        if vocala(litera):
            sir_vocale.append(litera)   # daca e vocala adaugam litera in sirul de vocale
        else:
            sir_consoane.append(litera)     # altfel, adaugam in sirul de consoane

    for litera in sir_vocale:       # intai afisam vocalele
        print(litera, end=" ")

    for litera in sir_consoane:     # apoi consoanele
        print(litera, end=" ")


if __name__ == '__main__':

    try:                            # in cazul in care apare vreo eroare, aceasta se datoreaza datelor de intrare
        n = int(input("Introduceti numarul n: "))       # citirea lui n si a sirului
        sir = input("Introduceti sirul: ")

        sir = sir.split()             # transformam sirul intr-o lista formata din literele separate printr-un spatiu

        validare(n, sir)               # apelam functia de validare

        vocalevector(sir)               # apelam functia de rezolvare

    # ne asteptam la 2 tipuri de erori cauzate de datele de intrare, le tratam corespunzator
    except ValueError:
        print("Datele de intrare nu corespund restrictiilor impuse")
    except IndexError:
        print("Datele de intrare nu corespund restrictiilor impuse")