Lectura de dades amb yogi
La lectura de dades en Python és, admetem-ho, massa difícil per als principiants. Per solucionar-ho, es pot usar el mòdul yogi
. Aquest petit mòdul ofereix funcions senzilles però potents per llegir dades des de Python i és molt útil per resoldre els problemes de Jutge.org.
Aquesta lliçó explica com instal·lar i utilitzar el mòdul yogi
.
Instal·lació
- Instal·leu amb
pip install yogi
o ambpip3 install yogi
(segons el vostre sistema).
Ús bàsic
La funció read()
de yogi
retorna el següent element (token) de l'entrada. El tipus d'aquest element s'ha de donar com a paràmetre i pot ser un d'aquests tres:
read(int)
retorna el següent enter,read(float)
retorna el següent real, iread(str)
retorna la següent paraula.
Els elements es separen per paraules. Els blancs i salts de línia no es poden obtenir ja que read()
els ignora. Si l'entrada no té més elements, read()
provoca una desagradable excepció.
La funció scan()
de yogi
també retorna el següent element (token) de l'entrada, però en el cas que aquesta acabi (o que el valor llegit no sigui compatible amb el demanat), retorna None
. Igual que read()
, cal demanar a scan()
què es vol llegir:
scan(int)
retorna el següent enter oNone
si no hi és,scan(float)
retorna el següent real, oNone
si no hi és, iscan(str)
retorna la següent paraula oNone
si no hi és.
A més, es pot usar el generador tokens()
per anar obtenint el següent element de l'entrada o acabar el bucle quan ja no n'ha més.
Exemples
Programa que saluda
from yogi import read
print('Com et dius?')
nom = read(str)
print('Hola', nom)
Fixeu-vos que amb aquest programa s'aconsegueix la primera paraula escrita per l'usuari, amb independència dels blancs o salts de línia que tingui davant o darrera. Això no es podria haver fet senzillament amb input()
!
Programa que llegeix dos nombres i n'escriu la seva suma
from yogi import read
x = read(int)
y = read(int)
print(x + y)
Programa que llegeix una seqüència de reals i n'escriu la seva suma (amb scan()
)
from yogi import scan
s = 0.0
x = scan(float)
while x is not None:
s = s + x
x = scan(float)
print(s)
Fixeu-vos que quan s'usa un terminal, cal senyalar el final de l'entrada amb Control + d a Linux i Mac o amb Control + z a Windows.
Programa que llegeix una seqüència de reals i n'escriu la seva suma (amb tokens()
)
El programa anterior seria més fàcil d'escriure utilitzant tokens()
:
from yogi import tokens
s = 0.0
for x in tokens(float):
s = s + x
print(s)
Informació addicional
Es pot trobar una informació més exhaustiva sobre aquest mòdul a la seva documentació.
Jordi Petit
Lliçons.jutge.org
© Universitat Politècnica de Catalunya, 2024