Diferència entre revisions de la pàgina «ASIX-M3-UF1-A1»

De wikiserver
Dreceres ràpides: navegació, cerca
(ACTIVITAT 1.10: Sortida amb format i programes més llegibles)
 
(50 revisions intermèdies per 2 usuaris que no es mostren)
Línia 3: Línia 3:
  
  
[[Imatge:asix-uf1-esquema_ordinador.png |600px|left| Esquema_ordinador]]
+
[[Imatge:asix-uf1-esquema_ordinador.png |600px|center| Esquema_ordinador]]
  
 +
*La '''unitat central de processament''' pot processar milions d’instruccions per segon. I sempre espera noves instruccions...
  
La unitat central de processament pot processar milions d’instruccions per segon. I sempre espera noves instruccions...
+
*Usualment aquestes instruccions es poden donar agrupades en el que podríem anomenar com '''Programa'''.
  
Usualment aquestes instruccions es poden donar agrupades en el que podríem anomenar com Programa.
+
::Però, en quin llenguatge li podem parlar a la unitat central de processament?
  
però, en quin llenguatge li podem parlar a la unitat central de processament?
+
*Només entén un llenguatge de molt baix nivell conegut com '''llenguatge màquina'''.
  
Només entén un llenguatge de molt baix nivell conegut com llenguatge màquina.
+
::És fàcil aprendre aquest llenguatge i àgil per fer programes?
  
És fàcil aprendre aquest llenguatge i àgil per fer programes?
+
::Doncs NO!.
  
Doncs NO!.  
+
* Necessitem un '''llenguatge de programació d’alt nivell''' (més proper al llenguatge que parlem) per poder ser eficients alhora de programar.
 +
::'''Python''' és una molt bona opció pels Administradors de Sistemes.
  
Necessitem un llenguatge de programació d’alt nivell (més proper al llenguatge que parlem) per poder ser eficients alhora de programar. '''Python''' és una molt bona opció pels Administradors de Sistemes.
+
::Nosaltres fem programes d’alt nivell i la CPU només entén llenguatges de baix nivell. Com es resol?
  
Nosaltres fem programes d’alt nivell i la CPU només entén llenguatges de baix nivell. Com es resol?
+
*Hi ha dos opcions que depenen del llenguatge d’alt nivell emprat: intèrprets i compiladors.
  
Hi ha dos opcions que depenen del llenguatge d’alt nivell emprat: intèrprets i compiladors.
 
  
 +
[[Imatge:asix-uf1-interpret-compilador.png |500px|center| Interpret-compilador]]
  
[[Imatge:asix-uf1-interpret-compilador.png |500px|left| Interpret-compilador]]
 
  
 +
*'''Python és un llenguatge interpretat.'''
  
'''Python és un llenguatge interpretat.'''
+
*Aleshores per poder fer els nostres programes necessitarem tenir instal·lat en el nostre sistema '''l’intèrpret de python'''.
  
Aleshores per poder fer els nostres programes necessitarem tenir instal·lat en el nostres sistema '''l’intèrpret de python'''.
+
*'''Conviuen dues versions de python la 2.x i la 3.x''': això és degut a que curiosament no hi ha compatibilitat entre les versions 2 i 3.
  
'''Conviuen dues versions de python la 2.x i la 3.x''': això és degut a que curiosament no hi ha compatibilitat entre les versions 2 i 3. I per tant, molts programes fets per a la versió 2 s’haurien de “reprogramar” perquè funcionin en la versió 3.
+
:: user@terra$ python2 -V
 +
:: user@terra$ python3 -V
  
'''Nosaltres treballarem amb la versió 3''' per la millora que hi ha en les llibreries de sistemes.
+
::I per tant, molts programes fets per a la versió 2 s’haurien de “reprogramar” perquè funcionin en la versió 3.
  
 +
*'''Nosaltres treballarem amb la versió 3''' per la millora que hi ha en les llibreries de sistemes.
  
Amb les darreres versions d’Ubuntu l’intèrpret de python ja ve instal·lat.
 
  
Veiem-ho!!
+
*Amb les darreres versions d’Ubuntu l’intèrpret de python ja ve instal·lat.
  
ACTIVITAT 1.1: La calculadora
+
::Veiem-ho!!
 +
 
 +
<pre>
 +
user@terra$ python3
 +
Python 3.6.9 (default, Jan 26 2021, 15:33:00)
 +
[GCC 8.4.0] on linux
 +
Type "help", "copyright", "credits" or "license" for more information.
 +
>>>
 +
</pre>
 +
 
 +
==ACTIVITAT 1.1: La calculadora==
  
 
Indica resultat de les següents operacions:
 
Indica resultat de les següents operacions:
Línia 47: Línia 60:
 
- Operacions bàsiques:
 
- Operacions bàsiques:
 
<pre>
 
