2680 - Poezie

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

Se citește un număr n, și n versuri dintr-o poezie. Fiecare vers ocupă un rând și conține litere mari și mici ale alfabetului englez, spații, și semne de punctuație . , ! ?. Să se elimine din fiecare vers toate semnele de punctuație, mai puțin cel aflat la final.

Date de intrare

Programul citește de la tastatură numărul n și cele n versuri.

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 vor afișa versurile modificate.. În caz contrar, se va afișa mesajul:" Datele de intrare nu corespund restrictiilor impuse"

Restricții și precizări

  • 1 ≤ n ≤ 15
  • fiecare vers va conține maxim 255 de caractere

Exemplu 1

Intrare
3
A fost!... odata!,
Ca, nicioada,,
O fata? frumoasa... de imparat!
Ieșire
Datele introduse corespund restricțiilor impuse.
A fost odata,
Ca nicioada,
O fata frumoasa de imparat!


Exemplu 2

Intrare
4
1 este numar mic
2 a mai crescut un pic,
3 este ceva mai mare,
4 cifra urmatoare.
Ieșire
Datele de intrare nu corespund restricțiilor impuse.


Rezolvare

# 2680 Poezie
def validare(nr_versuri, lista_versuri):        # functia de validare a datelor de intrare

    if len(lista_versuri) != nr_versuri:
        raise ValueError

    if nr_versuri > 15:
        raise ValueError

    # daca nu sunt valide datele de intrare se va ridica eroarea ValueError

    for vers_neverificat in lista_versuri:
        for caracter in vers_neverificat:
            if caracter.isalpha() is False and caracter not in ".,?! ":
                # trebuie sa fie numar sau litera sau acele semne de punctuatie
                raise ValueError

    print("Datele de intrare corespund restrictiilor impuse")


def poezie(lista_versuri):                          # functia de rezolvare
    for vers_cu_punctuatii in lista_versuri:
        vers_fara_punctuatii = ""               # creem versiunea de vers fara punctuatii
        for caracter in vers_cu_punctuatii:
            if caracter not in ".,?!":          # adaugam caracterul in acest sir doar daca nu e semn de punctuatie
                vers_fara_punctuatii += caracter

        ultimul_caracter = vers_cu_punctuatii[len(vers_cu_punctuatii)-1]
        # ultimul caracter poate fi si semn de punctuatie deci il tratam separat
        if ultimul_caracter in ".,?!":
            vers_fara_punctuatii += ultimul_caracter

        print(vers_fara_punctuatii)     # afisam versul fara semne de punctuatie


if __name__ == '__main__':
    
    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam
    try:
        versuri = []        # lista de versuri

        numar_versuri = int(input("Introduceți numărul de versuri: "))      # citirea numarului de versuri
        for index in range(numar_versuri):
            vers = input(f"Introduceți versul {index + 1}: ").strip()   # citirea fiecarui vers pe rand
            versuri.append(vers)            # adaugarea acestuia in lista

        validare(numar_versuri, versuri)        # apelul functiei de validare
        poezie(versuri)                         # apelul functiei de rezolvare

    except ValueError:
        print("Datele de intrare nu corespund restrictiilor impuse")
    except IndexError:
        print("Datele de intrare nu corespund restrictiilor impuse")