Python da 2 a 3 – prova di 2to3

Il post Python – differenze fra le versioni 2 e 3 che non voleva essere un introduzione a una (lunga quanto basta) serie sull’argomento ha prodotto un commento intrigoso, questo. Davide, THeK3nger, ha ragione ma io voglio comunque vedere cosa fa 2to3, tool che fornisce (o dovrebbe fornire) un aiutino per la conversione. Oggi voglio testarlo per qualche script fatto ad hoc. In ogni caso niente panico!, io da ggiovane ho vissuto la fase di passaggio dal Fortran IV (66) al 77. Oltre ai DO, i COMMON, le stringhe come vettori INTEGER*2 e altre cose minori dovevi affrontare codice scritto dai vecchi, pieni di IF matematici, GOTO calcolati e astruserie simili.
Ma sono sopravvissuto 8)

Comincio con il testare la divisione fra interi, print e raw_input. Ecco norm.py che trastasforma le misure in pollici in piedi-pollici e cm. Di indubbia utilità, chiaramente 8)

#!/usr/bin/python
# -*- coding: utf-8 -*-

ppcm = 1 / 2.54 # pollici per cm
def anorm():
	m = int(raw_input('misura in pollici: '))
	if m > 0:
		ft = m / 12 #divisione fra interi
		yn = m % 12
		cm = m / ppcm # divisione fra float
		print ft, "ft -", yn, "in",
		print "(%.1f cm)\n" %cm
	return m

print 'conversione di misure lineari espresse in pollici (in)'
print 'in piedi e pollici (ft-in) e equivalente in cm\n'

m = 1
while m > 0:
	m = anorm()
print 'ciao!\n'


OK, provo a convertirlo

ed ecco il risultato

#!/usr/bin/python
# -*- coding: utf-8 -*-

ppcm = 1 / 2.54 # pollici per cm
def anorm():
	m = int(input('misura in pollici: '))
	if m > 0:
		ft = m / 12 #divisione fra interi
		yn = m % 12
		cm = m / ppcm # divisione fra float
		print(ft, "ft -", yn, "in", end=' ')
		print("(%.1f cm)\n" %cm)
	return m

print('conversione di misure lineari espresse in pollici (in)')
print('in piedi e pollici (ft-in) e equivalente in cm\n')

m = 1
while m > 0:
	m = anorm()
print('ciao!\n')

provandolo si ha

OPS! Errore: non ha visto la divisione tra interi. Correggendo la riga 8 così:

ft = m // 12 #divisione fra interi @@@ corretta a mano

tutto torna OK

No la divisione non la vede. Indica che quelle istruzioni sono da esaminare ma non corregge.
D’accordo era difficile capire che era da correggere. Proviamo con qualcosa di più semplice, come div-env.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

d = 12 / 5 # @@@

print d, "\n"


No, ecco il file convertito

#!/usr/bin/env python
# -*- coding: utf-8 -*-

d = 12 / 5 # @@@

print(d, "\n")

Niente da fare sulla divisione.
Quindi le divisioni si devono controllare –tutte.

E non ha modificato neanche la shebangriga 1.
Davide aveva ragione a diffidare (ma lo sapevo anch’io) 8)

Passo ora a esaminare xrange/range.
Non so se vi siete mai chiesti quanto è veloce la crescita della funzione esponenziale. Ecco proviamo (t-range.py)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import math
R = xrange(11)
for c in R:
	print c, math.exp(c)
print

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import math
R = range(11)
for c in R:
	print(c, math.exp(c))
print()

Ecco questo è OK, bravo 2to3! 8)

Un grosso aiuto per queste conversioni potrebbe venite da meld. Lo so che i puristi usano diff ma, per il resto di noi ecco cosa si ottiene con meld t-range.py.bak t-range.py


Per adesso basta così, ma l’argomento non è esaurito, ve l’ho detto che diventerà un tormentone 8)

Posta un commento o usa questo indirizzo per il trackback.

Commenti

  • Lucio Versdino  Il 26 maggio 2015 alle 10:05

    Anche io ho nostalgia del QB. Mi piacerebbe poter disporre di un compilatore per rendere più completi i programmi che tuttora scrivo in quel linguaggio molto più elastico di altri linguaggi, specialmente per gestire la grafica. Dispongo di un S.O. Windows 7 e uno Windows XP. Con quest’ultimo S.O. posso accedere al QB, ma non riesco a compilare i file sorgente. Vorrei un suggerimento. Grazie.
    Lucio Versino

    • juhan  Il 26 maggio 2015 alle 13:10

      Sono un po’ fuori casa! Da tempo non metto le mani su Windows per cui non saprei dirti. Tranne che per l’interfaccia grafica dove lascia desiderare Python credo sia proponibile. È molo usato, trovi materiale su tutto, è relativamente facile amche per chi comincia. Se invece sei legato al Basic c’è Gambas, ne ho parlato anch’io. Lì hai tutta la grafica che si usa adesso.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: