Python 3 per a no programadors/Comptar fins a 10
Bucles while
modificaHeus 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
modificaAra 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
modificaFibonacci.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
modificaEscriviu 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.
name = raw_input("Nom d'usuari: ")
password = raw_input("Contrassenya: ")
print("Escriviu bloqueja per a bloquejar la sessió.")
command = None
input1 = None
input2 = None
while command != "bloqueja":
command = raw_input("Ordre: ")
while input1 != name:
input1 = raw_input("Nom d'usuari: ")
while input2 != password:
input2 = raw_input("Contrassenya: ")
print("Benvinguts al sistema!")
Si voleu que el vostre programa es vagi executant contínuament, només us caldria posar aquest codi dins un while 1 == 1:
Una altra manera de fer-ho seria:
name = raw_input('Establir nom: ')
password = raw_input('Establir contrasenya: ')
while 1 == 1:
nameguess=""
passwordguess=""
key=""
while (nameguess != name) or (passwordguess != password):
nameguess = raw_input('Nom? ')
passwordguess = raw_input('Contrassenya? ')
print("Benvingut,", name, ". Escriviu bloqueja per a bloquejar.")
while key != "bloqueja":
key = raw_input("")
Tot i que encara no hem explicat l'operador or
segurament podeu entendre què fa; sinó, ho veurem més endavant.
login = "Jordi"
password = "viquillibres"
logged=2
while logged != 0:
while login != "Carles":
login = raw_input("Usuari : ")
while password != "barcelona":
password = raw_input("Contrassenya: ")
logged = 1
print("Benvinguts!")
print("Per a sortir escriviu bloqueja ")
while logged == 1:
leave = raw_input (">> ")
if leave == "bloqueja":
logged = 0
print("Adéu!!")
if
. Si voleu saber com funciona aneu al següent capítol.