Vés al contingut

Python 3 per a no programadors/Qui hi ha?

Entrada i variables

[modifica]

Crec que ha arribat l'hora de fer un programa realment complicat. Aquí el teniu:

print("Ei!")
nom_usuari = input("Qui hi ha? ")
print("Pots passar, " + nom_usuari)

Quan jo l'executo, això és el que veig:

Ei!
Qui hi ha? Miquel
Pots passar, Miquel

Nota: Després d'executar el programa prement F5, la consola de Python només mostrarà la sortida:

Ei!
Qui hi ha?

Heu de prémer enter a la consola, i després introduir el vostre nom a la consola per a la resta de la sortida.

Evidentment, quan executeu el programa la vostra pantalla no mostrarà exactament el mateix a causa de la funció input(). Quan haureu executat el programa (perquè ho heu fet, oi?) us haureu adonat que heu hagut d'escriure el vostre nom i prémer Enter. Llavors el programa ha acabat d'escriure el seu text i també el vostre nom. Això és un exemple d'entrada. El programa arriba a un cert punt i després espera que l'usuari introdueixi algunes dades que podrà fer servir més endavant.

Esclar que, perquè voldríem recollir informació sense poder tenir un lloc on guardar-la? Aquí és on apareixen les variables. En l'exemple anterior nom_usuari és una variable. Les variables són com caixes que poden guardar informacions. aquí teniu un programa que exemplifica l'ús de variables:

a = 123.4
b23 = 'Viquillibres'
nom = "Carles"
b = 432
c = a + b
print("a + b és",c)
print("El nom és",nom)
print("Trobareu llibres lliures a",b23)

I aquí teniu la sortida:

a + b és 555.4
El nom és Carles
Trobareu llibres lliures a Viquillibres

