Toată documentația
Toate ghidurile

Învață programare

Python pentru începători

Înveți bazele Python: variabile, liste, bucle, funcții, fișiere și erori, cu exemple pe care le poți rula imediat.

Python este cunoscut pentru că arată aproape ca engleza obișnuită. Are puține simboluri, iar codul se citește ușor. Se folosește la scripturi care automatizează treburi, la analiză de date, la servere web și la inteligență artificială. Pentru un început, e una dintre cele mai prietenoase alegeri.

Ai nevoie de Python instalat, cu opțiunea „Add python.exe to PATH” bifată, așa cum e descris în tutorialul despre mediul de lucru. Salvezi exemplele în fișiere cu extensia .py și le rulezi cu python nume-fisier.py.

În exemplele de aici, textele afișate de program nu au diacritice. Pe unele calculatoare cu Windows, terminalul nu afișează corect diacriticele scrise de Python (apar erori sau semne ciudate). Comentariile din cod pot avea diacritice fără probleme.

Primul program: print

print afișează ceva în terminal. Dacă îi dai mai multe valori separate prin virgulă, le pune pe același rând, cu spațiu între ele. Observă diferența dintre a aduna numere și a lipi texte.

primul.pypython
print('Salut, lume!')
print(2 + 3)
print('2' + '3')
print('Alex', 15, True)

Rezultat

Salut, lume!
5
23
Alex 15 True

Ce urmează după semnul # pe un rând este comentariu: Python îl ignoră, iar tu îți lași notițe.

Variabile, texte și colecții

O variabilă se creează simplu, prin atribuire: nume = valoare. Nu trebuie să spui tipul, Python îl află singur. Cele mai întâlnite tipuri: str (text), int (număr întreg), float (număr cu zecimale), bool (True sau False) și None (nimic).

tipuri.pypython
nume = 'Dana'
varsta = 15
scor = 9.5
activ = True
nimic = None

print(type(nume).__name__, type(varsta).__name__, type(scor).__name__, type(activ).__name__, type(nimic).__name__)

Rezultat

str int float bool NoneType

Un f-string este un text care începe cu litera f chiar înainte de ghilimele și poate conține variabile între acolade. Este cea mai comodă metodă de a construi mesaje. Textele au și metode utile, iar poziția -1 înseamnă ultimul caracter.

texte.pypython
jucator = 'Mihai'
nivel = 7

print(f'Salut, {jucator}! Nivel: {nivel}')
print(len(jucator))
print(jucator.upper())
print('  spatii  '.strip())
print(jucator[0], jucator[-1])
print(f'{3.14159:.2f}')

Rezultat

Salut, Mihai! Nivel: 7
5
MIHAI
spatii
M i
3.14

Lista ține valori în ordine și poate fi modificată. Dicționarul (dict) leagă chei de valori, ca o agendă în care cauți după nume. Tuplul este o listă care nu se mai schimbă. Mulțimea (set) păstrează doar valori unice, fără ordine garantată. Numărătoarea pozițiilor începe de la 0.

colectii.pypython
arme = ['sabie', 'arc', 'topor']
arme.append('scut')
print(len(arme), arme[0], arme[-1])

jucator = {'nume': 'Ioana', 'nivel': 4}
jucator['nivel'] += 1
print(jucator['nume'], jucator['nivel'])
print(jucator.get('clan', 'fara clan'))

coordonate = (10, 20)
x, y = coordonate
print(x, y)

unice = set(['a', 'b', 'a', 'c', 'b'])
print(len(unice), sorted(unice))

Rezultat

4 sabie scut
Ioana 5
fara clan
10 20
3 ['a', 'b', 'c']

Condiții și bucle

Python folosește if, elif (else if) și else. Foarte important: blocul de cod aflat sub un if este marcat prin indentare (patru spații la începutul rândului), nu prin acolade. Pune două puncte la finalul liniei cu if. Pentru comparații folosești ==, <, >, iar pentru combinații and, or, not.

conditii.pypython
def rang(nivel):
    if nivel >= 50:
        return 'Veteran'
    elif nivel >= 10:
        return 'Avansat'
    return 'Incepator'


print(rang(3), rang(12), rang(80))
print(5 == 5, 5 == '5')
print(3 > 2 and 2 > 1, not True)

Rezultat

Incepator Avansat Veteran
True False
True False

for trece prin elementele unei liste (sau ale oricărui lucru care se poate parcurge). range(1, 4) produce numerele 1, 2, 3: ultimul număr nu intră. while repetă cât timp condiția e adevărată. enumerate îți dă și poziția, iar o list comprehension construiește o listă nouă într-o singură linie.

bucle.pypython
for i in range(1, 4):
    print('Pasul', i)

numar = 3
while numar > 0:
    print('Numaratoare:', numar)
    numar -= 1

for arma in ['sabie', 'arc']:
    print('Am', arma)

for index, arma in enumerate(['sabie', 'arc'], start=1):
    print(index, arma)

patrate = [x * x for x in range(1, 6)]
print(patrate)

Rezultat

Pasul 1
Pasul 2
Pasul 3
Numaratoare: 3
Numaratoare: 2
Numaratoare: 1
Am sabie
Am arc
1 sabie
2 arc
[1, 4, 9, 16, 25]

Dacă o buclă while nu se oprește niciodată, apasă Ctrl+C în terminal. Iar dacă primești IndentationError, verifică indentarea: nu amesteca tab-urile cu spațiile.

Funcții

O funcție se definește cu def. Parametrii pot avea valori implicite, iar la apel poți da argumentele după nume, ceea ce face codul mai clar.

functii.pypython
def aduna(a, b):
    return a + b


