Tema 1: Introducció a la programació

Objectius i argument

En una revolada cal que l'estudiant entri per la via directa al món de la programació. Per tant cal introduïr aquest en els conceptes més bàsics, sense aprofundir excessivament, de manera que tingui un primer contacte amb la programació. No es busca una comprensió sòlida sinó més aviat que, des de l'experimentació, adquireixi una sèrie d'eines que després li permetin avançar més depressa.

Resultats d'aprenentatge

  • L'estudiant ha de ser capaç de resoldre petits problemes de programació i implementar les solucions usant l'intèrpret interactivament o en mode comanda. Les solucions a aquests problemes poden contenir variables, expressions, entrada, sortida i funcions.
  • L'estudiant ha d'estar familiaritzat amb l'entorn de treball en el laboratori i ser capaç d'implementar les solucions als problemes que s'esmenten en el punt anterior, provar-les i depurar-les mínimament de manera autònoma.
  • L'estudiant ha de comprendre els conceptes clau del tema. Això comporta saber-los identificar (si s'escau) i comprendre lectures i reflexions en que aquests conceptes hi participin.

Conceptes clau

Computador, programa, algoritme, error de programació (bug), llenguatge de programació, portabilitat, intèrpret, shell, script, debugació, errors sintaxi, errors execució, errors semàntics, valor, variable, tipus, assignació, entrada, sortida, lectura, escriptura, sentència, mot reservat, expressió, operador, operand, precedència, avaluació, composició de sentències, funció, capçalera, cos, crida, paràmetres, valor de retorn, localitat.

Referència principal

Referències complementàries

  • Zeller, "Python programming". Capítol 2. Writing Simple Programs (apartats 2.1 fins 2.5)
    Cobreix aproximadament els mateixos temes que la referència principal. Els explica d'una manera diferent i us pot servir com a reforç per a la referència principal.
  • Introduction to Programming using Python (capítol 1, capítol 2, capítol 3 excepte 3.3 i 3.4, capítol 4 excepte 4.4, capítol 5).
    Com en el cas anterior, cobreix aproximadament els mateixos conceptes que la referència principal, tot i que amb una aproximació diferent. Útil com a reforç de la referència principal.
  • The making of Python. A conversation with Guido van Rossum.
    Una entrevista a Guido van Rossum, el principal artífex del llenguatge Python, en que reflexiona sobre la història d'aquest llenguatge de programació. Una lectura interessant per a aquelles persones que volen saber més. Té un nivell tècnic.

Exercicis obligatoris de teoria

EOT 1.1

Escriviu una frase en Català amb una semàntica comprensible però una sintàxi incorrecta. Escriviu-ne una altra en la que la sintaxi sigui correcte però contingui errors semàntics.

EOT 1.2

Anoteu què pasa quan executem la següent sentència print:

>>> print n = 7

I què passa amb la següent?

>>> print 7 + 5

I per aquesta altra?

>>> print 5.2, "this", 4 - 2, "that", 5/2.0

EOT 1.3

Determineu la norma general que explica el que es pot escriure darrera de la sentència print. Què retorna la sentència print?

EOT 1.4

Considereu la frase: Molt treballar i poc jugar fan de Jack un avorrit. Emmagatzemeu cada paraula en una variable diferent i, després, escriviu per pantalla la frase en una sola línia usant print.

EOT 1.5

Afegiu parèntesis a l'expressió 6 * 1 - 2 de manera que el valor canvii de 4 a -6.

EOT 1.6

Essent a = "Hola", b = "Món", c = 87 i d = 2.33145, obteniu les següents cadenes:

  • "-Hola-Món-" (usant a i b)
  • "El resultat és: 87" (usant c)
  • "El resultat és: 87 minuts (5220 segons)" (usant c les dues vegades)
  • "La temperatura és: 2.3" (usant d)
  • "Hola Món" (usant a i b)

EOT 1.7

Usant un editor de textos, genereu un script Python que escrigui per pantalla "Hola Món".

EOT 1.8

Usant un editor de textos, genereu un script Python que escrigui la suma de 8 + 7.

EOT 1.9

Usant un editor de textos, genereu un script Python que llegeixi dos nombres i escrigui la suma i la mitjana.

EOT 1.10

Usant un editor de textos, genereu un script Pyhton que llegeixi el nom i l'edat d'una persona i escrigui un missatge amistós.

EOT 1.11

Usant un editor de textos, genereu un script Python que llegeixi un nombre enter i el divideixi per dos. Observeu què passa si el nombre és imparell.

Exercicis obligatoris de laboratori

EOL 1.1

Ompliu el codi  de la funció per tal que imprimeixi la frase de la variable s n vegades:

def digues_n_vegades(s, n):
<fill in your code here>

Guarda la funció en un fitxer que es digui test_importar.py. Ara en una consola, en el mateix directori on heu guardat el fixer, inicieu el Python i proveu:

>>> from test_importar import *
>>> digues_n_vegades('Spam', 7)
SpamSpamSpamSpamSpamSpamSpam

EOL 1.2

En Python hi ha una funció que ens permet saber el nombre de caràcters en una cadena de text : len. Si executem len('programar') it returns 9.

Escriu una funció que es digui justificat_a_la_dreta que tingui com a paràmetre una cadena (s) i imprimeix per pantalla tants espais com faci falta davant la cadena per que l'últim literal estigui a la columna 70 del terminal.

>>> justificat_a_la_dreta('hola')
hola
>>> justificat_a_la_dreta('emacs')
emacs

EOL 1.3

Creem un fitxer que direm treslinies.py:

def nova_linia():
print

def tres_linies():
nova_linia()
nova_linia()
nova_linia()

Creeu un nou fitxer amb una funció que es digui nou_linies() que cridi la funció tres_linies del fitxer creat anteriorment. Afegiu a aquest últim fitxer una funció que es digui netejar_pantalla() que escrigui 25 línies en blanc. Finalment feu un programa en un nou fitxer que netegi la pantalla, escrigui la paraula 'Hola', nou línies en blanc i la paraula 'Adeu' usant les funcions definides en els fitxers anteriors.

Exercicis optatius

EOP 1.1

Quin error hi ha en el següent codi:

def test():
assert = 'Hola'
print assert + '2'

EOP 1.2

Expliqueu que passa a:

>>> from string import *
>>> cds = 'ATGAACTGTGC'
>>> replace(replace(replace(cds, 'A', 'a'), 'T', 'A'), 'a', 'T')

EOP 1.3

Usant un editor de textos, genereu una funció que calculi el pas de graus Celsius a Fahrenheit amb la fórmula : F = (9 / 5) * C + 32

EOP 1.4

Com demanarieu més d'una variable d'entrada en una sola línia?

EOP 1.5

Quin dels noms de les variables és incorrecte : spam, spam43, spam_43, 43spam, spAm

EOP 1.6

Com farieu un print del literal ' ?

EOP 1.7

Usant un editor de textos, genereu una funció que calculi el perímetre d'un cercle de radi r usant la llibreria matemàtica de Python

EOP 1.8

Quina operació dona un resultat diferent :

>>> 8 * 2 / 2 ** 3 * 4
>>> 2 * 8 / 2 ** 4 * 3
>>> 2 * 8 / 4 ** 2 * 3
>>> 8 * 2 / 4 ** 2 * 3

EOP 1.9

Quin és l'ordre de les operacions matemàtiques en l'exercici anterior ?

EOP 1.10

Es correcte el següent codi ? Per què ?

def hola():
# Comentari hola

def adeu():
# Comendari adeu
print 'adeu'