Intanto la nostra "Mission Python" va avanti....Sono stato fuori tutta la giornata e al ritorno ho trovato una bella sorpresa...stava lì buona buona in gmail...Le sorprese si condividono, vero? Ecco a voi nuovo post del caro Juhan!! Vi avviso, è un po' tosto...Il post, ovvio...ma anche Juhan! Non per niente nel post si parla del pythonista tosto. :))
Recentemente abbiamo visto come leggere e scrivere su file. Tutto OK? No un problema ce l'abbiamo ancora, vediamo un esempio (troppe.py):
#!/usr/bin/python
# -*- coding: utf-8 -*-
import math
area = 120
raggio = math.sqrt(area / math.pi)
lato = math.sqrt(area)
rapp = 2 * raggio / lato
print "Raggio del cerchio =", raggio
print "Lato del quadrato =", lato
print "Rapporto diametro / lato =", rapp
OK, ma troppa grazia! cosa ce ne facciamo di tutte quelle cifre? Riusciremmo mai a fare un segmento lungo così con un righello? Poi qualche matematico è anche capace di dire che sono valori approssimati.E allora io direi di approssimarli come si deve, per esempio con due cifre decimali (due.py):
#!/usr/bin/python
# -*- coding: utf-8 -*-
import math
area = 120
raggio = math.sqrt(area / math.pi)
lato = math.sqrt(area)
rapp = 2 * raggio / lato
print "Raggio del cerchio =", round(raggio, 2)
print "Lato del quadrato =", round(lato, 2)
print "Rapporto diametro / lato =", round(rapp, 2)
Meglio vero? Ma non è elegante. E poi se andate a vedere write() accetta un solo argomento e sarebbe bello avere qualcosa di più pratico. Pensa te che cu--- fortuna: ce l'abbiamo!Anzi ci sono due modi, quello vecchio (lo trovate ancora, continua a funzionare ma è sconsigliato) e quello nuovo.
Cominciamo a vedere il modo vecchio (vecchio.py):
#!/usr/bin/python
# -*- coding: utf-8 -*-
import math
area = 120
raggio = math.sqrt(area / math.pi)
lato = math.sqrt(area)
rapp = 2 * raggio / lato
s1 = "Raggio del cerchio = %.2f" %raggio
s2 = "Lato del quadrato = %.2f" %lato
s3 = "Rapporto diametro / lato = %.2f" %rapp
print s1
print s2
print s3
Ma un pythonista (sì, si dice così) lo script lo scriverebbe probabilmente così (pyvecchio.py):#!/usr/bin/python
# -*- coding: utf-8 -*-
import math
area = 120
raggio = math.sqrt(area / math.pi)
lato = math.sqrt(area)
rapp = 2 * raggio / lato
s1 = "Raggio del cerchio = %.2f\nLato del quadrato = %.2f" %(raggio, lato)
s2 = "Rapporto diametro / lato = %.2f" %rapp
print s1
print s2
Il risultato è usuale al precedente.Se trovate la riga st1 = ... troppo lunga avete ragione: un pythonista tosto scriverebbe così (pytosto.py):
#!/usr/bin/python
# -*- coding: utf-8 -*-
import math
area = 120
raggio = math.sqrt(area / math.pi)
lato = math.sqrt(area)
rapp = 2 * raggio / lato
st = "Raggio del cerchio = %.2f\n\
Lato del quadrato = %.2f\n\
Rapporto diametro / lato = %.2f" %(raggio, lato, rapp)
print st
Notare che un backslash (\) al termine della riga viene interpretato come "la riga continua".Però a un certo punto si è deciso di cambiare tutto. E tanto vale che ci abituamo anche noi, tanto è così che si fa adesso come quando "ce lo chiede l'Europa"
Il modo attuale usa format(), metodo delle stringhe (OK, dobbiamo ancora vedere bene cosa sono i metodi, prossimamente, per adesso diciamo che è una funzione). Nell'help online lo trovate qui.
Le specifiche di format() sono parecchie, le trovate qui
e a prima vista possono intimidire ma niente panico! Ecco l'esempio precedente attualizzato (nuovo.py):
#!/usr/bin/python
# -*- coding: utf-8 -*-
import math
area = 120
raggio = math.sqrt(area / math.pi)
lato = math.sqrt(area)
rapp = 2 * raggio / lato
st = "Raggio del cerchio = {:.2f}\n\
Lato del quadrato = {:.2f}\n\
Rapporto diametro / lato = {:.2f}".format(raggio, lato, rapp)
print st
OK, finora niente di che, vero. Riprendiamo un esercizio vecchio, la tabella dei quadrati e cubi, fatta quiDateci un'occhiata e vedrete che le colonne non sono allineate bene. Propongo di rifarlo, aggiungendoci le radici quadrate (tab-qcr.py):
#!/usr/bin/python
# -*- coding: utf-8 -*-
import math
st = "\t{:2d} {:4d} {:5d} {:5.2f}"
print "\tn n^2 n^3 rad"
for i in range(1, 11):
print st.format(i, i**2, i**3, math.sqrt(i))
print "\nOK"
OK? Mi sa che format() richiede un altro post, con esempi per i vari casi. Sì lo so è una pizza, ma è così. Alla prossima.Juhan
L'indice di "Mission Python" lo trovate qui.
Nessun commento:
Posta un commento