def salut(nume, formula='Salut'):
    return f'{formula}, {nume}!'


print(aduna(2, 3))
print(salut('Maria'))
print(salut('Andrei', formula='Buna'))

Rezultat

5
Salut, Maria!
Buna, Andrei!

Python vine cu o bibliotecă standard foarte mare, adică module gata făcute pe care le aduci cu import. Poți importa un modul întreg (math) sau doar o piesă din el (from statistics import mean).

module.pypython
import math
from statistics import mean

print(math.sqrt(16))
print(math.floor(7 / 2), 7 // 2)
print(mean([10, 20, 30]))

Rezultat

4.0
3 3
20

Propriile tale fișiere pot fi module. Dacă ai un fișier matematica.py în același folder, îl folosești cu import matematica.

matematica.py și principal.pypython
# matematica.py
def patrat(x):
    return x * x


# principal.py
from matematica import patrat

print(patrat(6))

Module și fișiere text

Scrierea și citirea unui fișier sunt operații obișnuite. Exemplul de mai jos folosește un folder temporar, ca să nu lase nimic în urmă: scrie două rânduri într-un fișier, apoi le citește înapoi. Parametrul encoding indică mereu formatul textului; utf-8 e alegerea sigură.

fisiere.pypython
import tempfile
from pathlib import Path

with tempfile.TemporaryDirectory() as folder:
    cale = Path(folder) / 'scoruri.txt'
    cale.write_text('Ana 50\nBogdan 250\n', encoding='utf-8')

    for linie in cale.read_text(encoding='utf-8').splitlines():
        nume, xp = linie.split()
        print(nume, int(xp))

Rezultat

Ana 50
Bogdan 250

Varianta clasică, cu open, o vei vedea în multe exemple. Instrucțiunea with închide fișierul singură, chiar dacă apare o eroare.

open.pypython
with open('note.txt', 'w', encoding='utf-8') as fisier:
    fisier.write('prima linie\n')

with open('note.txt', 'r', encoding='utf-8') as fisier:
    print(fisier.read())

Excepții: când ceva nu merge

Când Python nu poate continua, ridică o excepție și afișează un mesaj cu locul problemei. Citește-l de jos în sus: ultima linie spune ce s-a întâmplat. Cu try și except tratezi tu situația, în loc să lași programul să se oprească.

exceptii.pypython
def imparte(a, b):
    try:
        return a / b
    except ZeroDivisionError:
        return None


print(imparte(10, 4))
print(imparte(1, 0))

try:
    numar = int('abc')
except ValueError as eroare:
    print('Nu e numar:', eroare)

Rezultat

2.5
None
Nu e numar: invalid literal for int() with base 10: 'abc'

Proiect mic: calculator de nivel

Regula de mai jos este inventată pentru exercițiu, nu este regula vreunui joc anume: 100 XP pentru fiecare nivel. Operatorul // împarte și păstrează doar partea întreagă, iar % dă restul.

nivel.pypython
def nivel_din_xp(xp):
    return xp // 100 + 1


def xp_pana_la_urmator(xp):
    return 100 - xp % 100


def rang(nivel):
    if nivel >= 10:
        return 'Veteran'
    if nivel >= 3:
        return 'Avansat'
    return 'Incepator'


jucatori = {'Ana': 50, 'Bogdan': 250, 'Carmen': 999}

for nume, xp in jucatori.items():
    nivel = nivel_din_xp(xp)
    print(f'{nume}: nivel {nivel} ({rang(nivel)}), {xp_pana_la_urmator(xp)} XP pana la urmatorul')

print('XP total:', sum(jucatori.values()))

Rezultat

Ana: nivel 1 (Incepator), 50 XP pana la urmatorul
Bogdan: nivel 3 (Avansat), 50 XP pana la urmatorul
Carmen: nivel 10 (Veteran), 1 XP pana la urmatorul
XP total: 1299

Programul de mai sus are datele scrise direct în cod. Ca să le ceri de la utilizator, folosești input(), care așteaptă ce scrie omul în terminal și întoarce un text. Nu îl rulăm aici, pentru că așteaptă tastatura. Textul trebuie convertit în număr cu int.

intrebare.pypython
text = input('Câți XP ai? ')
xp = int(text)
print('Nivelul tău este', xp // 100 + 1)

Python se poate extinde cu pachete făcute de alți oameni, instalate cu pip. Ca proiectele să nu se încurce între ele, fiecare își face un mediu virtual: un folder cu propria copie de pachete. Comenzile de mai jos se scriu în terminal, din folderul proiectului. Sunt doar ilustrative, nu trebuie să le rulezi acum.

Terminalpowershell
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install flask
pip freeze > requirements.txt
deactivate
  • python -m venv .venv creează mediul virtual în folderul .venv.
  • Activate.ps1 îl activează în PowerShell; de acum pip instalează pachetele doar acolo.
  • pip install flask instalează un pachet (Flask este un exemplu de bibliotecă pentru servere web).
  • pip freeze > requirements.txt salvează lista de pachete, ca altcineva să poată reface același mediu.
  • deactivate iese din mediu.

Dacă PowerShell refuză să ruleze scriptul de activare, citește secțiunea despre „execution policy” din tutorialul despre mediul de lucru. Nu dezactiva protecțiile pentru tot calculatorul.

Unde se folosește în DominosLand

Serviciul Jarvis AI din DominosLand este scris în Python, cu Flask, un framework mic pentru servere web. Un astfel de serviciu primește cereri de la alte părți ale platformei, le procesează cu funcții și întoarce un răspuns, pornind de la aceleași ingrediente: funcții, dicționare, liste, excepții și module. Detalii despre ce face Jarvis găsești în pagina dedicată.