Python 3 per a no programadors/Comptar fins a 10

Bucles while

modifica

Heus aquí la primera estructura de control. Habitualment, l'ordinador comença executant la primera línia, i segueix avall. Les estrucutres de control canvien l'ordre en què s'executen les ordres o decideixen si una certa ordre s'executarà o no. Aquí teniu un programa que fa servir l'estructura de control while:

a = 0
while a < 10:
    a = a + 1
    print(a)

I aquí teniu la impressionant sortida:

1
2
3
4
5
6
7
8
9
10

I pensaveu que no podíeu fer res pitjor que transformar l'ordinador en una calculadora barata? ;)

Així que, què fa el programa? Primer veu la línia a = 0 i posa a a zero. Llavors veu while a < 10: i comprova si a < 10. El primer cop que l'ordinador ho comprova, a val zero, pertant és cert que val menys que 10. En altres paraules, mentre aquesta condició sigui certa, l'ordinador anirà executant les instruccions identades (les que estan posades més cap a la dreta). Aquests faran que en algun moment, a valgui efectivament 10, i la condició ja no serà certa. Arribat a aquest punt, l'ordinador saltarà les línies sagnades i continuarà amb la resta del programa (en el cas anterior no fa res més).

Recordeu de posar sempre dos punts (:) després de la condició del while!

Aquí teniu un altre exemple d'ús del while:

a = 1
s = 0
print('Introduïu números per sumar.')
print('Introduïu 0 per sortir.')
while a != 0:
    print('Suma actual:', s)
    a = float(raw_input('Número? '))
    s = s + a
print('Suma total =', s)
Introduïu números per sumar.
Introduïu 0 per sortir.
Suma actual: 0
Número? 200
Suma actual: 200.0
Número? -15.25
Suma actual: 184.75
Número? -151.85
Suma actual: 32.9
Número? 10.00
Suma actual: 42.9
Número? 0
Suma total = 42.9

Podeu veure com print 'Suma total =', s només s'executa un cop, al final. La instrucció while només afecta les línies sagnades (amb la mateixa sagnia!). El != significa no igual, pertant while a != 0: significa que mentre a sigui zero les instruccions sagnades s'executaràn.

Tingueu en compte que a és un nombre real, i no tots els nombres reals es poden representar exactament, així que != pot no funcionar amb reals a vegades. Proveu-ho amb 1.1 en mode interactiu.

Bucles infinits

modifica

Ara que tenim bucles, podem crear programes que s'executin per sempre. Una manera senzilla de fer-ho és escriure un programa com aquest:

while 1 == 1:
   print("Ajuda! Estic en un bucle infinit!.")

L' operador "==" s'utilitza per comprovar si les dues bandes són iguals, tal com féiem servir "<" per menor que en l'exemple anterior (En el pròxim capítol veurem la llista sencera d'operadors).

Aquest programa anirà imprimint Ajuda! Estic en un bucle infinit!. fins a la fi dels temps, o fins que el pareu, ja que 1 sempre serà igual a 1. Per a parar-ho premeu alhora la tecla Control (o Ctrl) i la lletra c. Això matarà el programa (així en diem de parar-lo). (Nota: A vegades haureu de prémer Enter després de Control-C)

Exemples

modifica

Fibonacci.py

# Aquest programa calcula la seqüència de Fibonacci
a = 0
b = 1
count = 0
max_count = 20
while count < max_count:
    count = count + 1
    # hem guardar a, ja que ho canviem
    old_a = a
    old_b = b
    a = old_b
    b = old_a + old_b
    # Fixeu-vos en l'ordre màgica end=" " en la funció print que evita que
    # es passi a una nova línia.
    print(old_a,end=" ")
print() #imprimir una nova línia

Sortida:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

Fixeu-vos que la sortida està en una sola línia a causa de l'argument end=" " a la funció print.ments.

Password.py

# Espera fins que s'entri un password. Feu servir Control-C per sortir
# sense password

#Fixeu-vos que aquest no ha de ser el password per tal que
# el bucle while s'executi almenys un cop
password = "formatge"

# recordeu que != vol dir no igual
while password != "viquillibres":
    password = input("Password: ")
print("Benvingut")

Exemple d'execució:

Password: Wikibooks
Password: v i q u i l l i b r e s
Password: password
Password: Marc
Password: viquillibres
Benvingut

Exercicis

modifica

Escriviu un programa que pregunti a l'usuari el nom d'usuari i la contrasenya. Si després escriuen "bloqueja", han de tornar a introduir el nom i la contrasenya.