Diferència entre revisions de la pàgina «ASIX-M3-UF1-A1»
(→ACTIVITAT 1.10: Sortida amb format i programes més llegibles) |
|||
(49 revisions intermèdies per 2 usuaris que no es mostren) | |||
Línia 3: | Línia 3: | ||
− | [[Imatge:asix-uf1-esquema_ordinador.png |600px| | + | [[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... | |
− | + | *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. | |
− | |||
+ | [[Imatge:asix-uf1-interpret-compilador.png |500px|center| 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. | |
− | 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 48: | 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 59: | Línia 71: | ||
<pre> | <pre> | ||
1r la potencia | 1r la potencia | ||
− | 2n canvis de signe ( | + | 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 | + | >>> 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 97: | 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ó== | ||
− | + | 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 | + | |
+ | 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 | ||
− | + | 2n False and True and True (False and True → False) | |
− | |||
− | False and True and True (False and True → False) | ||
False and True | False and True | ||
− | + | 3r False and True (False and True → False) | |
− | |||
− | 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: | ||
− | + | <pre> | |
− | + | 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 | ||
− | + | 2n les conjuncions: True and False or True (True and False → False) | |
− | |||
− | les conjuncions: True and False or True (True and False → False) | ||
False or True | False or True | ||
− | + | 3r les disjuncions: False or True (False or True → False) | |
− | |||
− | 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
- 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.
- 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. >>>
Contingut
- 1 ACTIVITAT 1.1: La calculadora
- 2 ACTIVITAT 1.2: Primers tipus de dades: enters(sense decimal) i reals(amb coma flotant)
- 3 ACTIVITAT 1.3: Els operador lógics i de comparació
- 4 ACTIVITAT 1.4: Les variables i les assignacions
- 5 ACTIVITAT 1.5: Cadenes
- 6 ACTIVITAT 1.6: Funcions predefinides
- 7 ACTIVITAT 1.7: Funcions en mòduls
- 8 ACTIVITAT 1.8: Els mètodes
- 9 ACTIVITAT 1.9: Introducció als programes
- 10 ACTIVITAT 1.10: Sortida amb format i programes més llegibles
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