0101 - Sortare Cuvinte

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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.")