0089 - Palindrom Propozitie

De la Universitas MediaWiki

Un cuvânt este palindrom dacă se citește la fel în ambele direcții. De exemplu, capac este palindrom.

O propoziție este palindromică dacă prin eliminarea spațiilor și a altor semne de punctuație devine palindrom. De exemplu, propoziția ele fac cafele este palindromică.

Cerinţa

Să se scrie un program care citește mai multe propoziții și determină despre fiecare dacă este palindromică.

Date de intrare

Fișierul de intrare palindromin.txt conține pe prima linie un număr natural n, iar pe următoarele n linii câte o propoziție alcătuita din litere mici ale alfabetului englez și spații.

Date de ieşire

Fișierul de ieșire palindromout.txt va conține n linii. Linia i va conține valoarea 1 dacă pe linia i+1 din fișierul de intrare se află o propoziție palindromică, și 0 în caz contrar.

Restricții și precizări

  • 0<n<100
  • fiecare propoziție va conține cel mult 200 de caractere.

Exemplul 1

palindromin.txt
4
capac
ele fac cafele
ale nu fac cafele
aerare
palindromout.txt
Datele de intrare corespund restrictiilor impuse.
1
1
0
0


Exemplul 2

palindromin.txt
101KKGKKG
palindromout.txt
Datele de intrare nu corespund restrictiilor impuse.


Rezolvare

# functia de validare verifica daca datele de intrare sunt in intervalul specificat
def validare(n_validare, propozitii_validare):
    # verificam daca n este in intervalul 0-100
    if n_validare <= 0 or n_validare > 100:
        raise ValueError  # ridicam o eroare daca n nu este in intervalul 0-100
    for propozitie_validare in propozitii_validare:    # parcurgem lista de propozitii
        # verificam daca lungimea propozitiei este mai mica sau egala cu 200
        if len(propozitie_validare) > 200:
            raise ValueError
        for caracter in propozitie_validare:    # parcurgem fiecare caracter din propozitie
            # verificam daca caracterul este o litera mica a alfabetului englezesc
            if not caracter.islower() and not caracter.isspace():
                raise ValueError
    file_out.write("datele de intrare corespund restrictiilor impuse\n")


# functia is_palindrome verifica daca o propozitie este palindromica
def este_palindrom(propozitie_palindrom):
    # eliminam spatiile din propozitie si verificam daca este palindrom
    propozitie_fara_spatii = propozitie_palindrom.replace(' ', '')
    return propozitie_fara_spatii == propozitie_fara_spatii[::-1]


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

    try:
        # citim numarul de propozitii
        n_main = int(file_in.readline())
        # citim propozitiile
        propozitii_main = [linie.strip() for linie in file_in]
        # validam datele de intrare
        validare(n_main, propozitii_main)
        # pentru fiecare propozitie, verificam daca este palindromica si scriem rezultatul in fisierul de iesire
        for propozitie in propozitii_main:
            file_out.write('1\n' if este_palindrom(propozitie) else '0\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.")