Les variables contenen dades. Les variables del programa anterior són a, b23, nom, b, i c. Els dos tipus bàsics són strings (llistes de caràcters) i nombres. Els strings són una seqüència de lletres, números i altres caràcters. En aquest exemple b23 i nom són variables que guarden strings. Viquillibres, Carles, a + b és, El nom és, i Trobareu llibres lliures a són els strings d'aquest programa- Els caràcters envoltats per " o ' són strings. La resta són nombres. Recordeu que les variables es fan servir per a guardar-hi un valor a dins, pertant no es posen entre cometes (" o '). Si voleu fer servir el valor real del que escrigueu ho heu de fer entre cometes.

dada1 == Pim
dada2 == "Pim"

Semblen el mateix, però en la primera Python comprova si el valor desat a la variable dada1 és el mateix que el guardat a la variable Pim. En el segon, Python comprova si el valor de dada2 és literalment Pim (més endavant en aquest tutorial veurem més coses sobre strings i sobre ==).

Assignació

[modifica]

Molt bé, així que tenim unes caixetes anomenades variables i també algunes dades que es poden guardar en variables. L'ordinador veurà una línia com nom = Carles i ho interpretarà com a "Posa l'string Carles a la caixa (o variable) nom. Més endavant veu c = a+ b i hi entén "Posa el resultat de a + b, és a dir 123.4 + 432 que equival a 555.4 a la variable c." La part dreta de la comanda és avaluada i el resultat es guarda a la variable de l'esquerra. Això s'anomena assignació, i no hauríeu de confondre el significat del símbol = amb el significat matemàtic del símbol d'igualtat (ja que per a això farem servir ==, com veurem més endavant).

Veiem un altre exemple d'ús de variables:

a = 1
print(a)
a = a + 1
print(a)
a = a * 2
print(a)

I evidentment la sortida és:

1
2
4

Fins i tot si tenim la mateixa variable a ambdós costats de l'assignació, l'ordinador entén "primer calcula el valor de la part dreta i després mira on cal guardar-ho"

Un últim programa abans d'acabar el capítol:

nombre = float(input("Escriu un nombre: "))
enter = int(input("Escriu un enter: "))
text = input("Escriu alguna cosa: ")
print("nombre =", nombre)
print("nombre és del tipus:", type(nombre))
print("nombre * 2 =", nombre * 2)
print("enter =", enter)
print("enter és de tipus:", type(enter))
print("enter * 2 =", enter * 2)
print("text =", text)
print("text és de tipus:", type(text))
print("text * 2 =", text * 2)

La meva sortida és:

Escriu un nombre: 12.34
Escriu un enter: -3
Escriu alguna cosa: Hola
nombre = 12.34
nombre és del tipus: <class 'float'>
nombre * 2 = 24.68
enter = -3
enter és del tipus: <class 'int'>
enter * 2 = -6
text = Hola
text és del tipus: <class 'str'>
text * 2 = HolaHola

N. del T.: Python retorna el nom dels tipus en Anglès, així float és un nombre real, int (de integer) és un enter, i str és un string (cadena de caràcters)

Tingueu en compte que nombre s'ha aconseguit amb float(input()) mentre que text s'ha aconseguit amb input(). input() sempre retorna un valor de tipus string, i amb la funció float transformem un string que contigui un nombre en aquest nombre (el transforma a real). Quan volgueu que l'usuari escrigui un real, useu float(input()) (evidentment per a un enter seria int(input())), però si el que voleu és text, useu només input(). També podeu utilitzar la funció input() però haureu de vigilar perquè el python ho considerarà com si fos codi, per exemple:

nombre = int(input("Escriu una operacio: "))
print("Resultat: ", nombre)

Quan s'executés passaria el següent:

Escriu una operacio: 5*(2+3)
Resultat: 25


La segona meitat del programa usa la funció type() que diu de quin tipus és una variable (i pertant la dada que conté). Els enters són de tipus int, els reals de tipus float (abreviació de integer, enter; i floating point, coma flotant). Els strings són de tipus str. Els enters i els reals es poden operar en funcions matemàtiques, els strings no. Fixeu-vos que quan intentem multiplicar un string per un enter, el resultat és que l'string és copia tantes vegades com el multipliquem, tal com hem vist, text * 2 = HolaHola.

Les operacions amb strings fan coses diferents que amb els números. De la mateixa manera, hi ha algunes operacions que només funcionen amb números (enters i reals) i produeixen un error si es fan sobre un string. Aquí en teniu alguns exemples:

>>> "Això" + " " + "quedarà" + " junt."
'Això quedarà junt.'
>>> "Ha, " * 5
'Ha, Ha, Ha, Ha, Ha, '
>>> "Ha, " * 5 + "ha!"
'Ha, Ha, Ha, Ha, Ha, ha!'
>>> 3 - 1
2
>>> "3" - "1"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'str' and 'str'
>>> 

Aquí teniu la llista d'operacions amb strings:

Operació Símbol Exemple
Repetició * "i" * 5 == "iiiii"
Concatenació + "Hola, " + "món!" == "Hola, món!"

Examples

[modifica]

velocitat_temps.py

# Aquest programa calcula problemes de velocitat i temps
print("Introduïu la velocitat i la distància")
vel = float(input("Velocitat: "))
dist = float(input("Distància: "))
print("Temps: ", (dist / vel))

Exemples d'execució:

Introduïu la velocitat i la distància
Velocitat: 5
Distància: 10
Temps: 2.0
Introduïu la velocitat i la distància
Velocitat: 3.52
Distància: 45.6
Temps: 12.9545454545

Area.py

# Aquest programa calcula el perímetre i l'àrea d'un rectangle
print("Càlcul d'informació d'un rectangle")
llar = float(input("Llargada: "))
ampl = float(input("Amplada: "))
print("Àrea", llar * ampl)
print("Perímetre", 2 * llar + 2 * ampl)

Exemples d'execució:

Càlcul d'informació d'un rectangle
Llargada: 4
Amplada: 3
Àrea 12.0
Perímetre 14.0
Càlcul d'informació d'un rectangle
Llargada: 2.53
Amplada: 5.2
Àrea 13.156
Perímetre 15.46

En aquest exemple podem veure que el caràcter \ dins una cadena de caràcters, sembla que sigui obviat. El que passa realment és que, quan volem posar caràcters especials o reservats dins una cadena, com per exemple cometes o apòstrofs, per tal que aquests no tanquin la cadena quan no volem, posem davant seu el caràcter \. Per exemple si voleu posar l'alegria, posarem "l'alegria" o 'l\'alegria', també funcionarà "l\'alegria".

temperatura.py

# Passa de Fahrenheit a Celsius
temp = float(input("Temperatura (en Fahrenheit): "))
print((temp - 32.0) * 5.0 / 9.0)

Exemples d'execució:

Temperatura (en Fahrenheit): 32
0.0
Temperatura (en Fahrenheit): -40
-40.0
Temperatura (en Fahrenheit): 212
100.0
Temperatura (en Fahrenheit): 98.6
37.0

Exercicis

[modifica]

Escriviu un programa que llegeixi dos strings i dos números, concateni (els ajunti, sense espais) i mostri els strings i multipliqui els dos números a la línia següent.

Solució

[modifica]