Î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.
print('Salut, lume!')
print(2 + 3)
print('2' + '3')
print('Alex', 15, True)
Rezultat
Salut, lume!
5
23
Alex 15 TrueCe 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).
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 NoneTypeUn 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.
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.14Lista ț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.
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.
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 Falsefor 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.
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.
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).
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
20Propriile 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
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ă.
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 250Varianta clasică, cu open, o vei vedea în multe exemple. Instrucțiunea with închide fișierul singură, chiar dacă apare o eroare.
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ă.
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.
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: 1299Programul 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.
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.
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ă.