# primer contacte, part 2

Primers passos en Python (II)

Llegir dades amb input(), noves formes d'assignar variables, el mòdul math, i com formatar la sortida amb f-strings — encara sense condicionals ni bucles.

Llegint dades de l'usuari: input()

A diferència de print(), que mostra dades, input() en demana a l'usuari. Sempre retorna una cadena de text (str), encara que l'usuari escrigui números.

Exemple

edat = int(input("Quants anys tens? "))
print(f"L'any que ve en tindràs {edat + 1}")

input(...) mostra el text entre parèntesis i espera que l'usuari escrigui alguna cosa i premi Intro. El resultat és sempre str; per fer-hi operacions numèriques cal envoltar-lo amb int() (nombre enter) o float() (nombre decimal).

El parany de la conversió

Si t'oblides de convertir el resultat d'input(), Python no es queixa — simplement fa una altra cosa que la que volies.

El problema

a = input("Primer número: ")   # l'usuari escriu 5
b = input("Segon número: ")   # l'usuari escriu 3
print(a + b)                   # imprimeix 53, no 8!

Com a i b són str, l'operador + no suma — concatena els textos: "5" + "3" dona "53".

La solució

a = int(input("Primer número: "))
b = int(input("Segon número: "))
print(a + b)                   # ara sí: 8

Operadors aritmètics i de comparació

Els mateixos conceptes que en C, amb una notació una mica diferent i un parell d'afegits propis de Python.

OperadorFa
+ - *suma, resta, producte
/divisió real (sempre decimal)
//divisió entera
%residu de la divisió entera
**potència (no cal cap funció pow())
< > <= >= == !=comparadors, igual que en C

Un extra de Python: pots encadenar comparacions directament, tal com ho escriuries en matemàtiques: 0 <= nota <= 10 comprova les dues condicions alhora. En C caldria escriure-ho amb un &&: nota >= 0 && nota <= 10.

Assignació múltiple i intercanvi de variables

Python permet assignar diverses variables en una sola línia, i això obre la porta a un truc molt útil.

Assignació múltiple

a, b, c = 1, 2, 3
print(a, b, c)

Intercanviar dues variables

a, b = b, a

Aquesta única línia intercanvia els valors de a i b sense necessitar cap variable temporal. Python primer calcula la parella (b, a) sencera, i després l'assigna. En C caldria una tercera variable per no perdre cap valor pel camí.

El mòdul math i l'operador **

Per a arrels, logaritmes i altres funcions matemàtiques cal importar el mòdul math. Per elevar a una potència, en canvi, ja tens l'operador ** integrat al llenguatge.

Exemple

import math

costat = 5.0
diagonal = math.sqrt(costat ** 2 + costat ** 2)
print(f"La diagonal val {diagonal:.2f}")

A diferència de C, on calia pow(base, exponent) de <math.h>, en Python base ** exponent ja funciona sense importar res. Per sqrt(), log() i similars sí que cal import math.

Format de sortida amb f-strings

Una f-string és una cadena precedida per f on pots ficar variables directament entre claus { }, amb format opcional.

pi = 3.14159265
print(f"Pi val {pi:.2f}")   # Pi val 3.14

Tot el que va després dels dos punts dins les claus és l'especificador de format.

Taula de referència: especificadors dins f-strings
CodiEfecte
{x:.2f}decimal amb 2 xifres de precisió
{x:5d}enter, amplada mínima de 5 caràcters
{x:>10}alineat a la dreta en 10 caràcters
{x:,.2f}decimal amb separador de milers
{x:.1%}com a percentatge, amb 1 decimal

bonus Altres maneres de formatar text

Les f-strings són les més modernes i les que farem servir en aquest curs, però et trobaràs les altres dues en codi més antic.

pi = 3.14159265

print("Pi val %.2f" % pi)              # estil antic, semblant a printf de C
print("Pi val {:.2f}".format(pi))      # estil .format()
print(f"Pi val {pi:.2f}")              # f-strings: la que fem servir aquí

Les tres línies mostren exactament el mateix resultat. L'especificador .2f és el mateix en totes tres.

Mira el programa executar-se pas a pas

Encara de dalt a baix, sense condicions ni bucles — però ara amb entrada de l'usuari simulada.

Entrada de dades

Sortida i format

Codi

Variables

NomValor

Terminal

Pas 1 / 1

Exercicis

Aquí no hi ha solució ni comprovació automàtica: són per escriure i provar tu mateix.

1. Municipi i codi postal

Demana el nom d'un municipi, un caràcter qualsevol i el seu codi postal, i mostra les tres dades juntes en una sola línia.

En Python un "caràcter" és senzillament una cadena d'una sola lletra: no cal cap tipus especial com el char de C.

2. Resistències en paral·lel

Calcula la resistència equivalent de dues resistències en paral·lel: Req = (R1 · R2) / (R1 + R2). Demana R1 i R2 com a float.

Compte amb la jerarquia d'operadors: R1*R2/(R1+R2) no és el mateix que R1*R2/R1+R2.

3. Fahrenheit a Celsius

Demana una temperatura en graus Fahrenheit i mostra l'equivalent en graus Celsius, amb la fórmula C = (F − 32) / 1.8.

Recorda que input() sempre retorna text: caldrà float().

4. Taxa Anual Equivalent (TAE)

Donat un interès nominal anual i (per exemple 0.05) i un nombre de pagaments n (per exemple 12), calcula la TAE amb la fórmula TAE = (1 + i/n)n − 1.

Aquí no cal cap mòdul: l'operador ** ja eleva a una potència.

5. Mitjana de tres nombres

Demana tres nombres reals i mostra'n la mitjana aritmètica.

Pots demanar-los junts amb input().split() i convertir-los amb un bucle o un a un; de moment fes-ho amb tres input() separats.

6. Equació de segon grau

Demana els coeficients a, b i c d'una equació ax² + bx + c = 0 i calcula les seves dues solucions amb la fórmula general. Encara no cal comprovar si l'equació té solució real.

disc = b**2 - 4*a*c
x1 = (-b + math.sqrt(disc)) / (2*a)
x2 = (-b - math.sqrt(disc)) / (2*a)
No t'oblidis del import math al principi.