2678 - Form Nr

From Bitnami MediaWiki
Revision as of 13:10, 4 May 2023 by Hotico Iulia Denisa (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința[edit | edit source]

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[edit | edit source]

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

Date de ieșire[edit | edit source]

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[edit | edit source]

  • ș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[edit | edit source]

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


Exemplu 2[edit | edit source]

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


Explicație[edit | edit source]

2+52+7=61

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1">

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

</syntaxhighlight>