0101 - Sortare Cuvinte

De la Universitas MediaWiki

Cerinţa

Să se scrie un program care citește o propoziţie şi afişează cuvintele din propoziţie ordonate alfabetic.

Date de intrare

Fișierul de intrare sortcuvin.txt conține pe prima linie o propoziție alcătuită din litere mici ale alfabetului englez și spații.

Date de ieşire

Fișierul de ieșire sortcuvout va conține cuvintele din propoziție, ordonate alfabetic, fiecare pe câte o linie.

Restricții și precizări

  • propoziția va conține cel mult 250 de caractere;
  • fiecare cuvânt din propoziție are cel mult 20 litere

Exemplul 1

sortcuvin.txt
dreptunghiul este un paralelogram cu un unghi drept
sortcuvout.txt
Datele de intrare corespund restrictiilor impuse.
cu
drept
dreptunghiul
este
paralelogram
un
un
unghi


Exemplul 2

sortcuvin.txt
acestcuvantaremaimulteliteredecatestepermis
sortcuvout.txt
Datele de intrare nu corespund restrictiilor impuse.


Rezolvare

# functia de validare verifica daca datele de intrare sunt in intervalul specificat
def validare(propozitie_validare):
    # verificam daca lungimea propozitiei este in intervalul 0-250
    if len(propozitie_validare) <= 0 or len(propozitie_validare) > 250:
        raise ValueError  # ridicam o eroare daca lungimea propozitiei nu este in intervalul 0-250
    for cuvant_validare in propozitie_validare.split():    # parcurgem lista de cuvinte
        # verificam daca lungimea cuvantului este mai mica sau egala cu 20
        if len(cuvant_validare) > 20:
            raise ValueError
        # verificam daca cuvantul contine doar litere mici ale alfabetului englezesc
        if not cuvant_validare.islower():
            raise ValueError
        # verificam daca cuvantul contine numere
        if any(char.isdigit() for char in cuvant_validare):
            raise ValueError
    file_out.write("Datele de intrare corespund restrictiilor impuse.\n")


# functia sort_words sorteaza cuvintele in functie de ordinea alfabetica
def sort_words(cuvinte):
    # sortam cuvintele in functie de ordinea alfabetica
    cuvinte.sort()
    return cuvinte


if __name__ == '__main__':
    file_in = open("sortcuvin.txt", "r")
    file_out = open("sortcuvout.txt", "w")

    try:
        # citim propozitia
        propozitie_main = file_in.readline().strip()
        # validam datele de intrare
        validare(propozitie_main)
        # sortam cuvintele in functie de ordinea alfabetica
        cuvinte_sortate = sort_words(propozitie_main.split())
        # scriem cuvintele sortate in fisierul de iesire
        for cuvant in cuvinte_sortate:
            file_out.write(cuvant + '\n')

    # daca datele de intrare nu sunt valide, afisam un mesaj de eroare
    except ValueError:
        file_out.write("Datele de intrare nu corespund restrictiilor impuse.")
    # daca datele de intrare sunt incomplete, afisam un mesaj de eroare
    except IndexError:
        file_out.write("Datele de intrare nu corespund restrictiilor impuse.")