Numeri grossi

Quando i numeri superano un certo limite diventano difficili da comprendere, e anche da leggere.
Mi spiego: tutto è nato da una discussione sul Totocalcio (se ne parla anche quando non ci sono le partite, ah l’astinenza!). Abbiamo 13 pronostici ognuno con 3 opzioni quindi le combinazioni possibili sono 3 ^ 13, ossia

1594323, un milionecinquecentonovantaquattromilatrecentoventitrè.
Ecco scritto così è difficile da leggere, il secondo modo andrebbe bene, forse, per i tedeschi. Facciamo come i ragionieri: 1.594.323, OK 😀

E se poi mettessimo nella schedina più partite (in Brasile sono 15 (mi dicono)), per esempio anche tutta la serie B, diciamo 20 partite, allora abbiamo

no! illeggibile, dobbiamo fare qualcosa.

OK! in Unix (e nel suo successore Linux) c’è una grande tradizione di filtri, facciamone uno, propongo Python.

Con una googlata arriviamo a Format Specification Mini-Language

Ecco proprio quello che ci serve 8) O quasi: a differenza degli anglofoni usiamo il punto al posto della vergola e viceversa; ci serve uno scriptino.

Quello che vogliamo è un comando simile a calc ma che scriva i numeri in modo leggibile.

Dai è fattibile e semplice, qualcosa che faccia così:

Allora, secondo me dobbiamo coinvolgere calc, bash e Python. In alternativa, visto che calc deve essere installato e se non lo vogliamo potremmo sostituirlo con bc.

Questa è la componente in Python

#!/usr/bin/env python

import sys

if len(sys.argv) == 0:
	print 0
else:
	try:
		arg = sys.argv[1]
		d = arg.find('.')
		if d >= 0:
			st = '{:,}'.format(float(arg))
		else:
			st = '{:,}'.format(long(arg))
	except:
		print 'error'
		sys.exit(1)

	p = st.find('.')
	if d >= 0:
		st = st[:p] + '@' + st[p+1:]
	q = st.find(',')
	while q > 0:
		st = st[:q] + '.' + st[q+1:]
		q = st.find(',')
	if d >= 0:
		st = st[:p] + ',' + st[p+1:]
	print st

Semplice vero? Lo script si aspetta che calc (o bc) restituisca un numero (righe 5, 12 e 14). Siccome il parametro è una stringa verifica se c’è il separatore decimale (il punto); se c’è trasforma la stringa in float (il double del C) –riga 12– altrimenti in long (intero a precisione estesa) –riga 14.

A questo punto il nostro numero è rappresentato dalla stringa st.
Salva quindi la posizione del punto decimale (se c’è), riga 19. Se c’è sostituisce il punto con il carattere @ –righe 20 e 21. Esegue poi il ciclo di sostituzione delle virgole con punti –righe 22-25. E infine se c’era il punto iniziale mette una virgola in quella posizione –righe 26 e 27.
Scrive la stringa risultato –riga 28. Fatto.

Non ci resta che abilitarlo come comando, visto che abbiamo un terminale aperto lo facciamo con il comando

chmod +x j20.py

In alternativa in Nautilus click sul file j20.py con il tasto desto, selezionare Proprietà e poi Permessi e checkare (spuntare) “Consentire l’esecuzione del file come programma

E bash? Beh, questo è facile, ne abbiamo parlato in passato, c’è il corso di Bit3Lux & Lightuono (lo state seguendo vero? adesso sono in ferie ma riprenderà), eccolo

./j20.py `calc $@`

Attiviamolo e proviamolo

Per chi volesse usare bc al posto di calc ecco jbc

./j20.py `echo $@|bc -l`

e abbiamo (dopo l’attivazione)


OK! credo che per oggi basti così. Ci sarabbero ancora altre cose da fare, prossimamente, forse 8)

Inoltre –nota personale– questo era quasi pronto ieri, solo che poi c’è stato nientepopodimenoche il terremoto

Io sono nel pallino rosso. L’epicentro è sulle montagne tra la Val Chisone (quella di Pinerolo) e la Val di Susa (quella della TAV). Niente danni, le nostre montagne sono di roccia e quella è la zona dov’è nata l’espressione “bugia nen“.

Ha spaventato solo la mia amica Giulietta


coraggio Giulia è passato 8)
Non credete ai giornali: fanno quello che fa la gente, per un paio di giorni c’è qualcosa su cui chiacchierare, oltre al tempo (stasera è previsto un temporale, comunque, per chi fosse interessato) 😉

Posta un commento o usa questo indirizzo per il trackback.

Trackback

  • […] A volte ritornano! Chi? Cosa? Quello che volete, quello che non vi aspettate; per esempio oggi torna l’argomento già trattato nel post “Numeri grossi“. […]

  • Brontolo « Ok, panico su 14 agosto 2011 alle 09:25

    […] interagire con loro. Soprattutto per quanto riguarda il ‘puter e affini come per il caso dei numeri grossi che coinvolgeva un gruppo di […]

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: