Diferència entre revisions de la pàgina «Python: introducció ràpida»
Línia 232: | Línia 232: | ||
Aquests exercicis estan pensat per introduïr-se al Python i les seves estructures bàsiques de control. En general no s'han de fer servir els mètodes d'objectes ja que els veurem més endavant. | Aquests exercicis estan pensat per introduïr-se al Python i les seves estructures bàsiques de control. En general no s'han de fer servir els mètodes d'objectes ja que els veurem més endavant. | ||
− | # Fes un script que demani 2 nombres naturals, a i b, i calculi la potència a<sup>b</sup> sense utilitzar la llibreria matemàtica. | + | # Fes un script "pow.py" que demani 2 nombres naturals, a i b, i calculi la potència a<sup>b</sup> sense utilitzar la llibreria matemàtica. |
+ | # Fes un script "powcmd.py" que realitzi el mateix que l'anterior, però que li entrem a i b per la línia de comandes. | ||
# Fes un script que demani 2 cadenes de caràcters ''frase'' i ''element'', i que busqui quantes vegades apareix ''element'' dins de la cadena ''frase'', sense utilitzar les funcions de strings. | # Fes un script que demani 2 cadenes de caràcters ''frase'' i ''element'', i que busqui quantes vegades apareix ''element'' dins de la cadena ''frase'', sense utilitzar les funcions de strings. | ||
# Fes un script que demani nom, cognom, lloc i data de naixement, i mostri per pantalla les dades personals formatades dins d'una frase més el signe del zodíac de la persona. Per exemple: ''"Sr./Sra. Josep Pérez, nascut a Andorra l'any 1991, té a Taure com a signe solar del zodíac."'' | # Fes un script que demani nom, cognom, lloc i data de naixement, i mostri per pantalla les dades personals formatades dins d'una frase més el signe del zodíac de la persona. Per exemple: ''"Sr./Sra. Josep Pérez, nascut a Andorra l'any 1991, té a Taure com a signe solar del zodíac."'' |
Revisió del 08:00, 10 set 2012
Per començar a programar en Python i coneixent pràviament les bases de l'algorismica, us proposo uns consells ràpids:
Contingut
Consola i scripts
Python és un llenguatge interpretat i es pot invocar la consola des de la shell:
enric@pepino:~$ python Python 2.7.3 (default, Apr 20 2012, 22:44:07) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> a=1 >>> print a 1
Per sortir feu servir CTRL+D o quit()
Si volem fer un script (arxiu .py) es pot executar:
- Cridant el fitxer de text (script) amb l'intèrpret:
$ python elmeuscript.py
- Executant-ho com un shell script: cal insertar una línia al principi del script amb la ruta a l'intèrpret i necessitarà permisos d'execució.
Shell script
Creem l'arxiu:
#!/usr/bin/python
i = 7
print i
canviem permisos i l'executem:
$ chmod 755 elmeuscript.py $ ./elmeuscript.py
Accents i demés: codificació UTF-8 de l'arxiu
Python no ens deixarà posar accents i caràcters especials. Si volem poder treballar amb cadenes en el nostre idioma convé canviar-ho al principi de l'arxiu amb:
#!/usr/bin/python
# -*- coding: utf-8 -*-
print "mira què bé"
Si no posem la 2a línia, el script ens donarà un error en executar-ho.
Blocs per indentació, res de claus {}
Els blocs de sentències funcionen amb indentació (és a dir, tabuladors/espais al principi de línia), el que és molt adequat per establir un estil clar i net de programació.
De pas: observa (1) l'assignació múltiple, (2) el condicional i (3) els booleans son amb majúscula (True i False):
a , b = 1, 2 # en Python podem fer assignacions de diverses variables alhora
if a == b:
print "son iguals"
c = True
else:
print "son diferents"
c = False
Cal tenir en compte que:
- Els inicis de bloc els marquen els dos punts ":" de les sentències de control (condicionals, bucles) i de les funcions.
- Tant ens fa posar un tabulador com 3 o 4 espais, la única regla és que la indentació sigui coherent al llarg del bloc.
- Si estem copiant exemples de tutorials i similars, i després afegim codi, serà convenient ajustar el tipus d'indentació de l'editor per tal que sigui coherent. En el cas de l'editor geany (recomanat) es pot canviar a:
Document -> Tipus de sagnat
Variables dinàmiques
En Python, igual que en molts llenguatges interpretats, no cal declarar el tipus de les variables. Es pot crear una variable quan es vulgui i del tipus que es vulgui i es pot canviar al llarg de l'execució. Per exemple:
>>> a = 1 >>> type(a), a (<type 'int'>, 1) >>> a = "cosa" >>> type(a), a (<type 'str'>, 'cosa')
Entrada de dades per teclat
Tenim bàsicament dues funcions:
- input() : s'interpreta l'entrada com a sentència Python
- raw_input() : s'interpreta com una cadena de caràcters
Per exemple:
>>> xx = raw_input() 3+2 <- entrada de teclat >>> xx '3+2'
raw_input() manté l'entrada de teclat com un string (cadena de caràcters). En canvi:
>>> xx = input() 3+2 <- entrada de teclat >>> xx 5
Com podem veure, amb input() s'ha interpretat el "3+2" i s'ha efectuat la suma. També podriem entrar variables:
>>> a = 55 >>> b = input() a <- entrada de teclat >>> b 55
En aquest cas, el que entrem pel teclat "a" s'ha interpretat com la variable i per tant "b" valdrà el mateix que la variable "a".
Per entrar contrassenyes
Finalment podem importar una funció "getpass" del mòdul del mateix nom, per entrar passwords sense que es mostri per pantalla:
import getpass
password = getpass.getpass("Entra la teva contrassenya: ")
Per suposat, ara no feu "print password"... ;P
Funcions
Les funcions es defineixen amb la paraula clau def:
def suma(a,b):
resultat = a + b
return resultat
print suma(3,6)
Condicionals i bucles
Referències a wikibooks de
- Condicionals: "if" i
"switch"(switch no hi és en Python però al link trobareu hàbils maneres de simular-ho). - Bucles: "while" i "for"
Ja hem vist un exemple de condicional "if" més amunt. Important remarcar que els condicionals es poden fer de la manera curta amb:
num = int(input())
res = -num if num<0 else num
Fixa't en:
- l'entrada per teclat input(), també podria ser raw_input() per entrar caràcters.
- hem filtrar l'entrada per tal que num sigui un sencer (int). Si volguéssim un flotant caldria fer
num = float(raw_input())
Bucles
Per fer un bucle típic numèric (no és el més habitual en Python):
for i in range(3,11,2):
print i
És curiós oi? Això és perquè Python, com a bon llenguatge orientat a objectes i d'alt nivell, itera a través de llistes d'objectes. La instrucció:
>>> range(3,11,2) [3, 5, 7, 9]
crea una llista de nombres imparells des de l'inici (3) fins el final (11) saltant de (2) en (2).
Ja veurem quan ens ocupem dels obejctes que el bucle "for ... in ..." és molt més elegant en les aplicacions que ens interessen.
Formatació de strings (cadenes de caràcters)
Per imprimir variables dins d'una cadena de caràcters es pot fer de diverses maneres. La primera seria concatenant amb "+":
nom = "Manolo"
missatge = "El guanyador del premi és " + nom + ". Felicitats!"
L'altra seria intercal·lant les variables amb %, similar al C, i posant els arguments entre parèntesi (és una tupla, ho veurem més tard) després d'un "%":
nom = raw_input("Digues el teu nom: ")
edat = input ("Digues la teva edat: ")
print "Hola %s, tens %d anys." % (nom, edat)
Els principals valors que pot prendre son:
- %s: string
- %d: decimal (sencer)
- %f: float (punt flotant, nombres reals).
- Per controlar el nº de decimals podem posar el modificar ".<nombre_de_decimals>" entre el % i la "f", per exemple:
pi = 3.14159
print "pi = %.3f" % pi
...imprimirà només 3 decimals, és a dir (al tanto que arrodoneix!):
pi = 3.142
Pas d'arguments per comanda
Si volem els arguments indicats a la línia de comandes, com per exemple:
$ python hello.py enric Hola, enric.
... podem fer-ho a important el mòdul sys:
import sys
params = sys.argv # argv és una llista amb tots els arguments que passem
nom = params[1]
print "Hola, %s." % (nom)
Coses de strings
Per omplir (padding) un string es pot fer:
>>> a = "p" * 5 >>> a 'ppppp'
Per separar un string en parts ho podem fer amb split (equival al "explode" del PHP):
>>> a = 'xxxx.xxxx.abcd' >>> a.split(".") ['xxxx', 'xxxx', 'abcd']
Per transformar a majúscules o minúscules:
>>> a = "cOsES"
>>> a.upper()
'COSES'
>>> a.lower()
'coses'
La llibreria string té coses interessants:
>>> import string
>>> string.uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.lowercase
'abcdefghijklmnopqrstuvwxyz'
Per saber més prova amb dir(string) o mira aquí: http://docs.python.org/library/string.html
Exercicis
Aquests exercicis estan pensat per introduïr-se al Python i les seves estructures bàsiques de control. En general no s'han de fer servir els mètodes d'objectes ja que els veurem més endavant.
- Fes un script "pow.py" que demani 2 nombres naturals, a i b, i calculi la potència ab sense utilitzar la llibreria matemàtica.
- Fes un script "powcmd.py" que realitzi el mateix que l'anterior, però que li entrem a i b per la línia de comandes.
- Fes un script que demani 2 cadenes de caràcters frase i element, i que busqui quantes vegades apareix element dins de la cadena frase, sense utilitzar les funcions de strings.
- Fes un script que demani nom, cognom, lloc i data de naixement, i mostri per pantalla les dades personals formatades dins d'una frase més el signe del zodíac de la persona. Per exemple: "Sr./Sra. Josep Pérez, nascut a Andorra l'any 1991, té a Taure com a signe solar del zodíac."
- ...
- Fes un script "usuaris.py" que demani per la consola usuari i contrassenya, i els enregistri en un arxiu "dades.txt".
- ...