<pre>
>>> 2 + 3 =
+
>>> 2 + 3  
>>> 4 – 3 =
+
>>> 4 – 3  
>>> 5 * 3 =
+
>>> 5 * 3  
>>> 8 / 2 =
+
>>> 8 / 2  
>>> 7 % 2 =
+
>>> 7 % 2  
>>> 2**3 =
+
>>> 2**3  
 
</pre>
 
</pre>
  
Línia 58: Línia 71:
 
<pre>
 
<pre>
 
1r la potencia
 
1r la potencia
2n canvis de signe (ni n’hi ha): Per ex. - (-8) = +8
+
2n canvis de signe (si n’hi ha): Per ex. - (-8) = +8
 
3r multiplicacions, divisions i mòduls (mateixa prioritat → d'esquerra a dreta)
 
3r multiplicacions, divisions i mòduls (mateixa prioritat → d'esquerra a dreta)
 
4t sumes i restes (mateixa prioritat → d'esquerra a dreta)
 
4t sumes i restes (mateixa prioritat → d'esquerra a dreta)
 
</pre>
 
</pre>
>>> 4+3+2-5 =
+
<pre>
>>> 2**3**2 = (de dreta a esquerra)
+
>>> 4+3+2-5  
>>> 5*3+2 =
+
>>> 2**3**2 (de dreta a esquerra)
>>> 2+5*3 =
+
>>> 5*3+2  
>>> 4/2*3 =
+
>>> 2+5*3  
>>> 3*4/2 =
+
>>> 4/2*3  
>>> 13%5*3 =
+
>>> 3*4/2  
>>> 3*17%5 =
+
>>> 13%5*3  
>>> 2+3-4*6/2**3%2 =
+
>>> 3*17%5  
 +
>>> 2+3-4*6/2**3%2  
 
</pre>
 
</pre>
 
- Parèntesis per canviar la prioritat:
 
- Parèntesis per canviar la prioritat:
 
<pre>
 
<pre>
>>> 4+3+(2-5) =
+
>>> 4+3+(2-5)  
>>> (2**3)**2 =
+
>>> (2**3)**2  
>>> 5*(3+2) =
+
>>> 5*(3+2)  
>>> (2+5)*3 =
+
>>> (2+5)*3  
>>> 17%(5*3) =
+
>>> 17%(5*3)  
>>> 3*(17%5) =
+
>>> 3*(17%5)  
>>> (((2+3-4)*6)/2)**3%2 =
+
>>> (((2+3-4)*6)/2)**3%2  
 
</pre>
 
</pre>
  
ACTIVITAT 1.2: Primers tipus de dades: enters(sense decimal) i reals(amb coma flotant)
+
==ACTIVITAT 1.2: Primers tipus de dades: enters(sense decimal) i reals(amb coma flotant)==
  
 
Enters:
 
Enters:
Línia 96: Línia 110:
 
</pre>
 
</pre>
 
Es poden fer operacions que involucrin els dos tipus i el resultat sempre serà del tipus més general (real).
 
Es poden fer operacions que involucrin els dos tipus i el resultat sempre serà del tipus més general (real).
>>> 45 + 5.25 =
+
<pre>
>>> -27 + 5.25 =
+
>>> 45 + 5.25  
Compte! Amb les divisions de tipus enter, obtindrem un número real (amb python 2 NO!):
+
>>> -27 + 5.25  
>>> 6 / 3 =
+
</pre>
>>> 7 / 3 =
+
'''Compte!''' Amb les divisions de tipus enter, obtindrem un número real (amb python 2 NO!):
 +
<pre>
 +
>>> 6 / 3  
 +
>>> 7 / 3  
 +
</pre>
 
però si el que volem és la divisió sencera, aleshores utilitzarem el mètode int():
 
però si el que volem és la divisió sencera, aleshores utilitzarem el mètode int():
>>> int(6/3) =
+
<pre>
>>> int(7/3) =
+
>>> int(6/3)  
 +
>>> int(7/3)  
 +
</pre>
 +
==ACTIVITAT 1.3: Els operador lógics i de comparació==
  
ACTIVITAT 3: Els operador lógics i de comparació
+
Un altre tipus de dada: els valors lògics (True o 1, False o 0).
  
Un altre tipus de dada: els valors lògics (True o 1, False o 0).
 
 
Operadors lògics principals:
 
Operadors lògics principals:
 +
 
- operador de conjunció: and (i lògic).
 
- operador de conjunció: and (i lògic).
True si i només si ambes parts són certes.
+
 
 +
True si i només si totes les parts són certes.
 +
<pre>
 
>>>True and True
 
>>>True and True
 +
</pre>
 
Si alguna part és falsa el resultat és Fals.
 
Si alguna part és falsa el resultat és Fals.
 +
<pre>
 
>>>False and True
 
>>>False and True
 +
</pre>
 
- operador de disjunció: or (o lògic)
 
- operador de disjunció: or (o lògic)
 +
 
Si una de les parts és certa el resultat serà cert.
 
Si una de les parts és certa el resultat serà cert.
 +
<pre>
 
>>>True or False
 
>>>True or False
 +
</pre>
 
El resultat és fals només si les dos parts són falses.
 
El resultat és fals només si les dos parts són falses.
 +
<pre>
 
>>>False and False
 
>>>False and False
 +
</pre>
 
- operador de negació: not (no lògic)
 
- operador de negació: not (no lògic)
 +
 
El resultat és el valor lògic oposat
 
El resultat és el valor lògic oposat
 +
<pre>
 
>>>not True
 
>>>not True
 +
 
>>>not False
 
>>>not False
 +
</pre>
 
Es pot tenir més d’una operació lògica amb una mateixa línia:
 
Es pot tenir més d’una operació lògica amb una mateixa línia:
 +
<pre>
 
>>> True and False and True and True
 
>>> True and False and True and True
 +
</pre>
 
En aquest cas phyton o resoldrà per l’esquerra:
 
En aquest cas phyton o resoldrà per l’esquerra:
 +
<pre>
 
1r True and False and True and True (True and False → False)
 
1r True and False and True and True (True and False → False)
 
False and True and True
 
False and True and True
2
+
2n False and True and True (False and True → False)
n
 
False and True and True (False and True → False)
 
 
False and True
 
False and True
3
+
3r False and True (False and True → False)
r
 
False and True (False and True → False)
 
 
False
 
False
 +
</pre>
 
Es poden tenir operadors lògics diferents amb una mateixa línia:
 
Es poden tenir operadors lògics diferents amb una mateixa línia:
 +
<pre>
 
>>> True and False or not False
 
>>> True and False or not False
 +
</pre>
 
En aquest python utilitza una taula de precedència:
 
En aquest python utilitza una taula de precedència:
1
+
<pre>
r
+
1r la negació: True and False or not False (not False → True)
la negació: True and False or not False (not False → True)
 
 
True and False or True
 
True and False or True
2
+
2n les conjuncions: True and False or True (True and False → False)
n
 
les conjuncions: True and False or True (True and False → False)
 
 
False or True
 
False or True
3
+
3r les disjuncions: False or True (False or True → False)
r
 
les disjuncions: False or True (False or True → False)
 
 
True
 
True
 +
</pre>
 
Operadors de comparació:
 
Operadors de comparació:
 
- Igual a
 
- Igual a
>>>True == False
+
<pre>
 +
>>> True == False
 +
</pre>
 
- Diferent a
 
- Diferent a
>>>True != False
+
<pre>
 +
>>> True != False
 +
</pre>
 
- Major a
 
- Major a
>>>9 > 4
+
<pre>
 +
>>> 9 > 4
 +
</pre>
 
- Menor que
 
- Menor que
 +
<pre>
 
>>> 4 < 5
 
>>> 4 < 5
 +
</pre>
 
- Major o igual que
 
- Major o igual que
10 >= 56
+
<pre>
 +
>>> 10 >= 56
 +
</pre>
 
- Menor o igual que
 
- Menor o igual que
45 <= 45
+
<pre>
 +
>>> 45 <= 45
 +
</pre>
 +
 
 +
==ACTIVITAT 1.4: Les variables i les assignacions==
 +
 
 +
*Els resultats calculats anteriorment es mostren per pantalla però no es guarden enlloc.
 +
 
 +
*Les variables s’utilitzen per emmagatzemar dades per a la seva posterior utilització.
 +
 
 +
*Els programes poden guardar el resultat d'una operació en memòria, utilitzant variables.
 +
 
 +
*El valor emmagatzemat en una variable es pot canviar a voluntat dins del programa tants cops com calgui: es variable.
 +
 
 +
*Per distingir una variable de l'altra li posem nom. Per exemple: dni, hora, lloc, ... (es convenient utilitzar noms que ens recordin el que hi ha dins)
 +
 
 +
*Assignació d’un valor a una variable (primer escollir el nom).
 +
<pre>
 +
>>> x = 456        (‘=’ operador d’assignació)
 +
</pre>
 +
*Quan fem enter python emmagatzema la variable x i el seu valor en la memòria.
 +
 
 +
*Per veure el valor de la variable, només cal escriure-le i prèmer enter.
 +
<pre>
 +
>>> x
 +
</pre>
 +
*Canvi del valor de la variable:
 +
<pre>
 +
>>> x = 788  (després de prèmer enter el valor de la variable x canvía)
 +
>>> x
 +
</pre>
 +
:'''Compte!''' No confondre l’assignació amb la comparació.
 +
<pre>
 +
>>> x = 50 (assignació)
 +
>>> x == 79 (comparació)
 +
</pre>
 +
:'''Compte!''' Noms de les variables:
 +
<pre>
 +
>>> Alçada576  (paraula seguida de números)
 +
>>> Alçada_576  (‘_’ es pot fer servir com a separador)
 +
>>> 45_alfa (no es pot començar el nom per un número)
 +
>>> Gravetat = 9.8 (es poden utilitzar majúscules)
 +
</pre>
 +
:'''Compte!''' No es pot utilitzar com a nom de variables paraules reservades com if, while, repeat, ... ni paraules accentuades com àrea
 +
 
 +
:'''Compte!''' l'assignació d'una dada a una variable va '''SEMPRE''' de dreta a esquerra
 +
 
 +
*Les següents assignacions són incorrectes:
 +
<pre>
 +
>>> 22 = edat     
 +
>>> "Pepe" = nom
 +
</pre>
 +
 
 +
==ACTIVITAT 1.5: Cadenes==
 +
 
 +
*Una cadena és una seqüència de caràcters entre cometes dobles (" ") o simples (' ').
 +
<pre>
 +
>>>"cases"
 +
>>>"0303456"
 +
</pre>
 +
*Es poden emmagatzemar amb variables:
 +
<pre>
 +
>>>cadena_prova ="0303456"
 +
>>>cadena_prova
 +
'0303456'
 +
</pre>
 +
*Operacions:
 +
 
 +
:- Suma (concatenació)
 +
<pre>
 +
>>>"cases" + " blaves"
 +
'cases blaves'
 +
</pre>
 +
:- Multiplicació (repetició)
 +
<pre>
 +
>>>"/*-" *5
 +
'/*-/*-/*-/*-/*-'
 +
</pre>
 +
:'''Compte!''' No confondre la concatenació de cadenes amb la suma de nombres enters:
 +
<pre>
 +
>>> "25" + "25"
 +
'2525'
 +
>>> 25 + 25
 +
50
 +
</pre>
 +
:- Comparacions:
 +
::--Iguals
 +
<pre>
 +
>>> "abecedari" == "abella"
 +
False
 +
</pre>
 +
*Python va comparant caràcter a caràcter i si no troba cap diferent és que són iguals.
 +
::--Diferents
 +
<pre>
 +
>>> "hola" != "ola"
 +
True
 +
</pre>
 +
::--Menor que
 +
<pre>
 +
>>> "facultat" < "frase"
 +
True
 +
</pre>
 +
*Python compara el codi ASCII de cada caràcter i quan troba el primer diferent en funció del codi decideix si és menor o no.
 +
::--Major que
 +
<pre>
 +
>>> "hola" > "adeu"
 +
True
 +
</pre>
 +
 
 +
==ACTIVITAT 1.6: Funcions predefinides==
 +
 
 +
*Són funcions que venen integrades en python i podem utilitzar en els nostres programes.
 +
:Com obtenir el codi ASCII d’un caràcter i viciversa:
 +
<pre>
 +
>>>ord('a')
 +
97
 +
>>>ord('A')
 +
65
 +
>>>chr(97)
 +
'a'
 +
>>>chr(65)
 +
'A'
 +
</pre>
 +
:'''Compte!''' l’ASCII de les majúscules és inferior al de les minúscules.
 +
<pre>
 +
>>> "Hola" > "adeu"
 +
False
 +
</pre>
 +
<pre>
 +
>>>abs(-45)            # valor absolut
 +
45
 +
>>>float(78)            # converteix un número enter a flotant
 +
78.0
 +
>>>float("780")        # converteix una cadena que representi un número enter a flotant
 +
780.0
 +
>>>int(45.25)          # converteix el paràmetre a un número enter
 +
45
 +
>>>int("789")          # converteix una cadena que representi un número enter a enter
 +
789
 +
>>>str(789)            # converteix el paràmetre a una cadena
 +
'789'
 +
>>>str(78.52)
 +
'78.52'
 +
>>>round(45.87)        # arrodoneix un nombre flotant al enter més proper.
 +
46
 +
</pre>
 +
:pot portar dos paràmetres, el segon paràmetre indica el nombre de decimals a arrodonir:
 +
<pre>
 +
>>>round(1.256,2)
 +
1.26
 +
</pre>
 +
:round sempre retorna un nombre de tipus flotant.
 +
 
 +
==ACTIVITAT 1.7: Funcions en mòduls==
 +
 
 +
*Venen integrades en python però cal importar-les abans per poder-les utilitzar.
 +
:En aquet cas veurem el mòdul math que compté funcions matemàtiques.
 +
<pre>
 +
>>>from math import *          #amb * importem totes, es poden importar només les que necessitem
 +
>>>ceil(7.2)                  # redondeig cap amunt
 +
8
 +
>>>floor(7.8)                  # redondeig cap abaix
 +
7
 +
>>>sqrt(4)                    # arrel quadrada
 +
2.0
 +
</pre>
 +
 
 +
==ACTIVITAT 1.8: Els mètodes==
 +
 
 +
*Són funcions especials que varien segons el tipus de dada que estem manegant.
 +
:Exemple:
 +
<pre>
 +
>>>cad="Cadena de  prova"
 +
</pre>
 +
:Veiem alguns mètodes del tipus cadena:
 +
<pre>
 +
>>>cad.lower()
 +
'cadena de prova'
 +
>>>cad.upper()
 +
'CADENA DE PROVA'
 +
>>>cad.title()
 +
'Cadena De Prova'
 +
>>>cad.replace("prova","exemple")   
 +
'Cadena de exemple'
 +
</pre>
 +
:'''Compte!''' Els mètodes no modifiquen el contingut de la variable cad.
 +
>>>cad
 +
'Cadena de prova'
 +
:Per emmagatzemar la cadena modificada:
 +
<pre>
 +
>>>cad = cad.title()
 +
>>>cad
 +
'Cadena De Prova'
 +
</pre>
 +
 
 +
==ACTIVITAT 1.9: Introducció als programes==
 +
 
 +
:Càlcul de l’àrea d’un triangle.
 +
:funció '''print()''' s’utilitza per escriure un missatge per la consola.
 +
<pre>
 +
>>>print("Cadena de prova")
 +
Cadena de prova
 +
</pre>
 +
:Programa càlcul de l'àrea d'un triangle
 +
<source lang="python">
 +
print("Programa Càlcul de l'àrea d'un triangle")
 +
base = 10
 +
alçada = 5
 +
area = base * alçada / 2
 +
print ("El resultat és: ", area)
 +
</source>
 +
:'''Problema!''' Si volem calcular l’àrea d’un triangle de dimensions diferents hem de modificar el programa.
 +
 
 +
:Necessitem que l’usuari introdueixi els valors de la base i de l’alçada cada vegada que executi el programa.
 +
 
 +
*'''Funció input()''' per demanar a l'usuari que introdueixi dades
 +
<source lang="python">
 +
print("Programa Càlcul de l'àrea d'un triangle")
 +
 
 +
base = float(input("Mida de la base: "))
 +
"""
 +
input() llegeix cadena de caracters i
 +
float() ho converteix a número en coma flotant.
 +
int() si necessitem que sigui enter.
 +
"""
 +
alçada = float(input("Mida de l'alçada: "))
 +
area = base * alçada / 2
 +
print ("El resultat és: ", area)
 +
</source>
 +
 
 +
==ACTIVITAT 1.10: Sortida amb format i programes més llegibles==
 +
 
 +
:Sortida amb format:
 +
<source lang="python">
 +
print("Programa Càlcul de l'àrea d'un triàngle")
 +
 
 +
base = float(input("Mida de la base: "))
 +
"""
 +
input() llegeix cadena de caracters i
 +
float() ho converteix a número en coma flotant.
 +
int() si necessitem que sigui enter.
 +
"""
 +
alçada = float(input("Mida de l'alçada: "))
 +
area = base * alçada / 2
 +
print ("La base és: %f i l'àrea és: %f " %(base, area))
 +
"""
 +
%d reemplaçar per un valor de tipus enter
 +
%f reemplaçar per un valor de tipus flotant
 +
%s reemplaçar per un valor de tipus cadena
 +
"""
 +
</source>
 +
<pre>
 +
Programa Càlcul de l'àrea d'un triàngle
 +
Mida de la base: 5.5
 +
Mida de l'alçada: 6.4
 +
La base és: 5.500000 i l'àrea és: 17.600000
 +
</pre>
 +
:Per reduir la quantitat de decimals:
 +
 
 +
::%6.2 implica que el nombre ocuparà en total 6 posicions (tenint en compte el punt) de les quals dues seran decimals.
 +
<source lang="python">
 +
print("Programa Càlcul de l'àrea d'un triàngle")
 +
 
 +
base = float(input("Mida de la base: "))
 +
"""
 +
input() llegeix cadena de caracters i
 +
float() ho converteix a número en coma flotant.
 +
int() si necessitem que sigui enter.
 +
"""
 +
alçada = float(input("Mida de l'alçada: "))
 +
area = base * alçada / 2
 +
print ("La base és: %6.2f i l'àrea és: %5.1f " %(base, area))
 +
"""
 +
%6.2 implica que el nombre ocuparà en total 6 posicions (tenint en compte el punt)
 +
de les quals dues seran decimals.
 +
"""
 +
</source>
 +
<pre>
 +
Programa Càlcul de l'àrea d'un triàngle
 +
Mida de la base: 5.5
 +
Mida de l'alçada: 6.4
 +
La base és:  5.50 i l'àrea és:  17.6  #base 6 posicions i 2 decimals, are 5 posicions i 1 decimal
 +
</pre>
 +
 
 +
*Programes més llegibles per nosaltres o per tercers:
 +
:Separar el programa en blocs.
 +
<source lang="python">
 +
# Programa per calcular àrees de triangles #Comentaris
 +
print("Programa Càlcul de l'àrea d'un triàngle")
 +
 
 +
# Entrada de dades
 +
base_triangle = float(input("Mida de la base: ")) #Noms de variables clars i missatges clars per l'usuari
 +
alçada_triangle = float(input("Mida de l'alçada: "))
 +
 
 +
#Càlcul de l'area
 +
area_triangle = base_triangle * alçada_triangle / 2 #Càlculs clars separant operants d'operadors
 +
 
 +
#Sortida del resultat
 +
print ("La base és: %6.2f i l'àrea és: %5.1f " %(base_triangle, area_triangle)) #Missatges clars de sortida
 +
</source>

Revisió de 16:36, 17 maig 2023

Esquema simplificat d’un ordinador


Esquema_ordinador
  • La unitat central de processament pot processar milions d’instruccions per segon. I sempre espera noves instruccions...
  • Usualment aquestes instruccions es poden donar agrupades en el que podríem anomenar com Programa.
Però, en quin llenguatge li podem parlar a la unitat central de processament?
  • Només entén un llenguatge de molt baix nivell conegut com llenguatge màquina.
És fàcil aprendre aquest llenguatge i àgil per fer programes?
Doncs NO!.
  • Necessitem un llenguatge de programació d’alt nivell (més proper al llenguatge que parlem) per poder ser eficients alhora de programar.
Python és una molt bona opció pels Administradors de Sistemes.
Nosaltres fem programes d’alt nivell i la CPU només entén llenguatges de baix nivell. Com es resol?
  • Hi ha dos opcions que depenen del llenguatge d’alt nivell emprat: intèrprets i compiladors.


Interpret-compilador


  • Python és un llenguatge interpretat.
  • Aleshores per poder fer els nostres programes necessitarem tenir instal·lat en el nostre sistema l’intèrpret de python.
  • Conviuen dues versions de python la 2.x i la 3.x: això és degut a que curiosament no hi ha compatibilitat entre les versions 2 i 3.
user@terra$ python2 -V
user@terra$ python3 -V
I per tant, molts programes fets per a la versió 2 s’haurien de “reprogramar” perquè funcionin en la versió 3.
  • Nosaltres treballarem amb la versió 3 per la millora que hi ha en les llibreries de sistemes.


  • Amb les darreres versions d’Ubuntu l’intèrpret de python ja ve instal·lat.
Veiem-ho!!
user@terra$ python3
Python 3.6.9 (default, Jan 26 2021, 15:33:00) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

ACTIVITAT 1.1: La calculadora

Indica resultat de les següents operacions:

- Operacions bàsiques:

>>> 2 + 3 
>>> 4 – 3 
>>> 5 * 3 
>>> 8 / 2 
>>> 7 % 2 
>>> 2**3 

- Més d’una operació (prioritat):

1r la potencia
2n canvis de signe (si n’hi ha): Per ex. - (-8) = +8
3r multiplicacions, divisions i mòduls (mateixa prioritat → d'esquerra a dreta)
4t sumes i restes (mateixa prioritat → d'esquerra a dreta)
>>> 4+3+2-5 
>>> 2**3**2  (de dreta a esquerra)
>>> 5*3+2 
>>> 2+5*3 
>>> 4/2*3 
>>> 3*4/2 
>>> 13%5*3 
>>> 3*17%5 
>>> 2+3-4*6/2**3%2 

- Parèntesis per canviar la prioritat:

>>> 4+3+(2-5) 
>>> (2**3)**2 
>>> 5*(3+2) 
>>> (2+5)*3 
>>> 17%(5*3) 
>>> 3*(17%5) 
>>> (((2+3-4)*6)/2)**3%2 

ACTIVITAT 1.2: Primers tipus de dades: enters(sense decimal) i reals(amb coma flotant)

Enters:

>>> 45
>>> -27

Reals:

>>> 5.25
>>> -8.1

Es poden fer operacions que involucrin els dos tipus i el resultat sempre serà del tipus més general (real).

>>> 45 + 5.25 
>>> -27 + 5.25 

Compte! Amb les divisions de tipus enter, obtindrem un número real (amb python 2 NO!):

>>> 6 / 3 
>>> 7 / 3 

però si el que volem és la divisió sencera, aleshores utilitzarem el mètode int():

>>> int(6/3) 
>>> int(7/3) 

ACTIVITAT 1.3: Els operador lógics i de comparació

Un altre tipus de dada: els valors lògics (True o 1, False o 0).

Operadors lògics principals:

- operador de conjunció: and (i lògic).

True si i només si totes les parts són certes.

>>>True and True

Si alguna part és falsa el resultat és Fals.

>>>False and True

- operador de disjunció: or (o lògic)

Si una de les parts és certa el resultat serà cert.

>>>True or False

El resultat és fals només si les dos parts són falses.

>>>False and False

- operador de negació: not (no lògic)

El resultat és el valor lògic oposat

>>>not True

>>>not False

Es pot tenir més d’una operació lògica amb una mateixa línia:

>>> True and False and True and True

En aquest cas phyton o resoldrà per l’esquerra:

1r True and False and True and True (True and False → False)
False and True and True
2n False and True and True (False and True → False)
False and True
3r False and True (False and True → False)
False

Es poden tenir operadors lògics diferents amb una mateixa línia:

>>> True and False or not False

En aquest python utilitza una taula de precedència:

1r la negació: True and False or not False (not False → True)
True and False or True
2n les conjuncions: True and False or True (True and False → False)
False or True
3r les disjuncions: False or True (False or True → False)
True

Operadors de comparació: - Igual a

>>> True == False

- Diferent a

>>> True != False

- Major a

>>> 9 > 4

- Menor que

>>> 4 < 5

- Major o igual que

>>> 10 >= 56

- Menor o igual que

>>> 45 <= 45

ACTIVITAT 1.4: Les variables i les assignacions

  • Els resultats calculats anteriorment es mostren per pantalla però no es guarden enlloc.
  • Les variables s’utilitzen per emmagatzemar dades per a la seva posterior utilització.
  • Els programes poden guardar el resultat d'una operació en memòria, utilitzant variables.
  • El valor emmagatzemat en una variable es pot canviar a voluntat dins del programa tants cops com calgui: es variable.
  • Per distingir una variable de l'altra li posem nom. Per exemple: dni, hora, lloc, ... (es convenient utilitzar noms que ens recordin el que hi ha dins)
  • Assignació d’un valor a una variable (primer escollir el nom).
>>> x = 456        (‘=’ operador d’assignació)
  • Quan fem enter python emmagatzema la variable x i el seu valor en la memòria.
  • Per veure el valor de la variable, només cal escriure-le i prèmer enter.
>>> x
  • Canvi del valor de la variable:
>>> x = 788  (després de prèmer enter el valor de la variable x canvía)
>>> x
Compte! No confondre l’assignació amb la comparació.
>>> x = 50 (assignació)
>>> x == 79 (comparació)
Compte! Noms de les variables:
>>> Alçada576  (paraula seguida de números)
>>> Alçada_576  (‘_’ es pot fer servir com a separador)
>>> 45_alfa (no es pot començar el nom per un número)
>>> Gravetat = 9.8 (es poden utilitzar majúscules)
Compte! No es pot utilitzar com a nom de variables paraules reservades com if, while, repeat, ... ni paraules accentuades com àrea
Compte! l'assignació d'una dada a una variable va SEMPRE de dreta a esquerra
  • Les següents assignacions són incorrectes:
 
>>> 22 = edat       
>>> "Pepe" = nom

ACTIVITAT 1.5: Cadenes

  • Una cadena és una seqüència de caràcters entre cometes dobles (" ") o simples (' ').
>>>"cases"
>>>"0303456"
  • Es poden emmagatzemar amb variables:
>>>cadena_prova ="0303456"
>>>cadena_prova
'0303456'
  • Operacions:
- Suma (concatenació)
>>>"cases" + " blaves"
'cases blaves'
- Multiplicació (repetició)
>>>"/*-" *5 
'/*-/*-/*-/*-/*-'
Compte! No confondre la concatenació de cadenes amb la suma de nombres enters:
>>> "25" + "25"
'2525'
>>> 25 + 25
50
- Comparacions:
--Iguals
>>> "abecedari" == "abella"
False
  • Python va comparant caràcter a caràcter i si no troba cap diferent és que són iguals.
--Diferents
>>> "hola" != "ola"
True
--Menor que
>>> "facultat" < "frase"
True
  • Python compara el codi ASCII de cada caràcter i quan troba el primer diferent en funció del codi decideix si és menor o no.
--Major que
>>> "hola" > "adeu"
True

ACTIVITAT 1.6: Funcions predefinides

  • Són funcions que venen integrades en python i podem utilitzar en els nostres programes.
Com obtenir el codi ASCII d’un caràcter i viciversa:
>>>ord('a')
97
>>>ord('A')
65
>>>chr(97)
'a'
>>>chr(65)
'A'
Compte! l’ASCII de les majúscules és inferior al de les minúscules.
>>> "Hola" > "adeu"
False
>>>abs(-45)             # valor absolut
45
>>>float(78)            # converteix un número enter a flotant
78.0
>>>float("780")         # converteix una cadena que representi un número enter a flotant
780.0
>>>int(45.25)           # converteix el paràmetre a un número enter
45
>>>int("789")           # converteix una cadena que representi un número enter a enter
789
>>>str(789)             # converteix el paràmetre a una cadena
'789'
>>>str(78.52)
'78.52'
>>>round(45.87)         # arrodoneix un nombre flotant al enter més proper.
46
pot portar dos paràmetres, el segon paràmetre indica el nombre de decimals a arrodonir:
>>>round(1.256,2)
1.26
round sempre retorna un nombre de tipus flotant.

ACTIVITAT 1.7: Funcions en mòduls

  • Venen integrades en python però cal importar-les abans per poder-les utilitzar.
En aquet cas veurem el mòdul math que compté funcions matemàtiques.
>>>from math import *          #amb * importem totes, es poden importar només les que necessitem 
>>>ceil(7.2)                   # redondeig cap amunt
8
>>>floor(7.8)                  # redondeig cap abaix
7
>>>sqrt(4)                     # arrel quadrada
2.0

ACTIVITAT 1.8: Els mètodes

  • Són funcions especials que varien segons el tipus de dada que estem manegant.
Exemple:
>>>cad="Cadena de  prova"
Veiem alguns mètodes del tipus cadena:
>>>cad.lower()
'cadena de prova'
>>>cad.upper()
'CADENA DE PROVA'
>>>cad.title()
'Cadena De Prova'
>>>cad.replace("prova","exemple")    
'Cadena de exemple'
Compte! Els mètodes no modifiquen el contingut de la variable cad.

>>>cad 'Cadena de prova'

Per emmagatzemar la cadena modificada:
>>>cad = cad.title()
>>>cad
'Cadena De Prova'

ACTIVITAT 1.9: Introducció als programes

Càlcul de l’àrea d’un triangle.
funció print() s’utilitza per escriure un missatge per la consola.
>>>print("Cadena de prova")
Cadena de prova
Programa càlcul de l'àrea d'un triangle
print("Programa Càlcul de l'àrea d'un triangle")
base = 10
alçada = 5
area = base * alçada / 2 
print ("El resultat és: ", area)
Problema! Si volem calcular l’àrea d’un triangle de dimensions diferents hem de modificar el programa.
Necessitem que l’usuari introdueixi els valors de la base i de l’alçada cada vegada que executi el programa.
  • Funció input() per demanar a l'usuari que introdueixi dades
print("Programa Càlcul de l'àrea d'un triangle")

base = float(input("Mida de la base: ")) 
"""
input() llegeix cadena de caracters i 
float() ho converteix a número en coma flotant. 
int() si necessitem que sigui enter.
"""
alçada = float(input("Mida de l'alçada: "))
area = base * alçada / 2
print ("El resultat és: ", area)

ACTIVITAT 1.10: Sortida amb format i programes més llegibles

Sortida amb format:
print("Programa Càlcul de l'àrea d'un triàngle")

base = float(input("Mida de la base: ")) 
"""
input() llegeix cadena de caracters i 
float() ho converteix a número en coma flotant. 
int() si necessitem que sigui enter.
"""
alçada = float(input("Mida de l'alçada: "))
area = base * alçada / 2
print ("La base és: %f i l'àrea és: %f " %(base, area))
"""
%d reemplaçar per un valor de tipus enter
%f reemplaçar per un valor de tipus flotant
%s reemplaçar per un valor de tipus cadena
"""
Programa Càlcul de l'àrea d'un triàngle
Mida de la base: 5.5
Mida de l'alçada: 6.4
La base és: 5.500000 i l'àrea és: 17.600000 
Per reduir la quantitat de decimals:
%6.2 implica que el nombre ocuparà en total 6 posicions (tenint en compte el punt) de les quals dues seran decimals.
print("Programa Càlcul de l'àrea d'un triàngle")

base = float(input("Mida de la base: ")) 
"""
input() llegeix cadena de caracters i 
float() ho converteix a número en coma flotant. 
int() si necessitem que sigui enter.
"""
alçada = float(input("Mida de l'alçada: "))
area = base * alçada / 2
print ("La base és: %6.2f i l'àrea és: %5.1f " %(base, area))
"""
%6.2 implica que el nombre ocuparà en total 6 posicions (tenint en compte el punt)
de les quals dues seran decimals.
"""
Programa Càlcul de l'àrea d'un triàngle
Mida de la base: 5.5
Mida de l'alçada: 6.4
La base és:   5.50 i l'àrea és:  17.6  #base 6 posicions i 2 decimals, are 5 posicions i 1 decimal
  • Programes més llegibles per nosaltres o per tercers:
Separar el programa en blocs.
# Programa per calcular àrees de triangles #Comentaris
print("Programa Càlcul de l'àrea d'un triàngle")

# Entrada de dades 
base_triangle = float(input("Mida de la base: ")) #Noms de variables clars i missatges clars per l'usuari 
alçada_triangle = float(input("Mida de l'alçada: "))

#Càlcul de l'area 
area_triangle = base_triangle * alçada_triangle / 2 #Càlculs clars separant operants d'operadors 

#Sortida del resultat 
print ("La base és: %6.2f i l'àrea és: %5.1f " %(base_triangle, area_triangle)) #Missatges clars de sortida