0457 - Patrat

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 numărul natural n, şi două caractere c şi d. Să se afișeze următorul pătrat, format din n linii şi n coloane: ccc...cc cdd...dc .... cdd...dc ccc...cc

Date de intrare:

Programul citește de la tastatură numărul n şi caracterele c d .

Date de ieşire:

Dacă datele sunt introduse corect, pe ecran se va afișa: "Date de intrare valide.", apoi programul afișează pe ecran pătratul descris mai sus. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Date de intrare invalide".

Restricţii şi precizări:

3 ≤ n ≤ 20 c şi d sunt caractere cu codul ASCII cuprins între 33 şi 126, inclusiv.

Exemplu:

Intrare

4 * #

Ieșire

Date de intrare valide

**** *##* *##* ****

Rezolvare

def validare_date(n: int, c: str, d: str) -> bool:
    if n < 3 or n > 20:
        print("n trebuie sa fie intre 3 si 20")
        return False
    if not (33 <= ord(c) <= 126) or not (33 <= ord(d) <= 126):
        print("c si d trebuie sa fie caractere cu codul ASCII cuprins intre 33 si 126, inclusiv")
        return False
    return True


def construire_patrat(n: int, c: str, d: str) -> str:
    patrat = ""
    for i in range(n):
        if i == 0 or i == n - 1:
            row = c * n
        else:
            row = c + d * (n - 2) + c
        patrat += row + "\n"
    return patrat


def afisare_patrat(patrat):
    print(patrat.strip())


if __name__ == "__main__":
    n = int(input("Introduceti numarul n: "))
    c = input("Introduceti caracterul c: ")
    d = input("Introduceti caracterul d: ")
    if validare_date(n, c, d):
        print("Date de intrare valide")
        patrat = construire_patrat(n, c, d)
        afisare_patrat(patrat)
    else:
        print("Date de intrare invalide")

Explicatie cod:

Funcția validare_date(n, c, d) verifică dacă valorile n, c și d sunt valide pentru a construi un pătrat. Verifică dacă n se încadrează în intervalul [3, 20] și dacă caracterele c și d au coduri ASCII între 33 și 126. Dacă nu se îndeplinesc aceste condiții, afișează mesajele corespunzătoare și returnează False. Altfel, returnează True. Funcția construire_patrat(n, c, d) construiește un șir de caractere care reprezintă un pătrat utilizând numărul n și caracterele c și d. Folosește o buclă for pentru a itera prin rândurile pătratului. Pentru rândurile de pe margine (primul și ultimul rând), se construiește un rând format din caracterul c repetat de n ori. Pentru celelalte rânduri, se construiește un rând format din caracterul c, apoi caracterul d repetat de n-2 ori, și în final caracterul c. Șirurile de caractere ale fiecărui rând sunt concatenate pentru a forma pătratul final. Funcția afisare_patrat(patrat) afișează șirul de caractere patrat, eliminând spațiile dinaintea și de după șir folosind metoda strip(). În blocul if __name__ == '__main__':, se solicită utilizatorului să introducă numărul natural n, caracterul c și caracterul d. Se verifică dacă valorile introduse sunt valide utilizând funcția validare_date(n, c, d). Dacă nu sunt valide, se afișează mesajul "Date de intrare invalide". Dacă valorile introduse sunt valide, se apelează funcția construire_patrat(n, c, d) pentru a construi pătratul și se apelează funcția afisare_patrat(patrat) pentru a-l afișa.