Python pentru începători

Citirea datelor în Python cu input și int

Învață să citești un întreg în Python cu input și int, să tratezi ValueError și să verifici limitele. Exemple pentru texte valide și intrări greșite.

Citirea datelor și validarea lor sunt operații diferite. Funcția input citește o linie ca text, iar int încearcă să transforme textul într-un întreg. Un text poate să nu descrie un întreg deloc; un întreg convertit corect poate totuși să fie în afara limitelor cerute. Un program robust tratează separat aceste două situații.

Ce primește și ce afișează programul

Citim o singură linie de cel mult 100 de caractere. Încercăm interpretarea ei ca întreg folosind regulile standard ale lui int. Dacă obținem o valoare din intervalul 0..100 inclusiv, afișăm dublul ei. În orice alt caz afișăm exact INVALID. Presupunem că linia există, deci lipsa completă a intrării nu face parte din contract.

Exemplu explicat pas cu pas

Pentru textul „ 42 ”, conversia acceptă spațiile exterioare și produce întregul 42. Valoarea este în interval, deci răspunsul este 84. Pentru „4.2”, int nu poate construi un întreg și semnalează ValueError. Pentru „142”, conversia reușește, dar verificarea domeniului eșuează. Ultimele două intrări au același mesaj final, din motive diferite.

42 este valid și produce 84; 4.2 eșuează la conversie, iar 142 depășește limita.42 este valid și produce 84; 4.2 eșuează la conversie, iar 142 depășește limita.Mărește schema ↗

Cum scriem soluția

Punem numai conversia în blocul try. O excepție este un semnal că operația nu s-a putut termina normal; aici ValueError descrie un text nepotrivit conversiei. Blocul except ValueError afișează mesajul de eroare. Ramura else a lui try se execută numai dacă conversia a reușit. În ea verificăm 0 <= numar <= 100 și alegem între calcul și mesajul INVALID.

De ce obținem rezultatul cerut

Dacă se produce ValueError, programul nu ajunge la calculul care ar folosi un număr inexistent. Dacă nu se produce, variabila numar conține un întreg, iar condiția de interval separă exact valorile admise de cele interzise. Cele două limite sunt incluse deoarece folosim <=. Fiecare traseu execută un singur print, deci ieșirea are exact o linie.

Cost și limite

Lungimea textului este limitată la 100, iar numărul acceptat este cel mult 100. Timpul de citire și conversie depinde de lungimea textului; memoria necesară rămâne mică. Nu folosim eval: citirea unei valori numerice nu trebuie să execute expresii Python primite din intrare.

Greșeli pe care le poți verifica

Nu transforma mai întâi prin float și apoi prin int pentru a „repara” textul 4.2: ai accepta o intrare pe care contractul o respinge și ai pierde partea fracționară. Nu folosi except fără numele excepției când vrei să tratezi doar conversia, deoarece ai putea ascunde alte greșeli. Mesajele de ghidare introduse în input("...") ar apărea și ele la ieșire; aici nu sunt cerute.

Program complet Python 3

text = input()
try:
    numar = int(text)
except ValueError:
    print("INVALID")
else:
    if 0 <= numar <= 100:
        print(2 * numar)
    else:
        print("INVALID")

Exersează

Verifică intrările 0 și 100: trebuie să producă 0 și 200. Pentru -1, 101, abc și linia goală, rezultatul este INVALID. Textul +7 este acceptat de int și produce 14. Explică pentru fiecare test dacă eșuează conversia sau verificarea intervalului, nu doar dacă mesajul final este corect.

Continuă parcursul

Pentru diferența dintre text și număr, recitește Variabile și numere în Python: int, float și conversii. Pentru alegerea ramurilor de execuție, continuă cu Condiții în Python: if, elif și else. Pentru repetarea unor operații în funcție de date, vezi Bucla while în Python: condiție și terminare.

Pentru definițiile limbajului, consultă documentația oficială Python. Exemplele și explicațiile de aici sunt originale, construite pentru acest parcurs.

Întrebări frecvente

Input elimină toate spațiile din text?

Nu. Elimină terminatorul liniei, nu toate spațiile. În exemplu, int este cel care acceptă spațiile exterioare ale numărului.

De ce 3.0 este respins ca text?

Int așteaptă o reprezentare textuală de întreg, iar punctul zecimal nu face parte din acea formă.

ValueError înseamnă că numărul depășește 100?

Nu. Limita de 100 aparține cerinței și este verificată separat; ValueError apare când textul nu poate fi convertit prin int.

Un pas mai departe

Autentifică-te pentru a păstra progresul în cont.

Exersează cu o problemă →