.. -*- rst -*- Introduction ============ 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. El llenguatge de programació Python ----------------------------------- - `Python `_ és un llenguatge de programació d'alt nivell (http://python.org/). - Els ordinadors només poden executar programes escrits en `llenguatges de baix nivell `_. - Avantatges dels programes escrits en llenguatges de programació d'alt nivell: - S'escriuen més de pressa, són més curts, més fàcils de llegir i es més probable que siguin correctes. - Són portables. Compiladors i intèrprets ------------------------ - `Intèrpret `_. - `Compilador `_, programa (o codi) font, programa objecte, programa executable. - Combinació compilador-intèrpret, *byte-code* (codi intermedi), màquina virtual. Python i Java. L'intèrpret de Python --------------------- - Python és un `llenguatge interpretat `_ - Dos modes de treball: *shell mode* i *script mode*. - *Script mode*: per programes. - *Shell mode*: per petits experiments. Què és debugging? ----------------- - *Bugs*, `errors de programació `__. Poden ser errors lèxics, sintàctics, d'execució i lògics (semàntics). - Error lèxic (*tokens*): .. code-block:: python3 >>> ? + 5 SyntaxError: invalid syntax - Error sintàctic: >>> 5 * 2) SyntaxError: unmatched ')' - Errors d'execució: >>> 3 + 'hola' Traceback (most recent call last): File "", line 1, in 3 + 'hola' TypeError: unsupported operand type(s) for +: 'int' and 'str' >>> 1/0 Traceback (most recent call last): File "", line 1, in 1/0 ZeroDivisionError: division by zero - Error lògic en calcular el tant per cent d'estudiants aprovats sobre el total: >>> aprovats = 5 >>> total = 10 >>> total/aprovats*100 200.0 - `Debugging `_: correcció d'errors. - Vegeu algunes :doc:`pautes per evitar cometre errors i corregir-los `. Valors i tipus -------------- - Valors de tipus enter (:py:class:`int`). .. code-block:: python3 1285 -5284327 0 Nombres sense coma ni punt decimal. - Valors de tipus real representats en `coma flotant `__ (:py:class:`float`). .. code-block:: python3 12.85 -528.4327 0.0 3e-4 Nombres amb punt decimal o escrits en `notació científica `__ (-1.7e3). - Valors de tipus *string* o `cadena `__ (:py:class:`str`). >>> 'Hola!' 'Hola!' >>> "Digues com estàs." 'Digues com estàs.' >>> """I les teves amistats, com van?""" 'I les teves\namistats,\n com van?' - Funció :py:class:`type`. >>> type(-5284327) >>> type(3e-4) >>> type('Hola') - El tipus s'ha deduït de la sintaxi del valor. Variables --------- - Les *variables* són noms que es refereixen a objectes. - Les dades en Python es representen mitjançant objectes. - Un *objecte* té associats un identificador, un tipus i un valor. Noms de variables i paraules clau --------------------------------- - Arbitràriament llargs i formats per lletres, dígits i ``_`` començant per lletra. - No són noms de variables vàlids les :ref:`paraules clau ` :: False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield - Exemples de noms correctes: .. code-block:: python3 _abc lm1 n_o _ _1a h_3 a94_3jl - Exemples de noms incorrectes: .. code-block:: python3 1xyz ab? b-a k+l @fgh Assignment sentence ------------------- - Sentència d'assignació: ``variable = valor``. A partir d'aquest moment la ``variable`` **es refereix** (o fa referència) un objecte amb valor ``valor``. - L'operador d'assignació (``=``) no és commutatiu. - `Diagrama d'estat `_. - Les variables poden canviar l'objecte al que es refereixen. - Els objectes als quals no es refereix cap variable es destrueixen. :Author: Antoni Soto i Riera :Date: 4/10/2010 :Copyright: `Reconeixement-Compartir Igual 3.0 Espanya de Creative Commons `_ Assignacions múltiples ---------------------- - Una variable pot canviar el valor al que es refereix: .. sourcecode:: python a = 3 a = 7 - Sentència d'assignació (=) vs igualtat (==): - La igualtat és simètrica i l'assignació no: .. sourcecode:: python a = 7 7 = a - La igualtat matemàtica sempre és certa, l'assignació pot fer que dues variables es refereixin al mateix valor, però pot canviar: .. sourcecode:: python a = 5 b = a # a i b es refereixen a 5: són iguals a = 9 # ara ja no Actualitzant variables ---------------------- - El nou valor de la variable depèn de l'anterior: .. sourcecode:: python x = x + 1 - És un error actualitzar una variable que no s'ha inicialitzat: .. sourcecode:: python x = 0 x = x + 1 - Incrementar (sumar 1) i decrementar (restar 1) .. sourcecode:: python x = 0 x = x + 1 Sentències ---------- - L'assignació i les expressions són sentències. - L'assignació produeix un canvi en l'entorn: modifica variables. Les expressions no. Veieu `Online Python Tutor `_. - Un programa és una seqüència de sentències (composició seqüencial). Avaluació d'expressions ----------------------- - Expressió: combinació de valors, variables i operadors. >>> a = 5.7 >>> a - 3**2 -3.3 - Avaluació d'una expressió: realitzar els càlculs indicats pels operadors a partir dels valors i dels valors de les variables que hi apareixen. - Un valor és una expressió i una variable també. >>> 3 3 >>> a = 5.7 >>> a 5.7 - Una variable ha d'estar inicialitzada per poder participar en una expressió. >>> b Traceback (most recent call last): File "", line 1, in b NameError: name 'b' is not defined >>> b = -1 >>> b -1 - Avaluar una expressió no és el mateix que escriure el seu valor. >>> a = 5.7 >>> a - 3**2 -3.3 >>> print(a - 3**2) -3.3 - L'avaluació d'una expressió és una sentència vàlida, però en un *script* no té cap efecte. Operadors i operands -------------------- - Operadors: símbols que representen càlculs (suma, producte, ...). - Operands: valors sobre els que actuen els operadors. - Exemples: +, \*, /, \*\*, %, (, ). - Divisió entera: //. .. modulus operator Ordre de les operacions ----------------------- - Prioritat: parèntesis, elevar, multiplicació i divisió, suma i resta. >>> 3 + 5 * 2 ** (3 - 1) 23 >>> 3 + (5 * (2 ** (3 - 1))) 23 - Associativitat: 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 - Vegeu :ref:`Evaluation order ` al Manual de Referència de Python. Operacions sobre *strings* -------------------------- - Exemples d'operacions il·legals. .. code-block:: python3 'a' / 'b' 'a' - 'b' 'a' ** 3 - Concatenació (+) i repetició (*). >>> c = 'Hola' + 'Joan' >>> c 'HolaJoan' >>> d = '-' * 5 >>> d '-----' Composition ----------- Program = Composition of simple sentences written one after the other (*sequential order*) and executed in that same order. Assignació múltiple ------------------- - Exemple: >>> a, b = 3, 'xyz' >>> a 3 >>> b 'xyz' Comentaris ---------- - Els programes els executen els ordinadors però els llegeixen els humans. - Els comentaris adreçats als humans tenen com a objectiu facilitar la lectura dels programes. - Sintaxi ``#``. >>> # 3 >>> 3 3 .. Entrada ------- .. keyboard input .. raw_input .. input .. prompt - Com llegir dades del l'entrada (canal estàndard d'entrada)? - Funció ``input(prompt)``: retorna un *string* que conté literalment la següent línia de l'entrada. - El *prompt* és un *string*. .. activecode:: entrada :nocodelens: a = input('Escriu quelcom: ') print(a) print(type(a)) Sortida ------- - Funció :py:func:`print`. :Author: Antoni Soto i Riera :Date: 4/10/2010 :Copyright: `Reconeixement-Compartir Igual 3.0 Espanya de Creative Commons `_ Assignacions múltiples ---------------------- - Una variable pot canviar el valor al que es refereix: .. sourcecode:: python a = 3 a = 7 - Sentència d'assignació (=) vs igualtat (==): - La igualtat és simètrica i l'assignació no: .. sourcecode:: python a = 7 7 = a - La igualtat matemàtica sempre és certa, l'assignació pot fer que dues variables es refereixin al mateix valor, però pot canviar: .. sourcecode:: python a = 5 b = a # a i b es refereixen a 5: són iguals a = 9 # ara ja no Actualitzant variables ---------------------- - El nou valor de la variable depèn de l'anterior: .. sourcecode:: python x = x + 1 - És un error actualitzar una variable que no s'ha inicialitzat: .. sourcecode:: python x = 0 x = x + 1 - Incrementar (sumar 1) i decrementar (restar 1) .. sourcecode:: python x = 0 x = x + 1 Exercicis --------- - :doc:`topics/intr/Conversions/index`: 2 i 5. - :doc:`topics/intr/Física/index`: 3. - :doc:`topics/intr/Geometria/index`: 4, 5. - :doc:`topics/intr/Percentatge/index`