
Python Digital Clock, ovvero un orologio che anziché utilizzare le lancette o i numeri, utilizza lo stato (acceso / spento) dei bit relativi.
Gli informatici sono una razza a parte. Forse peggio dei matematici (ma è comunque una bella lotta).
Si è soliti osservare l’informatico quadratico medio soccombere sotto lo stress di programmi bacati, specifiche non presenti e tempi di consegna assurdi. Lo troviamo seduto in una stanza buia, irrorato dalle onde elettromagnetiche di un multischermo, spesso alle prese con una fetta di pizza fredda o un bicchiere di caffè. Talvolta compone codice mentre chatta con un amico, talaltra crea arzigogoli pazzeschi solo per soddisfare il proprio genio artistico e non accedere alle (ben più) semplici librerie di funzione presenti.
Oggi presenteremo uno di questi inutili (ma nerdissimi) arzigogoli.
Un orologio binario
Quando si parla di codice binario, la mente giunge senza soluzione di continuità all’elettronica digitale, il cui primevo rappresentante è l’orologio.
Ma nel nostro caso l’orologio a circuito digitale non è abbastanza sofisticato. L’Informatico desidera qualcosa di più sottilmente perverso.
Ad esempio un orologio in cui ore, minuti e secondi sono codificati a livello di stato di bit all’interno del byte. Esempio classico:
- 0 = 000000
- 1 = 000001
- 2 = 000010
- 4 = 000100
- 8 = 001000
- 16 = 010000
- 51 = 110011
e così via. Per ore, minuti e secondi.
Il programma
Il programma Python per ottenere tale risultato richiede, come al solito, solamente una manciata di righe di codice.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import datetime as dt from time import sleep import os clock = "\U0000231A" uno = "\U0001F7E6" zero = "\U00002B1B" def to_bin(n, bits): return bin(n)[2: ].zfill(bits).replace("1", uno).replace("0", zero) while (1): now = dt.datetime.now() h, m, s = now.hour, now.minute, now.second print (clock + " Orologio binario con emoji\n") print("HOUR : ", to_bin(h, 5)) print("MIN : ", to_bin(m, 6)) print("SEC : ", to_bin(s, 6)) # print(now) sleep(1) os.system('clear') |
Utilizzeremo alcune graziose “emoji” per rendere il programma più piacevole alla vista. Una emoji altro non è che una specie di codice ASCII estesso, multibyte, che raccoglie l’universo mondo delle icone parlanti. Basta accedere ad una pagina in cui sono presenti gli esempi di codifica (io ho utilizzato questa) e scegliere il codice Unicide preferito, usandolo cone un carattere o una stringa qualunque.
Dalle prime righe del codice potete vedere che io ne ho usata una per rappresentare l’orologio, e due per rappresentare gli stati del bit (acceso o spento).
Definiamo ora una funzione che, ad una stringa di bit, restituisca una stringa di caratteri Unicode il cui stato sia quello del relativo bit.
Nel ciclo infinito leggiamo l’orario attuale, estraiamo le variabili che ci occorrono (ore, minuti e secondi) e stampiamo la stringa corrispondente al loro valore.
Quindi attendiamo un secondo, puliamo lo schermo e si riparte.
Per chi non ha eccessiva dimestichezza con la trascodifica binario/digitale, è possibile (all’inizio) stampare la data in formato decimale: basterà decommentare la linea
|
1 |
# print(now) |
Buon divertimento!
Iscriviti ai nostri gruppi Telegram
Link utili
- Arduino UNO R3
- Elegoo UNO R3
- Arduino Starter Kit per principianti
- Elegoo Advanced Starter Kit
- Arduino Nano
- Raspberry PI 5
- Raspberry PI 400
- Raspberry PI Pico
- Programmiamo il Pico