Lectura i escriptura

Els computadors no només realitzen càlculs, sinó que també necessiten interactuar amb els usuaris per obtenir les dades d’entrada i lliurar les dades de sortida. Aquesta interacció és coneguda com a entrada-sortida en informàtica i és un aspecte complex degut a la diversitat de dispositius existents. A continuació, es presenten els fonaments bàsics de com llegir i escriure dades en Python, incloent la lectura amb yogi.

Entrada-sortida bàsica

L’entrada i sortida en els computadors és un procés fonamental per a la interacció entre l’usuari i la màquina. L’entrada fa referència a la recepció de dades o senyals des de fonts externes, com ara teclats, ratolins, escàners o altres dispositius perifèrics. Aquestes dades són processades i utilitzades pel sistema informàtic per realitzar tasques específiques. Per altra banda, la sortida implica la transmissió d’informació des del sistema informàtic cap a l’usuari o altres dispositius de sortida, com ara pantalles, impressores o altaveus. Aquesta informació pot prendre diverses formes, com text, imatges, so o comandaments per controlar altres dispositius. El procés d’entrada-sortida és gestionat per components de maquinari i programari que permeten la transferència eficient i fiable de dades entre els dispositius perifèrics i el sistema central. Això permet que els computadors puguin interactuar amb l’entorn extern i facilita la comunicació i l’ús de les seves funcionalitats per part dels usuaris.

Els canals d’entrada i de sortida estàndard d’un sistema operatiu són interfícies de comunicació per a la interacció entre l’usuari i el sistema. El canal d’entrada estàndard, conegut com a stdin, permet la introducció de dades per part de l’usuari (per exemple, a través del teclat) o per part d’un altre programa o un altre dispositiu (com, per exemple, un fitxer). D’altra banda, el canal de sortida estàndard, anomenat stdout, és utilitzat per mostrar els resultats, missatges o dades generades pel programa a l’usuari o a un altre procés. Aquests canals estàndard proporcionen una forma estandaritzada de comunicació entre els programes i el sistema operatiu facilitant la interacció i el flux de dades.

Gràcies en aquests canals implementat pel sistema operatiu, la lectura a través de stdin i l’escriptura a través de stdout es pot fer sense conèixer els detalls dels perifèrics als quals estan connectats.

Instrucció d’escriptura

Com ja hem vist anteriorment, print és la instrucció d’escritura de Python i serveix per escriure dades a stdout.

Per escriure un valor, només cal passar el valor com a paràmetre del print:

>>> print('Hola')
Hola
>>> print(2023)
2023
>>> var = 3.1416
>>> print(var)
3.1416

Per defecte, print afegeix un salt de línia al acabar l’escriptura.

Si es volen escriure moltes dades en una sola línia, es poden passa múltiple paràmetres separats per comes:

>>> print('Hola', 'Jordi')
Hola Jordi
>>> print(31, 12, 2023)
31 12 2023
>>> print()

>>> print(2023, 'Carles', 0.5)
2023 Carles 0.5

Sense cap paràmetre, escriu una línia buida.

Es pot modificar le funcionament de print especificant dos paràmetres addicionals:

  1. sep indica quin text separarà els elements donats,

  2. end indica quin text s’escriurà al final del print.

Per defecte, sep és un espai i end és un salt de linia.

Aquests exemples mostren com utilitzar el sep:

>>> print('Hola', 'Jordi', sep='_')
Hola_Jordi
>>> print(31, 12, 2023, sep='_')
31_12_2023
>>> print(31, 12, 2023, sep='')
31122023
>>> print(31, 12, 2023, sep='   ')
31   12   2023

I aquests exemples mostren com utilitzar el end:

>>> print('Hola', 'Jordi', end='.')
Hola Jordi.>>> print('Hola', 'Jordi', end='\n\n')
Hola Jordi

>>>

En el primer cas, com que enlloc d’un salt de línia s’ha escrit un punt, el prompt queda enganxat al text. El el segon cas, el end val dos salts de línia (el text especial \n és un salt de línia), i per això l’escritura deixa una línia de separació.

Evidentment, end i sep es poden usar alhora. Aquest exemple separa els elements amb comes i els acaba amb un punt:

>>> print('Amalia', 'Maria', 'Emma', end=',', sep='.')
Amalia,Maria,Emma.>>>

El prompt (>>>) només es veu perquè aquests exemples usen l’intèrpret de Python. Estigueu tranquils que quan fem programes sencèrs, no apareixeran.

print té més opcions, però aquestes són les poques que necessitarem.

Lectura

Com s’ha mencionat prèviament, l’instrucció input de Python s’utilitza per llegir dades des de stdin (potser amb un prompt mostrat prèviament a stdout).

No obstant això, l’ús de input té limitacions, ja que només permet llegir una línia de text. Per abordar aquests problemes i obtenir una forma més precisa i eficaç de llegir dades, en aquest curs farem servir el paquet yogi. D’aquesta manera, podrem superar les limitacions de input i millorar el procés de lectura de dades. Per usar el paquet yogi, cal haver-lo instal·lat previament (amb pip3 install yogi).

Per usar el paquest yogi, cal fer un import yogi (de forma semblant al import turtle). yogi ofereix una funció read que permet llegir dades enteres, reals o textuals. Cal especificar quin tipus de dades es vol llegir com a paràmetre: int per enters, float per reals o str per textos (paraules, concretament):

>>> import yogi
>>> i = yogi.read(int)
12
>>> i
12
>>> f = yogi.read(float)
3.14
>>> f
3.14
>>> s = yogi.read(str)
Setembre
>>> s
'Setembre'

Gràcies a yogi, les dades es poden llegir malgrat que es trobin a la mateixa o en diferents línies. Per exemple, la instrucció següent llegeix dos enters i n’escriu la seva suma.

>>> print(yogi.read(int) + yogi.read(int))
3 4
7

I també funciona amb dades separades per molts espais o línies:

>>> print(yogi.read(int) + yogi.read(int))


3



          4
7

Aconseguir això amb input és practicament impossible.

Si es llegeix una dada d’un tipus no prescrit, es produirà un error. Per exemple:

>>> i = yogi.read(int)
23.56
ValueError: invalid literal for int() with base 10: '23.56'

yogi ofereix més operacions, que veurem més endavant però abans d’acabar, fixeu-vos que es pot importar directament una funció d’un paquet per no haver d’anar prefixant-la amb el nom del paquet cada vegada:

>>> from yogi import read
>>> print(read(int) + read(int))

En programes llargs no convé usar la forma from ... import ..., però per programes curts o d’usar i llençar, val la pena.




Lliçons.jutge.org
Jordi Petit
Universitat Politècnica de Catalunya, 2023

Prohibit copiar. Tots els drets reservats.
No copy allowed. All rights reserved.