Python 3 per a no programadors/Comptar fins a 10
| Comptar fins a 10 | Decisions |
Contingut |
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 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 introduïr 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!!")
Aquest mètode, tot i que una mica estrany, també funciona. Vegeu l'ús de la funció if. Si voleu saber com funciona aneu al següent capítol.