Introducció a la Programació¶
Què és programar?¶
Descriure formalment la solució genèrica d’un problema de manera que un ordinador pugui calcular una solució concreta a partir d’unes dades concretes.
Per programar calen habilitats de disciplines com
- matemàtiques:
per tal d’expressar els càlculs en llenguatges formals,
- enginyeria:
per tal de dissenyar components, assemblar-los en sistemes complexos i avaluar alternatives i
- ciència:
per tal d’observar el comportament de sistemes complexos, formular hipòtesis i comprovar les prediccions.
Llenguatges de programació¶
Segons el nivell d’abstracció distingim:
Llenguatges de programació de baix nivell:
Propers al llenguatge màquina que pot executar un ordinador
Llenguatges de programació d’alt nivell. Permeten escriure programes:
Portables, independents de l’arquitectura de l’ordinador que els execurta
Més curts i ràpids d’escriure
Més entenedors, fàcils de llegir i raonar sobre la seva correctesa
Compiladors i intèrprets¶
Compilador: programa que tradueix un programa font (o codi font) a un programa objecte equivalent. Normalment,
el programa font està escrit en un llenguatge d’alt nivell i
el programa objecte en llenguatge màquina
Intèrpret: analitza i executa el programa font, sense traduir-lo abans a llenguatge màquina.
Python¶
L'intèrpret de Python té dos modes de treball:
mode interactiu (shell): per petits experiments
mode script: per programes
Objecte i tipus¶
Tipus numèrics¶
Valors de tipus enter (
int)valors literals: successió de dígits (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) precedits de signe (opcional)
1285 -5284327 0
Valors de tipus real representats en coma flotant (
float)valors literals: successió de dígits amb punt decimal intercalat o escrits en notació científica (adaptada), precedits de signe (opcional)
12.85 -528.4327 0.0 3e-4 # 3 per 10 elevat a -4
Operadors i operands¶
Operadors: símbols que representen operacions o càlculs (suma, producte, …)
Operands: valors sobre els quals actuen els operadors
Operadors aritmètics
Unaris: negatiu (
-), positiu (+). Tenen un operand i s’escriuen abans d’ell (prefix)>>> - 3 -3 >>> + 5 5
Binaris: suma (
+), resta (-), multiplicació (*),/,//,%, potenciació (**). Tenen dos operands i s’escriuen entremig d’ells (infix)>>> 3 + 4 7 >>> 3 - 4 -1 >>> 3 * 4 12 >>> 2 ** 3 8
Quan un operand és de tipus
inti l’altrefloat, Python converteix l’operand de tipusintafloatabans de fer l’operació>>> 7.2 - 5 2.2 >>> 2*4.1 8.2
Divisió real (
/)>>> 9 / 4 2.25
Quocient (
//) i residu (%) de la divisió entera>>> 9 // 4 2 >>> 9 % 4 1
>>> (9 // 4)*4 + (9 % 4) # pel teorema de la divisió entera 9
Expressions¶
Un valor literal és una expressió
>>> 3 3
Un operador unari seguit d’una expressió és una expressió
>>> - 5 -5
Una expressió sequida d’un operador binari seguit d’una expressió és una expressió
>>> 5**2 25
Una expressió tancada entre parèntesis és una expressió
>>> (3 + 4) 7
Avaluació d’expressions¶
Un valor literal s'avalua al valor que representa
Una expressió tancada entre parèntesis s’avalua al valor de l’expressió
Un operador s’avalua al resultat de calcular l’operació sobre els seus operands.
L'ordre d’avaluació d’una expressió depèn de
els parèntesis
la prioritat o precedència dels operadors: elevar, multiplicació i divisió, suma i resta
>>> 3 + 2 ** (3 - 1) * 5 23 >>> 3 + ((2 ** (3 - 1)) * 5) 23
l'associativitat dels operadors amb la mateixa prioritat: d’esquerra a dreta excepte per elevar a una potència
>>> 5 - 3 - 2 0 >>> (5 - 3) - 2 0 >>> 5 - (3 - 2) 4
>>> 2 ** 3 ** 4 2417851639229258349412352 >>> 2 ** (3 ** 4) 2417851639229258349412352 >>> (2 ** 3) ** 4 4096
El resultat d’avaluar una expressió és un objecte amb el valor de l’expressió.
Variables¶
Els noms de variables
Són arbitràriament llargs
Només poden contenir lletres, dígits i guions baixos (
_)Han de començar per una lletra o un guió baix
No poden coincidir amb cap paraula clau. Vegeu-ne la llista
Exemples de noms correctes:
_abc lm1 n_o _ _1a h_3 a94_3jl
Exemples de noms incorrectes:
1xyz ab? b-a if @fgh
Assignació¶
La sintaxi de la sentència d'assignació és
variable = expressió
Després d’executar l’assignació, la
variablees refereix (o fa referència) a l’objecte a què s’ha avaluat l'expressióL’operador d’assignació (
=) no és commutatiuUna variable s'avalua al valor de l'objecte a què es refereix
>>> a = 4 * (5 - 2) >>> a 12
Una variable pot deixar de referir-se a un objecte i passar a referir-se a un altre
>>> a = 8 >>> a 8
Una variable es defineix (o queda definida) a la primera assignació que rep
Estat¶
L'estat és el conjunt de variables i objectes a què es refereixen, en un moment determinat de l’execució d’un programa
Diagrama d’estat: representació gràfica de l’estat
Els objectes als quals no es refereix cap variable es destrueixen.
Sentències¶
El codi font d’un programa s’organitza en sentències
Una assignació és una sentència
>>> a = 3
Una expressió és una sentència
>>> (5 - a)*8 16
Un programa és una seqüència de sentències
Una sentència s’ha d’escriure en una línia (llevat de molt poques excepcions)
Flux d’execució seqüencial¶
El flux d’execució d’un programa és seqüencial: s’executa una sentència rere l’altra en l’ordre en què estan escrites
L’execució d’una assignació produeix un canvi d'estat
L’execució d’una expressió no té cap efecte sobre l’estat
La traça d’execució és l’evolució de l’estat després de l’execució de cada sentència d’un programa
Vegeu una traça d’execució a l'Online Python Tutor.
Assignació múltiple¶
Sintaxi:
variable 1, variable 2, variable 3... = expressió 1, expressió 2, expressió 3...
Primer s'avaluen totes les expressions i després s'assigna el resultat de cada una a la variable que li correspon
Exemple:
>>> a, b = 5 - 2, 3e2 >>> a 3 >>> b 300.0
>>> a, b = b, a # intercanvi de dues variables >>> a 300.0 >>> b 3
Comentaris¶
Els programes els executen els ordinadors, però els llegeixen els programadors.
Els comentaris van adreçats als programadors i el seu a objectiu és facilitar la lectura dels programes
Sintaxi
#>>> # exemple d'expressió >>> 3 # valor literal de tipus int 3
L'intèrpret descarta el text des del coixinet fins al final de la línia
Errors de programació¶
Els errors de programació (bugs) poden ser sintàctics, d’execució o semàntics
Un error sintàctic es produeix en analitzar la sentència i impedeix executar-la
>>> ? + 5 SyntaxError: invalid syntax
>>> 5 * 2) SyntaxError: unmatched ')'
Un error d’execució es produeix durant l’execució de la sentència
La divisió per zero no està definida
>>> 1/0 Traceback (most recent call last): File "<pyshell#4>", line 1, in <module> 1/0 ZeroDivisionError: division by zero
Les variables que apareixen en una expressió han d’estar definides
>>> f Traceback (most recent call last): File "<pyshell#21>", line 1, in <module> f NameError: name 'f' is not defined >>> f = -1 >>> f -1
Un error semàntic es produeix quan el resultat d’un programa no és l’esperat
Càlcul incorrecte del tant per cent d’estudiants aprovats sobre el total
>>> aprovats = 5 >>> total = 10 >>> total/aprovats*100 200.0
Correcció d’errors (debugging)
Exercicis¶
Conversions: 2 i 5.
Física: 3.
Geometria: 4, 5.