2678 - Form Nr: Difference between revisions
No edit summary |
|||
Line 25: | Line 25: | ||
2+52+7=61 | 2+52+7=61 | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line="1"> | ||
# 2678 Form Nr | # 2678 Form Nr | ||
def validare(sir_caractere): | def validare(sir_caractere): # functia de validare a datelor de intrare | ||
if len(sir_caractere) > 255: | if len(sir_caractere) > 255: | ||
Line 37: | Line 37: | ||
nr_cifre += 1 | nr_cifre += 1 | ||
if nr_cifre == 0: | if nr_cifre == 0: # sirul trenuie sa contina cifre pentru a se putea rezolva problema | ||
raise ValueError | raise ValueError | ||
# daca nu sunt valide datele de intrare se va ridica eroarea ValueError | |||
Line 51: | Line 51: | ||
def form_nr(sir_caracterte): | def form_nr(sir_caracterte): | ||
lista_numere = [] | lista_numere = [] # vom pune numerele gasite intr-o lista | ||
index = 0 | index = 0 | ||
while index < len(sir_caracterte): | while index < len(sir_caracterte): # parcurgem sirul de caractere | ||
numar = "" | numar = "" # salvam numarul gasit ca sir de caractere | ||
while cifra(sir_caracterte[index]): | while cifra(sir_caracterte[index]): # cat timp elementul parcurs este o cifra o adaugam la numarul creat | ||
numar += sir_caracterte[index] | numar += sir_caracterte[index] | ||
index += 1 | index += 1 | ||
if len(numar) > 0: | if len(numar) > 0: # daca am reusit sa creem un numar (am gasit cifre consecutive) | ||
lista_numere.append(int(numar)) | lista_numere.append(int(numar)) # il adaugam in lista ca int | ||
index += 1 | index += 1 | ||
suma = 0 | suma = 0 | ||
for numar in lista_numere: | for numar in lista_numere: | ||
suma += numar | suma += numar # calculam suma numerelor din lista | ||
print(suma) | print("Datele de intrare corespund restrictiilor impuse") | ||
print(suma) # afisarea rezultatului | |||
if __name__ == '__main__': | if __name__ == '__main__': | ||
# din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam | |||
try: | try: | ||
cuvant = input("Introduceți șirul de caractere: ") | cuvant = input("Introduceți șirul de caractere: ") # citirea sirului de caractere | ||
validare(cuvant) | validare(cuvant) # apelul functiei de validare | ||
form_nr(cuvant) | form_nr(cuvant) # apelul functiei de rezolvare | ||
except ValueError: | except ValueError: | ||
Line 82: | Line 84: | ||
except IndexError: | except IndexError: | ||
print("Datele de intrare nu corespund restrictiilor impuse") | print("Datele de intrare nu corespund restrictiilor impuse") | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 13:10, 4 May 2023
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">
- 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>