2678 - Form Nr

De la Universitas MediaWiki

Cerința

Se dă un șir de caractere ce conține litere, cifre, semne de punctuație, spații și alte simboluri ASCII. Cifrele din șir formează numere, scrise în baza 10. Să se determine suma acestor numere.

Date de intrare

Programul citește de la tastatură șirul dat.

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

Restricții și precizări

  • șirul conține maxim 255 de caractere;
  • cifrele sunt de la 0 la 9.
  • rezultatul sumei nu depășește 2.000.000.000

Exemplu 1

Intrare
an2a are 52 de creioane si cu 7 mai multe pixuri.
Ieșire
Datele introduse corespund restricțiilor impuse.
61


Exemplu 2

Intrare
Alina a predat tema
Ieșire
Datele de intrare nu corespund restricțiilor impuse.


Explicație

2+52+7=61

Rezolvare

# 2678 Form Nr
def validare(sir_caractere):        # functia de validare a datelor de intrare

    if len(sir_caractere) > 255:
        raise ValueError

    nr_cifre = 0
    for caracter in sir_caractere:
        if '0' <= caracter <= '9':
            nr_cifre += 1

    if nr_cifre == 0:           # sirul trenuie sa contina cifre pentru a se putea rezolva problema
        raise ValueError

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


def cifra(caracter):
    if '0' <= caracter <= '9':
        return True

    return False


def form_nr(sir_caracterte):
    lista_numere = []       # vom pune numerele gasite intr-o lista
    index = 0
    while index < len(sir_caracterte):      # parcurgem sirul de caractere
        numar = ""                          # salvam numarul gasit ca sir de caractere
        while cifra(sir_caracterte[index]):     # cat timp elementul parcurs este o cifra o adaugam la numarul creat
            numar += sir_caracterte[index]
            index += 1

        if len(numar) > 0:                  # daca am reusit sa creem un numar (am gasit cifre consecutive)
            lista_numere.append(int(numar))     # il adaugam in lista ca int
        index += 1

    suma = 0
    for numar in lista_numere:
        suma += numar           # calculam suma numerelor din lista

    print("Datele de intrare corespund restrictiilor impuse")
    print(suma)                 # afisarea rezultatului


if __name__ == '__main__':

    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam
    try:
        cuvant = input("Introduceți șirul de caractere: ")      # citirea sirului de caractere

        validare(cuvant)            # apelul functiei de validare
        form_nr(cuvant)             # apelul functiei de rezolvare

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