Skillbook Logo
foto profilo

Categoria: Tutorials


Excel delle meraviglie Lezione 11 - Come analizzare i dati con le Tabelle Pivot

Gino Visciano | Skill Factory - 08/06/2024 18:16:21 | in Tutorials

Nelle lezioni precedenti abbiamo visto i principali strumenti per l'analisi dei dati con Excel. In questa nuova lezione approfondiamo ulteriormente l'argomento dell'analisi dei dati con excel, attraverso le tabelle pivot.

Una tabella pivot è un efficace strumento di tipo decisionale perché permette di organizzare e analizzare i dati in base a prospettive diverse create combinado tra loro righe, colonne e valori.

Il termine pivot, in francese perno, serve ad indicare una matrice dove è possibile scambiare  righe e colonne, questa tecnica, viene anche chiamata pivotizzazione o pivoting.

Per scoprire insieme le potenzialità delle tabelle pivot, immaginiamo di aver esportato in un file di tipo csv, i dati delle vendite degli ultimi tre anni del nostro e-commerce, come mostra l'immagine seguente:

Nella prima riga del file sono presenti i nomi delle colonne; le atre righe contengono i dati separati da un punto e virgola ";", chiamato delimitatore.

Per eseguire il download del file vendite_online.csv clicca qui.

Per iniziare a lovorare dovete importare il file vendite_online.csv in excel, selezionando Dati, Recupera dati, Da file e cliccando sul comando: Da testo/CSV: 

 

Quando appare la finestra importa dati, basta selezionare il file e cliccare sul pulsante importa:

Infine quando appare la finestra seguente: 

cliccate sul pulsante carica.

Per convertire i valori numerici della prima colonna, nelle date di vendita corrispondenti, basta selezionare l'intera colonna cliccando sulla lettera A, come mostra l'immagine seguente:

Premere il tasto destro del mouse, selezionare il comando Formato celle, Data e cliccare sul formato data gg/mm/aaaa (Italiano), come mostra l'immagine seguente:

Il risultato sarà il seguente:

A questo punto possiamo creare la tabella pivot, che ci permetterà di analizzare i dati importati dal nostro e-commerce.

Posizionate il cursore nella cella A1 della tabella vendite_online, selezionate il menu Inserisci e cliccate sul comando Tabella pivot, come mostra l'immagine seguente:

 Confermate la finestra seguente,  cliccando sul pulsante OK:

Dopo la conferma verrà creato un nuovo foglio di lavoro che contiene la taballa pivot che inizialmente non conterrà nessuna informazione, come mostra l'immagine seguente:

Utilizzeremo il pannello a destra per organizzare i campi per righe e colonne in base al tipo di analisi che intendiamo fare e nella sezione valori inseriremo i campi che vogliamo misurare applicando le funzioni statistiche disponibili, come ad esempio: la somma, la media, il minimo, il massimo e il conteggio.

Iniziamo subito a fare degli esempi.

Esempio 1

La tabella vendite_online contiene 2000 movimenti di prodotti venduti dal 2021 al 2023, ma quali sono i singoli prodotti?

Per rispondere a questa domanda basta trascinare il campo prodotto nella sezione delle righe, come mostra l'immagine seguente:

Esempio 2

Oltre a conoscere quali sono i prodotti venduti voglimo sapere anche quanti ne abbiamo venduti in 3 anni.
Per rispondere a questa domanda, dovete trascinare il campo quantità nella sezione valori e sommarlo, come mostra l'immagine seguente:

Esempio 3

Oltre a conoscere quali sono i prodotti venduti voglimo sapere anche quanti ne abbiamo venduti in 3 anni e quanto abbiamo incassato.
Per rispondere a questa domanda, dovete sommare i campi quantita e incasso trascinandoli nella sezione valori,  come mostra l'immagine seguente:
 

Esempio 4 

Per ogni anno disponibile vogliamo conoscere quali prodotti abbiamo venduto, la quantità e quanto abbiamo incassato.
Per rispodere a questa domanda, partendo dalle impostazioni delle esempio precedente, dovete selezionare il campo DATA_ACQUISTO.
Quando si seleziona un campo di tipo data, automaticamente Excel genera i seguenti campi di raggruppamento:

1) Anni
2) Trimestri
3) Mesi

come mostra l'immagine seguente:

Per ottenere le informazioni richieste, dovete lasciare nella sezione delle righe il campo anni e quello prodotto.
Per eliminare i campi dalla sezione delle righe, trascinateli fuori dalla sezione con il mouse, attraverso un'operazione di drag & drop.
L'immagine seguente mostra il risultato atteso:

Per visualizzare i dati dei singoli anni, basta aprire i raggruppamenti cliccando sul segno +, come mostra l'immagine seguente:

Esempio 5 

Vogliamo conoscere i dati delle vendite del 2023, organizzate per trimestri.
Partendo dalla soluzione dell'esempio precedente, prima di tutto dovete aggiungere il campo trimestri nella sezione delle colonne.
Successivamente, per filtrare solo le vendite del 2023, dovete spostare il campo anni nella sezione filtri.
Attenzione, per filtrare solo le vendite del 2023, dovete aprire il filtro in alto a sinistra e cliccare sull'anno 2023, come mostra l'immagine seguente:

L'immagine seguente mostra il risultato finale, dopo l'attivazione del filtro 2023:

Esempio 6 

Vogliamo conoscere i dati delle vendite del primo trimestre del 2023, organizzate per sesso.
Partendo dalla soluzione dell'esempio precedente, prima di tutto dovete spostare il campo trimestri nella sezione filtri, dopo gli anni, poi dovete aggiungere il campo sesso nella sezione delle colonne.
Attenzione, per filtrare solo il primo trimestre del 2023, dovete impostre ill filtro in alto a sinistra. L'immagine seguente mostra il risultato finale, dopo l'attivazione del filtro primo trimestre anno 2023:

Esempio 7 

Attraverso un grafico pivot, vogliamo conoscere qual è il prodotto che ha realizzato il maggiore incasso nel 2023.

Per risolvere questo problema, torniamo nel foglio di lavoro vendite_online e ci posizioniamo con il cursore in A1.
Successivamente selezioniamo il menu inserisci e clicchaimo sul comando grafico pivot, come mostra l'immagine seguente:

Dopo aver confermato la finestra crea grafico pivot:

verrà aggiunto un nuovo foglio di lavoro che conterrà il grafico di pivot, come mostra l'immagine seguente:

A questo punto per conoscere il prodotto che ha realizzato il maggiore incasso nel 2023 dovete eseguire i passaggi seguenti:

1) nella sezione asse aggiungere il campo prodotto
2) nella sezione valori aggiungere il campo incasso
3) nella sezione filtri aggiungere il campo anni
4) Impostare l'anno 2023, cliccando in alto a sinistra del grafico pivot.

Come mostra l'immagine seguente il grafico pivot ci indica che il prodotto che ha realizzato il profitto maggiore nel 2023 è il compasso:

Nella prossima lezione impareremo a creare funzioni personalizzate, il primo passo per imparare a programmare con Excel.


Per il download del file excel vendite_online.xlsx clicca qui.


<< Lezione precedente | Vai alla prima lezione


T U T O R I A L S    S U G G E R I T I


PAR GOL (Garanzia di Occupabilità dei Lavoratori)

Se sei residente in Campania e cerchi lavoro, sai che puoi partecipare gratuitamente ad un corso di formazione professionale PAR GOL?

I corsi di formazione professionale PAR GOL sono finanziati dalla Regione Campania e ti permettono di acquisire una Qualifica Professionale Europea (EQF) e di partecipare ad un tirocinio formativo aziendale.

Invia il tuo CV o una manifestazione d'interesse a: recruiting@skillfactory.it


oppure

chiama ai seguenti numeri di telefono:

Tel.: 081/18181361
Cell.: 327 0870141

oppure

Contattaci attraverso il nostro sito: www.skillfactory.it


Per maggiori informazioni sul progetto PAR GOLclicca qui.

Per maggiori informazioni sulle Qualifiche Professionali Europee (EQF)clicca qui.


Academy delle professioni digitali

Per consultare il catalogo dei corsi online della nostra Academy ...

... collegati al nostro sito: www.skillfactory.it

Share Button

Competenze per programmare: le espressioni regolari (REGEXP)

Gino Visciano | Skill Factory - 25/04/2024 10:55:56 | in Tutorials

Tra le attività svolte dai programmatori rientra anche quelle di controllare il formato dei dati, per verificare se corrispondono alle specifiche previste dal programma.
Ad esempio, il codice fiscale di una persona per essere corretto deve avere il formato seguente:

3 caratteri alfabetici per il cognome;
3 caratteri alfabetici per il nome;
2 caratteri numerici per l'anno di nascita;
1 carattere alfabetico per il mese di nascita;
2 caratteri numerici per il giorno di nascita ed il sesso;
4 caratteri associati al Comune oppure allo Stato estero di nascita;
1 carattere alfabetico usato come carattere di controllo.

Nei linguaggi di programmazione per controllare se il formato dei dati forniti al programma è corretto si usano le esperssioni regolari (regexp).

Le REGEXP sono stringhe che si costruiscono in base al tipo di formato da verificare; confrontando queste stringhe di formato, chiamate anche pattern, con la stringa che contiene l'informazione da controllare, si può verificare se il formato corrisponde.

Ad esempio, nel caso del codice fiscale di una persona, la stringa REGEXP da confrontare con il campo o la variabile che contiene il codice fiscale è la seguente:

^[A-Z]{6}[0-9]{2}[A-Z][0-9]{2}[A-Z][0-9]{3}[A-Z]$

Per creare un'espressione regolare su usano:

Ancore
Qualificatori
Classi
Modificatori
Caratteri speciali

Ancore
^ - identifica l'inizio della stringa;
$ - identifica la fine della stringa.

Ad esempio, la stringa REGEXP seguente:

^[A-Z]

verifica se all'inizio della stringa che stiamo controllando è presente una lettera alfabetica maiuscola, mentre:

[A-Za-z]$

verifica se alla fine della stringa che stiamo controllando è presente una lettera alfabetica maiuscola oppure minuscola.

Qualificatori

* - indica 0 o più ricorrenze;
+ - indica 1 o più ricorrenze;
? - indica 1 o 0 ricorrenze;
{n} - verifica esattamente n occorrenze;
{n,} - verifica minimo n occorrenze;
{n,m} - verifica esattamente minimo n occorrenze, massimo m.

Esempi:

La stringa REGEXP seguente:

[A-Z]+

verifica se la stringa inizia almeno con una lettera maiuscola, ma la stringa può contenere qualunque tipi di carattere.

La stringa REGEXP seguente:

^[A-Z]+$

verifica se la stringa conriene almeno con una lettera maiuscola, ma la stringa può essere composta solo da lettere miuscole.

La stringa REGEXP seguente:

^[A-Z]{6}

verifica se all'inizio della stringa che stiamo controllando sono presenti 6 lettere alfabetiche maiuscole.

La stringa REGEXP seguente:

[0-9]{3,5}$

verifica se alla fine della stringa che stiamo controllando ci sono almeno da 3 a 5 numeri.

Se togliamo l'ancora dall'espressione regolare:

[0-9]{3,5}

otteniamo che la stringa che stiamo controllando deve essere composta da 3 a 5 numeri.

Altri esempri:

equivale a {0,}

+ equivale a {1,}

? equivale a {1,0}

[uno]{3} equivale ad una delle seguenti parole: uno, uon, nuo, nou, onu, oun.

 

Classi
Le classi determinano un elenco di caratteri, vengono racchiuse tra parentesi quadre e possono essere seguite dai quantificatori.

[0-9] una cifra da 0 a 9;
[0-9]+ almeno una cifra da 0 a 9;
[^0-9] qualunque carattere a parte i numeri;
[a-z] una lettera alfabetica minuscola;
[A-Z] una lettera alfabetica maiuscola;
[a-zA-Z] una lettera alfabetica minuscola o maiuscola;
[^a-zA-Z] qualunque carattere a parte le lettera alfabetica minuscole e maiuscole;
[0-9a-zA-Z] una lettera oppure un numero;
[0-9,]+ contiene almeno una cifra o una virgola.

Esempi:

La stringa REGEXP seguente:

[^0-9]+

verifica se la stringa inizia almeno con un carattere diverso da un numeo.

La stringa REGEXP seguente:

^[^0-9]+$

verifica se la stringa non contiene numeri ed è composta almeno da un carattere.

La stringa REGEXP seguente:

^[^0-9]*$

verifica se la stringa non contiene numeri, in questo caso può anche essere vuota.
 
La stringa REGEXP seguente:
 
((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{8,20})
 
Verifica che la password deve contenere un numero, un carattere minuscolo, uno maiuscolo e un carattere speciale tra @#$% e deve avere lunghezza min 8 e max 20
 

Modificatori
i - la verifica diventa case-insensitive, cioè maiuscole e minuscole vengono considerate uguali;
m - la verifica verrà considerate “per riga”, cioè le ancore tipo “^” e “$” verranno applicate per ogni riga di testo;
g - cerca tutte le ricorrenze e non solo la prima.

Caratteri speciali
. - corrisponde ad un carattere qualsiasi (ex. [.]{5} parola di cinque caratteri);
\. - indica il carattere punto;
\( - indica il carattere parentesi;
| - indica oppure (ex. [r|t] parola che contiene un solo carattere che può essere r oppure t);
\d - ricerca cifre numeriche, corrisponde a [0-9]+;
\D - non contiene cifre numeriche, corrisponde a [^0-9]+;
\t - ricerca tabulazione (TAB);
\n - ricerca fine riga (LF);
\r - ricerca ritorno a capo (CR);
\s - ricerca lo spazio;
\S - non contiene lo spazio;
\uxxx - ricerca il carattere indicato con il codice unicode xxx;
\w - ricerca qualsiasi carattere alfanumerico inclusi "_" e lo spazio, corrisponde a [0-9a-zA-Z_ ];
\W - ricerca qualsiasi carattere non alfanumerico, corrisponde a [^0-9a-zA-Z_ ].

 

Esempi:

La stringa REGEXP seguente:

[s|S]kill [f|Factory]
 
La stringa skill factory è valida anche se inizia con le lettere maiuscole.

La stringa REGEXP seguente:

[^0-9]*\n
 
verifica se la nella stringa che non contiene numeri, esiste il codice di fine riga (a capo = \n).
 
La stringa REGEXP seguente:
 
\w*\s
 

verifica se la stringa alfanumerica contiene uno spazio.

La stringa REGEXP seguente:
 
\w*\S
 

verifica se la stringa alfanumerica non contiene spazi.

 


Esempio 1

Verificare se il valore della stringa è in formato euro:

Soluzione Python:

# Formato EURO
import re
stringa="12300,00"
formato="\d*(\.|\,)\d{2}"
if re.match(formato,stringa)!=None:
    print(stringa+":Euro OK")
else:
    print(stringa+":Euro NO")
stringa="12300.00"
if re.match(formato,stringa)!=None:
    print(stringa+":Euro OK")
else:
    print(stringa+":Euro NO")
stringa="12300,0"
if re.match(formato,stringa)!=None:
    print(stringa+":Euro OK")
else:
    print(stringa+":Euro NO")
stringa="123000"
if re.match(formato,stringa)!=None:
    print(stringa+":Euro OK")
else:
    print(stringa+":Euro NO")

 

----- OUTPUT -----

12300,00:Euro OK
12300.00:Euro OK
12300,0:Euro NO
123000:Euro NO

Soluzione JavaScript:

// Formato EURO
stringa = "12300,00"
formato = /\d*(\.|\,)\d{2}/
if (stringa.match(formato)) {
    console.log(stringa + ":Euro OK")
} else {
    console.log(stringa + ":Euro NO")
}
stringa = "12300.00"
if (stringa.match(formato)) {
    console.log(stringa + ":Euro OK")
} else {
    console.log(stringa + ":Euro NO")
}
stringa = "12300,0"
if (stringa.match(formato)) {
    console.log(stringa + ":Euro OK")
} else {
    console.log(stringa + ":Euro NO")
}
stringa = "123000"
if (stringa.match(formato)) {
    console.log(stringa + ":Euro OK")
} else {
    console.log(stringa + ":Euro NO")
}

----- OUTPUT -----
12300,00:Euro OK
12300.00:Euro OK
12300,0:Euro NO
123000:Euro NO


Esempio 2

Verificare se il valore della stringa è in formato data gg/mm/aaaa:

Soluzione Python:

# Formato DATA gg/mm/aaaa
import re
stringa="31/05/2024"
formato="(0[1-9]|[12][0-9]|3[01])[-/](0[1-9]|1[012])[-/](19|20)\d\d"
if re.match(formato,stringa)!=None:
    print(stringa+":Data OK")
else:
    print(stringa+":Data NO")
stringa="30/03/2024"
if re.match(formato,stringa)!=None:
    print(stringa+":Data OK")
else:
    print(stringa+":Data NO")
stringa="31-05-2024"
if re.match(formato,stringa)!=None:
    print(stringa+":Data OK")
else:
    print(stringa+":Data NO")
stringa="31-05-24"
if re.match(formato,stringa)!=None:
    print(stringa+":Data OK")
else:
    print(stringa+":Data NO")
stringa="31-05-2024"
if re.match(formato,stringa)!=None:
    print(stringa+":Data OK")
else:
    print(stringa+":Data NO")
stringa="32-05-2024"
if re.match(formato,stringa)!=None:
    print(stringa+":Data OK")
else:
    print(stringa+":Data NO")
stringa="31-15-2024"
if re.match(formato,stringa)!=None:
    print(stringa+":Data OK")
else:
    print(stringa+":Data NO")

 

----- OUTPUT -----

31/05/2024:Data OK
30/03/2024:Data OK
31-05-2024:Data OK
31-05-24:Data NO
31-05-2024:Data OK
32-05-2024:Data NO
31-15-2024:Data NO

Soluzione JavaScript:

// Formato DATA gg/mm/aaaa
stringa = "31/05/2024"
formato = /(0[1-9]|[12][0-9]|3[01])[-/](0[1-9]|1[012])[-/](19|20)\d\d/
if (stringa.match(formato, stringa)) {
    console.log(stringa + ": Data OK")
} else {
    console.log(stringa + ": Data NO")
}
stringa = "30/03/2024"
if (stringa.match(formato, stringa)) {
    console.log(stringa + ": Data OK")
} else {
    console.log(stringa + ": Data NO")
}
stringa = "31-05-2024"
if (stringa.match(formato, stringa)) {
    console.log(stringa + ": Data OK")
} else {
    console.log(stringa + ": Data NO")
}
stringa = "31-05-24"
if (stringa.match(formato, stringa)) {
    console.log(stringa + ": Data OK")
} else {
    console.log(stringa + ": Data NO")
}
stringa = "31-05-2024"
if (stringa.match(formato, stringa)) {
    console.log(stringa + ": Data OK")
} else {
    console.log(stringa + ": Data NO")
}
stringa = "32-05-2024"
if (stringa.match(formato, stringa)) {
    console.log(stringa + ": Data OK")
} else {
    console.log(stringa + ": Data NO")
}
stringa = "31-15-2024"
if (stringa.match(formato, stringa)) {
    console.log(stringa + ": Data OK")
} else {
    console.log(stringa + ":Data NO")
}
 

----- OUTPUT -----
31/05/2024: Data OK
30/03/2024: Data OK
31-05-2024: Data OK
31-05-24: Data NO
31-05-2024: Data OK
32-05-2024: Data NO
31-15-2024: Data NO

 

Esempio 3

Verificare se il nome utente è formato da soli caratteri alfanumerici minuscoli, più  _ e – di lungezza min 3 e max 15

Soluzione Python:

# Nome utente è formato da soli caratteri alfanumerici minuscoli, più  _ e – di lungezza min 3 e max 15
import re
nome="marco_"
formato="^[a-z0-9_-]{3,15}$"
if re.match(formato,nome)!=None:
    print(nome+":Nome utente OK")
else:
    print(nome+":Nome utente NO")
nome="Marco_"
if re.match(formato,nome)!=None:
    print(nome+":Nome utente OK")
else:
    print(nome+":Nome utente NO")
nome="paolo_rossi!"
if re.match(formato,nome)!=None:
    print(nome+":Nome utente OK")
else:
    print(nome+":Nome utente NO")
nome="paolo_rossi_01"
if re.match(formato,nome)!=None:
    print(nome+":Nome utente OK")
else:
    print(nome+":Nome utente NO")
nome="pr"
if re.match(formato,nome)!=None:
    print(nome+":Nome utente OK")
else:
    print(nome+":Nome utente NO")
nome="paolo_rossi_primo"
if re.match(formato,nome)!=None:
    print(nome+":Nome utente OK")
else:
    print(nome+":Nome utente NO")
nome="paolorossiprimo"
if re.match(formato,nome)!=None:
    print(nome+":Nome utente OK")
else:
    print(nome+":Nome utente NO")

 

----- OUTPUT -----

marco_:Nome utente OK
Marco_:Nome utente NO
paolo_rossi!:Nome utente NO
paolo_rossi_01:Nome utente OK
pr:Nome utente NO
paolo_rossi_primo:Nome utente NO
paolorossiprimo:Nome utente OK

Soluzione JavaScript:

// Nome utente è formato da soli caratteri alfanumerici minuscoli, più  _ e – di lungezza min 3 e max 15
nome = "marco_"
formato = /^[a-z0-9_-]{3,15}$/
if (nome.match(formato, nome)) {
    console.log(nome + ":Nome utente OK")
}
else {
    console.log(nome + ":Nome utente NO")
}
nome = "Marco_"
if (nome.match(formato, nome)) {
    console.log(nome + ":Nome utente OK")
}
else {
    console.log(nome + ":Nome utente NO")
}
nome = "paolo_rossi!"
if (nome.match(formato, nome)) {
    console.log(nome + ":Nome utente OK")
}
else {
    console.log(nome + ":Nome utente NO")
}
nome = "paolo_rossi_01"
if (nome.match(formato, nome)) {
    console.log(nome + ":Nome utente OK")
}
else {
    console.log(nome + ":Nome utente NO")
} nome = "pr"
if (nome.match(formato, nome)) {
    console.log(nome + ":Nome utente OK")
}
else {
    console.log(nome + ":Nome utente NO")
} nome = "paolo_rossi_primo"
if (nome.match(formato, nome)) {
    console.log(nome + ":Nome utente OK")
}
else {
    console.log(nome + ":Nome utente NO")
} nome = "paolorossiprimo"
if (nome.match(formato, nome)) {
    console.log(nome + ":Nome utente OK")
}
else {
    console.log(nome + ":Nome utente NO")
}

----- OUTPUT -----

marco_:Nome utente OK
Marco_:Nome utente NO
paolo_rossi!:Nome utente NO
paolo_rossi_01:Nome utente OK
pr:Nome utente NO
paolo_rossi_primo:Nome utente NO
paolorossiprimo:Nome utente OK

 

Esempio 4

Verificare se la partita iva aziendale è corretta

Soluzione Python:

# Formato partita iva
import re
piva="a1234567890"
formato="\d{11}"
if re.match(formato,piva)!=None:
    print(piva+":Partita iva OK")
else:
    print(piva+":Partita iva NO")
piva="12345678901"
if re.match(formato,piva)!=None:
    print(piva+":Partita iva OK")
else:
    print(piva+":Partita iva NO")
piva="1234567890a"
if re.match(formato,piva)!=None:
    print(piva+":Partita iva OK")
else:
    print(piva+":Partita iva NO")

 

----- OUTPUT -----

a1234567890:Partita iva NO
12345678901:Partita iva OK
1234567890a:Partita iva NO

Soluzione JavaScript:

// Formato partita iva
piva = "a1234567890"
formato = /\d{11}/
if (piva.match(formato, piva)) {
    console.log(piva + ":Partita iva OK")
} else {
    console.log(piva + ":Partita iva NO")
}
piva = "12345678901"
if (piva.match(formato, piva)) {
    console.log(piva + ":Partita iva OK")
} else {
    console.log(piva + ":Partita iva NO")
}
piva = "1234567890a"
if (piva.match(formato, piva)) {
    console.log(piva + ":Partita iva OK")
} else {
    console.log(piva + ":Partita iva NO")
}

----- OUTPUT -----

a1234567890:Partita iva NO
12345678901:Partita iva OK
1234567890a:Partita iva NO

 
 

Esempio 5

Verificare se l'indirizzo e-mail è corretto

Soluzione Python:

# Formato e-mail
import re
email="gv@gmail.it"
formato="[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$"
if re.match(formato,email)!=None:
    print(email+":Indirizzo e-mail OK")
else:
    print(email+":Indirizzo e-mail NO")
email="@gmail.it"
if re.match(formato,email)!=None:
    print(email+":Indirizzo e-mail OK")
else:
    print(email+":Indirizzo e-mail NO")
email="gv.gmail.it"
if re.match(formato,email)!=None:
    print(email+":Indirizzo e-mail OK")
else:
    print(email+":Indirizzo e-mail NO")
email="gv@gmail.italia"
if re.match(formato,email)!=None:
    print(email+":Indirizzo e-mail OK")
else:
    print(email+":Indirizzo e-mail NO")
email="gv@gmail.com"
if re.match(formato,email)!=None:
    print(email+":Indirizzo e-mail OK")
else:
    print(email+":Indirizzo e-mail NO")
email="gv@gmailcom"
if re.match(formato,email)!=None:
    print(email+":Indirizzo e-mail OK")
else:
    print(email+":Indirizzo e-mail NO")

 

----- OUTPUT -----

gv@gmail.it:Indirizzo e-mail OK
@gmail.it:Indirizzo e-mail NO
gv.gmail.it:Indirizzo e-mail NO
gv@gmail.italia:Indirizzo e-mail NO
gv@gmail.com:Indirizzo e-mail OK
gv@gmailcom:Indirizzo e-mail NO

 

Soluzione JavaScript:

// Formato e-mail
email = "gv@gmail.it"
formato = /[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/
if (email.match(formato, email)) {
    console.log(email + ":Indirizzo e-mail OK")
} else {
    console.log(email + ":Indirizzo e-mail NO")
}
email = "@gmail.it"
if (email.match(formato, email)) {
    console.log(email + ":Indirizzo e-mail OK")
} else {
    console.log(email + ":Indirizzo e-mail NO")
}
email = "gv.gmail.it"
if (email.match(formato, email)) {
    console.log(email + ":Indirizzo e-mail OK")
} else {
    console.log(email + ":Indirizzo e-mail NO")
}
email = "gv@gmail.italia"
if (email.match(formato, email)) {
    console.log(email + ":Indirizzo e-mail OK")
} else {
    console.log(email + ":Indirizzo e-mail NO")
}
email = "gv@gmail.com"
if (email.match(formato, email)) {
    console.log(email + ":Indirizzo e-mail OK")
} else {
    console.log(email + ":Indirizzo e-mail NO")
}
email = "gv@gmailcom"
if (email.match(formato, email)) {
    console.log(email + ":Indirizzo e-mail OK")
} else {
    console.log(email + ":Indirizzo e-mail NO")
}
 

----- OUTPUT -----

gv@gmail.it:Indirizzo e-mail OK
@gmail.it:Indirizzo e-mail NO
gv.gmail.it:Indirizzo e-mail NO
gv@gmail.italia:Indirizzo e-mail NO
gv@gmail.com:Indirizzo e-mail OK
gv@gmailcom:Indirizzo e-mail NO


Leggi anche le altre lezioni ...

COMPETENZE PER PROGRAMMARE:
1-I sistemi di numerazione
2-Mondo reale e Mondo Digitale
3-La reppresentazione digitale dei numeri interi e decimali
4-Le stringhe


Segui sul canale YouTube "Skill Factory Channel" la Playlist: COMPETENZE PER PROGRAMMARE


TUTORIALS
1-Laboratori di logica di programmazione in C
2-Impariamo a programmare con JavaScript
3-Ricominciamo dal linguaggio SQL
4-Introduzione alla logica degli oggetti
5-TypeScript
6-Impariamo a programmare in Python
7-Come sviluppare un sito in WordPress


PAR GOL (Garanzia di Occupabilità dei Lavoratori)

Se sei residente in Campania e cerchi lavoro, sai che puoi partecipare gratuitamente ad un corso di formazione professionale PAR GOL?

I corsi di formazione professionale PAR GOL sono finanziati dalla Regione Campania e ti permettono di acquisire una Qualifica Professionale Europea (EQF) e di partecipare ad un tirocinio formativo aziendale.

Invia il tuo CV o una manifestazione d'interesse a: recruiting@skillfactory.it

oppure

chiama ai seguenti numeri di telefono:

Tel.: 081/18181361
Cell.: 327 0870141

oppure

Contattaci attraverso il nostro sito: www.skillfactory.it


Per maggiori informazioni sul progetto PAR GOLclicca qui.

Per maggiori informazioni sulle Qualifiche Professionali Europee (EQF)clicca qui.


Academy delle professioni digitali

Per consultare il catalogo dei corsi online della nostra Academy ...

... collegati al nostro sito: www.skillfactory.it

Share Button

Competenze per programmare: le stringhe

Gino Visciano | Skill Factory - 13/04/2024 09:49:41 | in Tutorials


Le stringhe sono sequenze di caratteri delimitate da apici o doppi apici, ad esempio:

"Stringa delimitata da doppi apici"

oppure

'Stringa delimitata da singoli apici'.

L'uso dell'apice o del doppio apice dipende dal linguaggio di programmazione che stai utilizzando, ad esempio in Pyhton o JavaScript, per indicare le stringhe puoi usare sia gli apci che i doppi apici, in C, C++, Java e C#, devi usare i doppi apici, in SQL si usano solo gli apici. In PHP l'uso degli apici oppure dei doppi apici può avere un comportamento diverso, quindi se devi usare questo linguaggio approfondisci l'argomento.

I caratteri che compongono le stringhe sono gli stessi che si usano per scrivere e formattare il testo, in sintesi li possiamo distinguere nel modo seguente:

1) le lettere dell’alfabeto sia maiuscole, sia minuscole, incluese quelle dell'alfabeto inglese (J K W X Y);
2) le lettere accentate e i dittonghi;
3) lo spazio;
4) le cifre da 0 a 9;
5) i simboli d’interpunzione (. , ; : ? !);
6) tutti i tipi di parentesi () [] {};
7) qualunque altro tipo di simbolo usato per scrivere formule, valute, percentuali, apostrofi, accenti (+ - * /  ^ & % $ " ‘ etc.);
8) caratteri particolari utilizzati nelle diverse lingue del mondo;
9) Il carattere indefinito null;
10) i caratteri speciali per la formattazione del testo: return (vai a inizio riga) , il new line (vai sulla riga seguente) e la tabulazione (imposta più spazi tra le parole).

Quando lavori con le stringhe è importante decidere la codifica che intendi usare per il riconoscimento dei caratteri, perché se non usi la codifica giusta, il testo contenuto nelle stringhe potrebbe diventare incomprensibile.

Le codifiche principali sono 2:

1) ASCII o UTF-8;
2) UNICODE o UTF-16.

La codifica ASCII o UTF-8, la più comune, prevede 256 caratteri diversi, inclusi quelli speciali e occupa un byte per ogni carattere della stringa, mentre la codifica UNICODE o UTF-16, predefinita in Java, prevede 65536 caratteri diversi e occupa due byte per ogni carattere della stringa.

Quindi, se i caratteri di una stringa non incomprensibili, verifica sempre se la codifica che stai usando è quella giusta.

Operazioni principali per gestire le stringhe

Quando lavori con le stringhe sono fondamentali le seguenti operazioni:

1) verificare la lunghezza di una stringa;
2) convertire la stringa in maiuscolo o minuscolo;
3) trasformare un numero intero o decimale in stringa e viceversa;
4) dividere la stringa in sottostringhe;
5) scomporre una stringa in caratteri;
6) invertire i caratteri di una stringa;
7) cercare la posizione di una sottostringa in una stringa;
8) sostituire una sottostringa di una stringa con una ricorrenza diversa;
9) eliminare spazi da una stringa;
10) convertire una stringa in formato csv in un vettore di stringhe;
11) convertire un vettore di stringhe in una stringa.

Se hai già pronto l'ambiente di lavoro clicca qui.


Come preparare l'ambiente di lavoro per eseguire gli esempi Python e JavaScript

Per eseguire gli esempi di questa lezione devi prima prepare l'ambiente di lavoro svolgendo le seguenti attività:

1. Installazione di Python
Per eseguire il download del setup di Python clica qui.
Dopo il download del setup, eseguilo per installare Python.
Attenzione, durante l'installazione non dimenticare di spuntare l'opzione Add Python 3.X to PATH.
Per verificare la corretta installazione di Python, avvia il prompt dei comandi (cmd) ed esegui il comando:
python --version
Per completare l'attività su c: crea la directory lab_python, userai questa cartella per salvare gli esercizi Python.

2. Installazione Node.js (JavaScript)
Per eseguire il download del setup di Node.js clicca qui.
Dopo il download del setup, eseguilo per installare Node.js.
Per verificare la corretta installazione di Node.js, avvia il prompt dei comandi (cmd) ed esegui il comando:
node --version

In JavaScript per eseguire un input da tastiera, devi installare il modulo readline.sync.
Per eseguire questa operazione, sempre da prompt dei comandi, esegui il comando:
npm install readline-sync

Per completare l'attività su c: crea la directory lab_javascript, userai questa cartella per salvare gli esercizi JavaScript.

3. Installazione di Visual Studio Code
Per eseguire il download del setup di Visual Studio Code clicca qui.
Dopo il download del setup, eseguilo per installare Visual Studio Code.
Per verificare la corretta installazione di Visual Studio Code, avvia il prompt dei comandi (cmd) ed esegui il comando:
code --version

4. Configurazione di Visual Studio Code
Avvia Visual Studio Code cliccando sull'icona seguente:

Per configurare Python, premi i tasti ctrl ed n contemporaneamente per creare un nuovo file, altrimenti usa il menu, selezionando nuovo file di testo.
Scrivi nel file il comando seguente:
print("Hello World)

Premi i tasti ctrl ed s contemporaneamente per salvare il file, altrimenti usa il menu, selezionando file, salva.
Assicurati di salvare il file nella directory c:\lab_python, con il nome prova.py.
Conferma l'installazione di tutti i palg in proposti da Visual Studio Code.
Dopo il salvataggio, per eseguire il programma, clicca sul triangolino (Run Python File) che appare in alto a destra:

Usa la stessa procedura per creare e lanciare qualunque programma Python.

Per configurare JavaScript, premi i tasti ctrl ed n contemporaneamente per creare un nuovo file, altrimenti usa il menu, selezionando nuovo file di testo.
Scrivi nel file il comando seguente:
console.log("Hello World)

Premi i tasti ctrl ed s contemporaneamente per salvare il file, altrimenti usa il menu, selezionando file, salva.
Assicurati di salvare il file nella directory c:\lab_javascript, con il nome prova.js.
Conferma l'installazione di tutti i palg in proposti da Visual Studio Code.

Dopo il salvataggio, per eseguire il programma, apri un nuovo terminale:

Puoi eseguire questa operazione anche premendo contemporaneamente i tasti crtl shift ò.

Se il terminale proposto e di tipo Powershell (il prompt dei comandi inizia con PS), ti suggerisco di passare a quello standard, per evitare problemi di autorizzazioni.
Per passare da terminale Powershell a quello standard, esegui il comando:
cmd

Per eseguire i programmi JavaScript con Node.js, devi attivare la directory dove hai salvato i file, quindi esegui il comando seguente:
cd c:\lab_javascript

Per avviare il programma scrivi il comando:
node prova.js

Usa la stessa procedura per creare e lanciare qualunque programma JavaScript

Per imparare a programmare in Python e JavaScript clicca qui.


Gli esempi seguenti descrivono le tecniche fondamentali di programmazione per imparere a gestire le stringhe con Python e JavaScript.
Per eseguire il codice, crea un file di testo in Visual Studio Code, copia e incolla il codice dell'esempio e salvalo con estensione py nella directory c:\lab_python se è un esempio Python, altrimenti salvalo nella directory c:\lab_javascript con l'estensione js se è un esempio JavaScript

Infine, per avviare il codice procedi come indicato nell'attività:

4. Configurazione di Visual Studio Code

del capitolo "Come preparare l'ambiente di lavoro per eseguire gli esempi Python e JavaScript". 
 


Esempio 1

Visualizzare la lunghezza della stringa nominativo.

Soluzione Python:

# Lunghezza stringa
nominativo='Competenze per programmare'
print('Stringa nominativo: '+nominativo)
# La funzione len restitusce un numero intero che corrisponde alla lunghezza della stringa data come argomento
# La funzione str converte il numero intero corrispondente alla lunghezza della stringa, in stringa
# Python non riesce a concatenare stringhe con numeri interi o decimali, qundi i numeri devono essere trasformati in stringhe
print('Lunghezza stringa: '+str(len(nominativo))) 

----- OUTPUT -----

Stringa nominativo: Competenze per programmare
Lunghezza stringa: 26

Soluzione JavaScript:

// Lunghezza stringa
var nominativo='Competenze per programmare'
console.log('Stringa nominativo: '+nominativo)
console.log('Lunghezza stringa: '+nominativo.length) 

Esempio 2

Inserire due numeri da tastiera e stampare la loro somma.

Soluzione Python:

# Stampare la somma di due numeri interi inseriti da tastiera

# I numeri inseriti da tastiera sono stringhe, la funzione int li converte in numeri interi
numeroUno=int(input("Primo numero da sommare: "))
numeroDue=int(input("Secondo numero da sommare: "))
somma=numeroUno+numeroDue
# La funzione str converte i numeri interi o decimali in stringhe, perché Python concatena solo stringhe
print("La somma dei numeri "+str(numeroUno)+" e "+str(numeroDue)+" è "+str(somma)+".")

----- OUTPUT -----

Primo numero da sommare: 10
Secondo numero da sommare: 5
La somma dei numeri 10 e 5 è 15.

Soluzione JavaScript:

// Stampare la somma di due numeri interi inseriti da tastiera
// I numeri inseriti da tastiera sono stringhe, la funzione int li converte in numeri interi
var input=require("readline-sync")
var numeroUno=0
var numeroDue=0
numeroUno=parseInt(input.question("Primo numero da sommare: "))
numeroDue=parseInt(input.question("Secondo numero da sommare: "))
var somma=numeroUno+numeroDue
console.log("La somma dei numeri "+numeroUno+" e "+numeroDue+" è "+somma+".")

Esempio 3

Inserire un dividendo e un divisore da tastiera e stampare il risultato della loro divisione.

Soluzione Python:

# Stampare la divisione di due numeri decimali inseriti da tastiera

# I numeri inseriti da tastiera sono stringhe, la funzione float li converte in numeri decimali
dividendo=float(input("Dividendo: "))
divisore=float(input("Divisore: "))
risultato=dividendo/divisore
# Arrotondo il risultato a 2 cifre decimali con la funzione round
risultato=round(risultato*100)/100
print("La divisione tra "+str(dividendo)+" e "+str(divisore)+" è "+str(risultato)+".")

----- OUTPUT -----

Dividendo: 10
Divisore: 3
La divisione tra 10.0 e 3.0 è 3.33.
 

Soluzione JavaScript:

// Stampare la divisione di due numeri decimali inseriti da tastiera
// I numeri inseriti da tastiera sono stringhe, la funzione float li converte in numeri decimali
var input=require("readline-sync")
var dividendo=0.0
var divisore=0.0
var risultato=0.0
dividendo=parseFloat(input.question("Dividendo: "))
divisore=parseFloat(input.question("Divisore: "))
risultato=dividendo/divisore
// Arrotondo il risultato a 2 cifre decimali con la funzione round
risultato=Math.round(risultato*100)/100
console.log("La divisione tra "+dividendo+" e "+divisore+" è "+risultato+".")

 


Esempio 4

Inserire una frase da tastiera tutta minuscola e stampare le parole che la compongono in maiuscolo, usando lo spazio come separatore.

Soluzione Python:

# Stampa in maiuscolo le parole della frase inserita in minuscolo, usando lo spazio come separatore
frase=input("Inserisci una frase scritta in minuscolo: ")
# Estraggo tutte le parole della stringa con il metodo split, usando lo spazio come delimitatore
# Il metodo split crea una lista di stringhe che sono le parole della frase
parole=frase.split(" ")
# Leggo le parole dalla lista e le stampo in maiuscolo usando il metodo upper
for x in range(len(parole)):
    print(str(x+1)+") "+parole[x].upper())

----- OUTPUT -----

Inserisci una frase scritta in minuscolo: una bella giornata
1) UNA
2) BELLA
3) GIORNATA

Soluzione JavaScript:

// Stampa in maiuscolo le parole della frase inserita in minuscolo, usando lo spazio come separatore
var input=require("readline-sync")
var frase=""
frase=input.question("Inserisci una frase scritta in minuscolo: ")
// Estraggo tutte le parole della stringa con il metodo split, usando lo spazio come delimitatore
// Il metodo split crea una lista di stringhe che sono le parole della frase
parole=frase.split(" ")
// Leggo le parole dalla lista e le stampo in maiuscolo usando il metodo toUpperCase
for (var x=0;x<parole.length;x++){
    console.log((x+1)+") "+parole[x].toUpperCase())
}

 

Esempio 5

Inserire una frase da tastiera tutta minuscola e stampare le parole che la compongono in maiuscolo, usando lo spazio come separatore.

Soluzione Python:

# Stampa in minuscolo le parole della frase inserita in maiuscolo, usando lo spazio come separatore
frase=input("Inserisci una frase scritta in maiuscolo: ")
# Estraggo tutte le parole della stringa con il metodo split, usando lo spazio come delimitatore
# Il metodo split crea una lista di stringhe che sono le parole della frase
parole=frase.split(" ")
# Leggo le parole dalla lista e le stampo in minuscolo
for x in range(len(parole)):
    print(str(x+1)+") "+parole[x].lower())

 

----- OUTPUT -----

Inserisci una frase scritta in maiuscolo: UNA BELLA GIORNATA
1) una
2) bella
3) giornata

Soluzione JavaScript:

// Stampa in minuscolo le parole della frase inserita in maiuscolo, usando lo spazio come separatore
var input=require("readline-sync")
var frase=""
frase=input.question("Inserisci una frase scritta in maiuscolo: ")
// Estraggo tutte le parole della stringa con il metodo split, usando lo spazio come delimitatore
// Il metodo split crea una lista di stringhe che sono le parole della frase
parole=frase.split(" ")
// Leggo le parole dalla lista e le stampo in minuscolo usando il metodo toLowerCase
for (var x=0;x<parole.length;x++){
    console.log((x+1)+") "+parole[x].toLowerCase())
}

Esempio 6

Inserire una frase da tastiera e stampare i codici ASCII dei caratteri che la compongono.

Soluzione Python:

# Inserisci una frase e stampa il codice ASCII dei caratteri
frase=input("Inserisci una frase: ")
for x in range(len(frase)):
    print("["+frase[x]+"]{"+str(ord(frase[x]))+"}",end="")

----- OUTPUT -----

Inserisci una frase: Una bella giornata
[U]{85}[n]{110}[a]{97}[ ]{32}[b]{98}[e]{101}[l]{108}[l]{108}[a]{97}[ ]{32}[g]{103}[i]{105}[o]{111}[r]{114}[n]{110}[a]{97}[t]{116}[a]{97}

 

Soluzione JavaScript:

// Inserisci una frase e stampa il codice ASCII dei caratteri
var input=require("readline-sync")
var frase=""
var riga=""
frase=input.question("Inserisci una frase: ")
for (var x=0;x<frase.length;x++){
    riga+="["+frase.charAt(x)+"]{"+frase.charCodeAt(x)+"}"
}
console.log(riga)

Esempio 7

Inserire una frase da tastiera e stamparla al contrario.

Soluzione Python:

# Inserisci una frase e stampala al contrario
frase=input("Inserisci una frase: ")
for x in range(len(frase)-1,-1,-1):
    print(frase[x],end="")

----- OUTPUT -----

Inserisci una frase: Una bella giornata
atanroig alleb anU

Soluzione JavaScript:

// Inserisci una frase e stampala al contrario
var input=require("readline-sync")
var frase=""
var riga=""
frase=input.question("Inserisci una frase: ")
for (var x=frase.length-1;x>=0;x--){
    riga+=frase.charAt(x)
}
console.log(riga)

Esempio 8

Inserisci una frase da tastiera e cerca una parola, ignorando la differenza tra maiscolo e minuscolo.

 

Soluzione Python:

# Inserisci una frase e cerca una parola, ignora maiscolo e minuscolo
frase=input("Inserisci una frase: ").lower()
risposta='s'
while risposta=='s':
    parola=input("Inserisci la parola da cercare: ")
    posizione=frase.find(parola.lower())
    if posizione==-1:
        print("La parola "+parola+" non è stata trovata.")
    else:
        print("La parola "+parola+" è stata trovata alla posizione "+str(posizione+1)+".")
    risposta=input("Vuoi inserire una nuova parola da cercare (s/n)? ").lower()
    while risposta!='s' and risposta!='n':
        print("Errore: inserire s oppure n")
        risposta=input("Vuoi inserire una nuova parola da cercare (s/n)? ").lower()

----- OUTPUT -----

Inserisci una frase: Una bella giornata
Inserisci la parola da cercare: bella
La parola bella è stata trovata alla posizione 5.
 

Soluzione JavaScript:

 
// Inserisci una frase e cerca una parola, ignora maiscolo e minuscolo
var input=require("readline-sync")
var frase=""
frase=input.question("Inserisci una frase: ").toLowerCase()
do{
    parola=input.question("Inserisci la parola da cercare: ")
    posizione=frase.indexOf(parola.toLowerCase())
    if (posizione==-1){
        console.log("La parola "+parola+" non è stata trovata.")
    }else{
        console.log("La parola "+parola+" è stata trovata alla posizione "+(posizione+1)+".")
    }
    risposta=input.question("Vuoi inserire una nuova parola da cercare (s/n)? ").toLowerCase()
    while(risposta!='s' && risposta!='n'){
        console.log("Errore: inserire s oppure n")
        risposta=input.question("Vuoi inserire una nuova parola da cercare (s/n)? ").toLowerCase()
    }
}while(risposta=='s')
 

Esempio 9

Inserisci una frase da tastiera e cerca una parola, ignorando la differenza tra maiscolo e minuscolo.
Se trovi la parola cercata, sostituiscila con una nuova parola.

Soluzione Python:

# Inserisci una frase e cerca e sostituisci una parola
frase=input("Inserisci una frase: ")
risposta='s'
while risposta=='s':
    parola=input("Inserisci la parola da cercare: ")
    posizione=frase.lower().find(parola.lower())
    if posizione==-1:
        print("La parola "+parola+" non è stata trovata.")
    else:
        print("La parola "+parola+" è stata trovata alla posizione "+str(posizione+1)+".")
        parolaNuova=input("Inserisci la parola da sostituire: ")
        frase=frase.replace(parola,parolaNuova,posizione)
        print("La nuova frase è: "+frase+".")
    risposta=input("Vuoi inserire una nuova parola da cercare (s/n)? ").lower()
    while risposta!='s' and risposta!='n':
        print("Errore: inserire s oppure n")
        risposta=input("Vuoi inserire una nuova parola da cercare (s/n)? ").lower()
 

----- OUTPUT -----

Inserisci una frase: Una buona giornata
Inserisci la parola da cercare: buona
La parola buona è stata trovata alla posizione 5.
Inserisci la parola da sostituire: bella
La nuova frase è: Una bella giornata.

Soluzione JavaScript:

// Inserisci una frase e cerca e sostituisci una parola
var input=require("readline-sync")
var frase=""
var parolaCercata=""
var parolaNuova=""
frase=input.question("Inserisci una frase: ").toLowerCase()
do{
    parolaCercata=input.question("Inserisci la parola da cercare: ")
    posizione=frase.indexOf(parolaCercata.toLowerCase())
    if (posizione==-1){
        console.log("La parola "+parolaCercata+" non è stata trovata.")
    }else{
        console.log("La parola "+parolaCercata+" è stata trovata alla posizione "+(posizione+1)+".")

        parolaNuova=input.question("Inserisci la parola da sostituire: ")
        frase=frase.replace(parolaCercata,parolaNuova)
        console.log(frase)
    }
    risposta=input.question("Vuoi inserire una nuova parola da cercare (s/n)? ").toLowerCase()
    while(risposta!='s' && risposta!='n'){
        console.log("Errore: inserire s oppure n")
        risposta=input.question("Vuoi inserire una nuova parola da cercare (s/n)? ").toLowerCase()
    }
}while(risposta=='s')

Esempio 10

Inserisci una frase da tastiera e verifica se è palindroma.

Soluzione Python:

# Inserisci una frase e verifica se è palindroma
risposta='s'
while risposta=='s':
    palindroma=False
    frase=input("Inserisci una frase: ")
    # Elimino gli spazi dalla frase e la converto in minuscolo
    fraseBis=frase.replace(" ","").lower()
    # Elimino gli apostrofi dalla frase

    fraseBis=fraseBis.replace("'","")
    if len(fraseBis)<2:
        palindroma=True
    else:
        # Calcolo gli indici che servono per controllare i caratteri a sinistra della frase, con quelli a destra
        # Indice medio, che indica la fine del controllo
        indiceMedio=int(len(fraseBis)/2)
        # Indice finale, indica il primo carattere a destra, da confrontare con il primo carattere a sinistra della frase

        indiceFine=len(fraseBis)-1
        palindroma=True
        # Controllo tutti i caratteri a sinistra del punto medio della frease, con quellli a destra, se sono tutti uguali allora la frase è palindroma
        for x in range(indiceMedio):
            if fraseBis[x]!=fraseBis[indiceFine-x]:
                palindroma=False
                break
        if palindroma:
            print("La frase "+frase+" è palindroma.")
        else:    
            print("La frase "+frase+" non è palindroma.")
    risposta=input("Vuoi continuare (s/n)? ").lower()
    while risposta!='s' and risposta!='n':
        print("Errore: inserire s oppure n")
        risposta=input("Vuoi continuare (s/n)? ").lower()

 

Soluzione JavaScript:

// Inserisci una frase e verifica se è palindroma
var risposta = ''
var input = require("readline-sync")
var frase = ""
var indiceMedio = 0
var indiceFine = 0
do {
    var palindroma = false
    frase = input.question("Inserisci una frase: ")
    // Elimino gli spazi dalla frase e la converto in minuscolo
    fraseBis = frase.replace(" ", "").toLowerCase()
    // Elimino gli apostrofi dalla frase
    fraseBis = fraseBis.replace("'", "")
    if (fraseBis.length < 2) {
        palindroma = true
    } else {
        // Calcolo gli indici che servono per controllare i caratteri a sinistra della frase, con quelli a destra
        // Indice medio, che indica la fine del controllo
        indiceMedio = Math.floor(fraseBis.length / 2)
        // Indice finale, indica il primo carattere a destra, da confrontare con il primo carattere a sinistra della frase
        indiceFine = fraseBis.length - 1
        palindroma = true
        // Controllo tutti i caratteri a sinistra del punto medio della frease, con quellli a destra, se sono tutti uguali allora la frase è palindroma
        for (var x = 0; x < indiceMedio; x++) {
            if (fraseBis.charAt(x) != fraseBis.charAt(indiceFine - x)) {
                console.log(fraseBis.charAt(x))
                palindroma = false
                break
            }
        }
    }
    if (palindroma) {
        console.log("La frase " + frase + " è palindroma.")
    } else {
        console.log("La frase " + frase + " non è palindroma.")
    }
    risposta = input.question("Vuoi continuare (s/n)? ").toLowerCase()
    while (risposta != 's' && risposta != 'n') {
        print("Errore: inserire s oppure n")
        risposta = input.question("Vuoi continuare (s/n)? ").toLowerCase()
    }
} while (risposta == 's')

 

Esempio 11

Creare una stringa csv, che contiene 10 cognomi e nomi. Stampare l'elenco dei cognome e nomi della stringa, con un progressivo numerico e ordinati alfabeticamente.

Soluzione Python:

# Stampa elenco cognomi e nomi ordinato alfabeticamente
# csv = comma separated values (elenco valori separati da una virgola)
nominativiCSV="Rossi Alberto,Verdi Carla,Bianchi Roberta,Di Somma Paolo,De Gregorio Giacomo,"
nominativiCSV+="Rossi Paola,Verdi Loredana,Bianchi Alessandra,Rossi Sonia,Verdi Francesco"
# Trasformo con la funzione split, la stringa csv in una lista di nominativi
nominativi=nominativiCSV.split(",")
# Ordino il contenuto della lista in modo crescente
nominativi.sort()
for i in range(len(nominativi)):
    print(str(i+1)+") "+nominativi[i])

----- OUTPUT -----

1) Bianchi Alessandra
2) Bianchi Roberta
3) De Gregorio Giacomo
4) Di Somma Paolo
5) Rossi Alberto
6) Rossi Paola
7) Rossi Sonia
8) Verdi Carla
9) Verdi Francesco
10) Verdi Loredana

 

Soluzione JavaScript:

// Stampa elenco cognomi e nomi ordinato alfabeticamente
// csv = comma separated values (elenco valori separati da una virgola)
var nominativiCSV="Rossi Alberto,Verdi Carla,Bianchi Roberta,Di Somma Paolo,De Gregorio Giacomo,"
nominativiCSV+="Rossi Paola,Verdi Loredana,Bianchi Alessandra,Rossi Sonia,Verdi Francesco"
// Trasformo con la funzione split, la stringa csv in una lista di nominativi
var nominativi=nominativiCSV.split(",")
// Ordino il contenuto della lista in modo crescente
nominativi.sort()
for (var i=0;i<nominativi.length;i++){
    console.log((i+1)+") "+nominativi[i])
}

Esempio 12

Creare una lista che contiene 10 cognomi e nomi. Trasformare la lista in una stringa csv e stamparla.

Soluzione Python:

# Crea una lista con 10 cognomi e nomi e convertila in una stringa csv
nominativi=["Rossi Alberto","Verdi Carla","Bianchi Roberta","Di Somma Paolo","De Gregorio Giacomo",
"Rossi Paola","Verdi Loredana","Bianchi Alessandra","Rossi Sonia","Verdi Francesco"]
# Trasformo la lista di nominativi in una stringa csv
nominativiCSV=",".join(nominativi)
print(nominativiCSV)

----- OUTPUT -----

Rossi Alberto,Verdi Carla,Bianchi Roberta,Di Somma Paolo,De Gregorio Giacomo,Rossi Paola,Verdi Loredana,Bianchi Alessandra,Rossi Sonia,Verdi Francesco

Soluzione JavaScript:

// Crea una lista con 10 cognomi e nomi e convertila in una stringa csv
var nominativi=["Rossi Alberto","Verdi Carla","Bianchi Roberta","Di Somma Paolo","De Gregorio Giacomo",
"Rossi Paola","Verdi Loredana","Bianchi Alessandra","Rossi Sonia","Verdi Francesco"]
// Trasformo la lista di nominativi in una stringa csv
var nominativiCSV=nominativi.join(",")
console.log(nominativiCSV)

Che cos'è lo slicing?

In inglese ti slice significa affettare o sminuzzare; in programmazione è la tecnica che usano i programmatori per estrarre sottostringhe da una stringa.
Per eseguire questa operazione devi indicare la posizione iniziale e quella finale della sottostringa da estrarre, ricordando che l'inizio della stringa corrisponde sempre alla posizione 0, come mostra l'immagine seguente:

Con Python le posizioni si possono anche indicare con numeri negativi.

Esempio 13

Estrarre dalla stringa "La formazione crea 1000 opportunità di lavoro", la sottostringa "La formazione"

Soluzione Python:

# Estrarre la sottostringa "La formazione"
stringa="La formazione crea 1000 opportunità di lavoro"
sottostringa=stringa[0:13]
print(sottostringa)
# Oppure utilizzando le coordinate negative
sottostringa=stringa[:-32]
print(sottostringa)

 

----- OUTPUT -----

La formazione
La formazione

Soluzione JavaScript:

// Estrarre la sottostringa "La formazione"
stringa="La formazione crea 1000 opportunità di lavoro"
sottostringa=stringa.substring(0,13)
console.log(sottostringa)

 

Esempio 14

Estrarre dalla stringa "La formazione crea 1000 opportunità di lavoro", la sottostringa "1000"

Soluzione Python:

# Estrarre la sottostringa "1000"
stringa="La formazione crea 1000 opportunità di lavoro"
sottostringa=stringa[19:23]
print(sottostringa)

 

----- OUTPUT -----

1000

Soluzione JavaScript:

// Estrarre la sottostringa "1000"
var stringa="La formazione crea 1000 opportunità di lavoro"
var sottostringa=stringa.substring(19,23)
console.log(sottostringa)
 
 

Esempio 15

Estrarre dalla stringa "La formazione crea 1000 opportunità di lavoro", la sottostringa "lavoro"

Soluzione Python:

# Estrarre la sottostringa "lavoro"
stringa="La formazione crea 1000 opportunità di lavoro"
sottostringa=stringa[39:]
print(sottostringa)
# Oppure
sottostringa=stringa[-6:]
print(sottostringa)

 

----- OUTPUT -----

lavoro
lavoro

Soluzione JavaScript:

// Estrarre la sottostringa "Lavoro"
stringa="La formazione crea 1000 opportunità di lavoro"
sottostringa=stringa.substring(39)
console.log(sottostringa)

Leggi anche le altre lezioni ...

COMPETENZE PER PROGRAMMARE:
1-I sistemi di numerazione
2-Mondo reale e Mondo Digitale
3-La reppresentazione digitale dei numeri interi e decimali
5-Le espressioni regolari (REGEXP)


Segui sul canale YouTube "Skill Factory Channel" la Playlist: COMPETENZE PER PROGRAMMARE


TUTORIALS
1-Laboratori di logica di programmazione in C
2-Impariamo a programmare con JavaScript
3-Ricominciamo dal linguaggio SQL
4-Introduzione alla logica degli oggetti
5-TypeScript
6-Impariamo a programmare in Python
7-Come sviluppare un sito in WordPress


PAR GOL (Garanzia di Occupabilità dei Lavoratori)

Se sei residente in Campania e cerchi lavoro, sai che puoi partecipare gratuitamente ad un corso di formazione professionale PAR GOL?

I corsi di formazione professionale PAR GOL sono finanziati dalla Regione Campania e ti permettono di acquisire una Qualifica Professionale Europea (EQF) e di partecipare ad un tirocinio formativo aziendale.

Invia il tuo CV o una manifestazione d'interesse a: recruiting@skillfactory.it

oppure

chiama ai seguenti numeri di telefono:

Tel.: 081/18181361
Cell.: 327 0870141

oppure

Contattaci attraverso il nostro sito: www.skillfactory.it


Per maggiori informazioni sul progetto PAR GOLclicca qui.

Per maggiori informazioni sulle Qualifiche Professionali Europee (EQF)clicca qui.


Academy delle professioni digitali

Per consultare il catalogo dei corsi online della nostra Academy ...

... collegati al nostro sito: www.skillfactory.it

 

 
Share Button

Competenze per programmare: la rappresentazione digitale dei numeri interi e decimali

Gino Visciano | Skill Factory - 24/03/2024 21:11:45 | in Tutorials

I numeri che usiamo si chiamano "Numeri reali", in base alle loro caratteristiche li possiamo organizzare nei seguenti insiemi:

I numeri, sia interi (relativi), sia decimali (razionali), servono per esprimere rispettivamente quantità intere o frazionarie.

Sono irrazionali i numeri che non si possono indicare attraverso il rapporto tra numeri interi, come ad esempio il pi greco, che indica il rapporto tra la misura della circonferenza di un cerchio e il suo diametro oppure il numero di Nepero (e).

In programmazione per indicare la parte decimale di un numero si usa il punto "." al posto della virgola ",", quindi negli esempi userò questa convenzione.

Esempio 1

Per indicare la quantità di auto nell'immagine seguente, basta usare il numero intero 9:

mentre per indicare la quantità di auto nell'immagine seguente, bisogna usare il numero decimale 8.5, perché l'ultima auto è divisa a metà:

 

Esempio 2

Il risultato dell'espressione 10/2 è 5 che è un numero intero, perché il numero 10 può essere diviso esattamente in due parti intere, ciascuna composta da 5 unità.

Il risultato dell'espressione 10/3 è 3.33333 che è un numero decimale, perché il numero 10 può essere diviso in 3 parti intere, ciascuna composta da 3 unità, ma ne resta una che deve essere frazionata in 3 parti decimali da 0.33333.

Attenti, quando la quantità di cifre decimali di un numero è indefinita, ovvero quando l'unità non è divisibile in parti esattamente uguali, come nel caso del riusultato della divisione 10/3 = 3.33333..., il numero può essere scritto nel modo seguente:

e si legge 3.3 periodico, perché il numero di 3 della parte decimale potrebbe essere infinito.

In programmazione, quando il numero di decimali è periodico, bisogna indicare la precisione del numero ovvero il numero di cifre da indicare dopo la virgola, per questo motivo nei linguaggi di programmazione si fa la distinzione tra numeri decimali a singola precisione (float) e doppia precisione (double). Di solito i numeri a doppia precisione si usano in ambiti scientifici, quelli a singola precisione per tutti gli altri ambiti.

Esempio 3 

I numeri si possono anche rappresentare sugli assi cartesiani, come mostra l'immagine seguente:

Se l'asse cartesiano è orizzontale si chiama asse delle ascisse e si indica con la lettera X, mentre se è verticale si chiama asse delle ordinate e si indica con la lettera Y.

Un piano su cui si disegna sia l'asse delle "Ascisse", sia l'asse delle "Ordinate" viene detto "Piano Cartesiano".

Il numero 0, si trova nel punto in cui gli assi X e Y s'incontrano e viene chiamato origine. Lo zero divide i numeri positivi (segno +) da quelli negativi (segno -) di entrambi gli assi; sia i numeri positivi, sia i numeri negativi sono infiniti.

Attenti, quando scrivete un numero positivo, non siete obbligati ad indicare il segno +, mentre quando scrivete un numero negativo il segno - è obbligatorio.

Sugli assi cartesiani, la parte decimale di un numero è sempre compresa nel segmento che unisce due numeri interi consecutivi. 

L'immagine seguente mostra la posizione del numero 2.5 sull'asse X:

Ricordate che il punto centrale di un segmento che lo divide in due parti uguali è detto punto medio.

L'immagine seguente mostra la posizione del il numero -3.2 sull'asse X:

Per indicare la parte decimale 0.2 dovete posizionarvi esattamente nel punto che corrisponde alla quinta parte del segmento, perché 1/5=0.2, come mostra l'immagine.

Come ci ha insegnato il filosofo greco Democrito, un segmento può essere diviso infinite volte, per questo motivo la quantità di cifre decimali di un numero può anche essere molto grande; maggiore è il numero di decimali, tanto maggiore è il numero di volte che vengono divise le parti del segmento. La precisione, ovvero la quantità di cifre decimali di un numero, serve per capire fino a quando dobbiamo continuare  dividere le parti del segmento, per evitare di continuare all'infinito.  

In che modo i computer memorizzano i numeri interi?

I computer sono macchine elettroniche di tipo digitale, a differenza degli uomini, per scrivere i numeri possono usare solo due cifre: 0 e 1 chiamate bit (binary digit), per questo motivo usano il sistema di numerazione binario.  

I computer memorizzano i numeri nella RAM (Random Access Memory); la memoria ad accesso casuale composta da tanti interruttori, chiamati flip-flop, che permettono di scrivere i numeri in forma binaria - se l'interruttore spento (-) la cifra è zero, se è acceso (+) la cifra è uno. 

    

Clicca qui per conoscere la differenza tra mondo reale e mondo digitale.

Nei linguaggi di programmazione le variabili oppure gli oggetti che possono contenere tipi interi si dichiarano con: int oppure Integer, ad esempio:

int x=10;

Integer y=20;

In SQL le colonne di una tabella che possono contenere numeri interi di dichiarano con la parola chiave numeric, ad esempio:

create table magazzino(id numeric(7), quantita numeric(7),...);

Quando un computer memorizza nella RAM un numero intero, usa il primo bit a sinistra (quello più significativo) per indicare il segno; se il primo bit più significativo è 0 il numero intero è positivo, altrimenti è negativo. Gli altri bit servono per indicare il modulo del numero intero.

Per i numeri positivi, il modulo è rappresentato semplicemente dal valore binario del numero da memorizzare.

Per i numeri negativi, il modulo è rappresentato in complemento a 2.

Ad esempio, se il computer usa 32 bit (4 byte) per memorizzare un numero intero con il segno (int signed), con 4 byte si può scrivere qualunque numero intero, negativo o positivo, compreso nell'intervallo: –2.147.483.648 e 2.147.483.647.

2.147.483.647 = [0](segno)[1111111 11111111 11111111 11111111](modulo = valore binario del numero 2147483647)

–2.147.483.648  = [1](segno)[00000000 00000000 00000000 00000000](modulo = complemento a 2 del numero 2147483648)

Complemento a 2

Per calcolare il complemento a 2 di un numero binario è semplice, basta invertire i valori dei bit, gli zeri diventano uno e gli uno diventano zero e aggiungere 1 al numero che si ottiene.

Ad esempio, il complemento a 2 binario del numero 10 (decimale) si calcola nel modo seguente:

1) converto il numero 10 decimale in binario:

10 (decimale) = 1010 (binario)

2) Calcolo il complemento a 1 del numero 1010 invertendo gli zeri con uno e gli uno con zero:

1010 (binario) = 0101 (complemento a 1)

3) aggiungo 1 al numero 0101:

0101+
0001=
---------
 0110 (Complemento a 2 del numero binario 1010)

Allo stesso modo possiamo calcolare il complemento a 2 del numero decimale 2.147.483.648:

1) converto il numero 2.147.483.648 decimale in binario:

2.147.483.648 (decimale) = 10000000 00000000 00000000 00000000  (binario)

2) Calcolo il complemento a 1 del numero 10000000 00000000 00000000 00000000  invertendo gli zeri con uno e gli uno con zero:

10000000 00000000 00000000 00000000  (binario) = 01111111 11111111 11111111 11111111 (complemento a 1)

3) aggiungo 1 al numero 01111111 11111111 11111111 11111111:

01111111111111111111111111111111+
00000000000000000000000000000001=
-----------------------------------------------------------
10000000000000000000000000000000 (Complemento a 2 del numero binario 01111111
111111111111111111111111)

Attenti, nella rappresentazione dei computer a 32 bit, giacché l'ultimo bit serve per il segno, vengono memorizzati solo i primi 31 bit.
 
In che modo i computer memorizzano i numeri decimali?
I numeri decimali possono essere a virgola fissa oppure a virgola mobile. In quelli a virgola fissa le quantità di decimali dopo la virgola è predefinita, quindi la posizione della virgola non cambia, mentre per quelli a virgola mobile la quantità di decimali può variare, quindi la posizione della virgola più cambiare.
 
Nei linguaggi di programmazione i tipi float e double indicano numeri decimali a virgola mobile, la differenza è la precisione, i double hanno un maggior numero di decimali dopo la virgola rispetto ai float. Il tipo decimal usato in SQL per impostare le colonne con numeri decimali è a virgola fissa. La parola chiave decimal permette di specificare sia la quantità di cifre totali che compongono il numero, sia quanti sono quelli decimali, ad esempio:
create table dipendenti (
...
stipendio decimal(9,2),
...)
 

La rappresentazione nei computer a virgola fissa è molto semplice: il byte più significativo rappresenta il segno, un certo numero di byte viene utilizzato per rappresentare la parte intera, segue quindi un altro numero di byte per rappresentare la parte decimale, come mostra l'immagine seguente:

Ad esempio, convertiamo in binario il numero decimale 17,55, immaginando di avere 16 bit a disposizione:

1) Il bit più significativo è uguale a 0, perché il numero è positivo.
2) La parte intera, immaginiamola di 7 bit, è uguale a:

2^6=64 -> 0
2^5=32 -> 0
2^4=16 -> 1
2^3=8 -> 0
2^2=4 -> 0
2^1=2 -> 0
2^0=1 -> 1

17 (decimale) = 0010001 (binario)

Se la parte intera fosse stata negativa avremmo dovuto calcolare il complemento a 2.

3) La parte decimale, immaginandola di 8 bit, è uguale a:

2^-1=0.5 -> 1
2^-2=0.25 -> 0
2^-3=0.125 -> 0
2^-4=0.0625 -> 0
2^-5=0.03125 -> 1
2^-6=0,015625 -> 1
2^-7=0,0078125 -> 0
2^-8=0,00390625 -> 0

0.55 (decimale) = 10001100 (binario)

Quindi

17.55 (decimale) =0(segno) 0010001.10001100

Ricordate che il simbolo ^ indica la potenza.
 
Per la rappresentazione dei numeri decimali in virgola mobile i computer usano lo standard IEEE 754 con il quale si definiscono due formati: uno per la precisione singola a 32 bit e l'altro per la precisione doppia a 64 bit.
 
Questo standard segue la notazione scientifica e permette al computer di memorizzare i numeri decimali attraverso tre tipi d'informazioni:
 
 
I bit per la precisione singola hanno la seguente organizzazione:

bit 31 (1) segno
bit 23-30 (8) esponente
bit 0-22 (23) mantissa

mentre per la precisione doppia l'organizzazione è la seguente:

bit 63 (1) segno
bit 52-62 (11) esponente
bit 0-51 (52) mantissa

Il numero viene composto in base alla formula seguente:
 
Numero = (-1)^segno*2^esponente*mantissa
 
Facciamo un esempio:
 
Rappresentiamo in virgola mobile a precisione singola il numero decimale 13.25:
 
1) Il bit più significativo è uguale a 0 perché il numero è positivo
2) Il modulo della parte intera 13 (decimale) è uguale a: 1101 (binario)
3) la parte decimale 0.25 è uguale a: 01 (binario)
 
Quindi
 
13.25 (decimale) = 1101.01 (binario)
 
Usando la notazione scientifica in base 2 lo riscrivo nella forma:
 
1.10101 * 2^3.
 
A questo punto ho tutte informazioni per ottenere il segno, l'esponente e la mantissa:
 
SEGNO=0
ESPONENTE=3+127=130 (decimale) = 10000010 (binario)
 
Per ottenere la mantissa basta prendere il numero 1.10101 ed escludere l'1 prima della virgola, quindi:
 
MANTISSA= 10101 (binario)
 
Il risultato finale è il seguente:
 

 INFORMATICA APPLICATA

Laboratorio

Creare un programma che trasforma i numeri interi nella rappresentazione binaria a 32 bit usata dai computer per memorizzare le informazioni numeriche.

Soluzione JavaScript


// Funzioni
function convertiBinario(numeroIntero){
    let numeroBinario=[]
    let resto
    while (numeroIntero>1){
        resto=numeroIntero%2
        numeroBinario.push(resto)
        numeroIntero=Math.floor(numeroIntero/2)
    }
    numeroBinario.push(numeroIntero)
    for(let i=31-numeroBinario.length;i>0;i--){
        numeroBinario.push(0)
    }
    numeroBinario.reverse()
    return numeroBinario
}

function complemento2(numeroBinario){
    let inverti=[1,0]
    riporto=1
    for (let i=0;i<numeroBinario.length;i++){
        numeroBinario[i]=inverti[numeroBinario[i]]
    }
    for(let i=numeroBinario.length-1;i>0;i--){
        if (numeroBinario[i]==1 && riporto==1){
            numeroBinario[i]=0
            riporto=1
        }else if (numeroBinario[i]==1 && riporto==0){
            numeroBinario[i]=1
            riporto=0
        }else if (numeroBinario[i]==0 && riporto==1){
            numeroBinario[i]=1
            riporto=0
        }else{
            numeroBinario[i]=0
            riporto=0
        }
    }
}
// Programma
let input=require("readline-sync");
let numeroIntero=0
let numeroBinario=[]
let numeroBinarioStr=""
let segno=0
numeroIntero=parseInt(input.question("Numero intero: "))
while (numeroIntero<-2147483648 || numeroIntero> 2147483647){
    print("Errore: inserire un numero compreso tra -2147483648 e 2147483647")
    numeroIntero=parseInt(input.question("Numero intero: "))
}
if (numeroIntero<0){
    segno=1
    numeroBinario=convertiBinario(-(numeroIntero))
    complemento2(numeroBinario)
}
else if (numeroIntero>0){
    segno=0
    numeroBinario=convertiBinario(numeroIntero)
}
numeroBinarioStr="["+segno+"]["
for (let i=0;i<numeroBinario.length;i++){
    if (i<31){
        numeroBinarioStr+=numeroBinario[i]
    }
}
numeroBinarioStr+="]"
console.log(numeroBinarioStr)

 

Soluzione Python


# Funzioni

# Converte numero intero in binario
def convertiBinario(numeroIntero):
    numeroBinario=[]
    while numeroIntero>1:
        resto=numeroIntero%2
        numeroBinario.append(resto)
        numeroIntero=int(numeroIntero/2)
    numeroBinario.append(numeroIntero)
    for i in range(31-len(numeroBinario)):
        numeroBinario.append(0)
    numeroBinario.reverse()
    return numeroBinario

# Calcola il complemento a due di un numero binario
def complemento2(numeroBinario):
    inverti=[1,0]
    riporto=1
    for i in range(len(numeroBinario)):
        numeroBinario[i]=inverti[numeroBinario[i]]
    for i in range(len(numeroBinario)-1,0,-1):
        if numeroBinario[i]==1 and riporto==1:
            numeroBinario[i]=0
            riporto=1
        elif numeroBinario[i]==1 and riporto==0:
            numeroBinario[i]=1
            riporto=0
        elif numeroBinario[i]==0 and riporto==1:
            numeroBinario[i]=1
            riporto=0
        else:
            numeroBinario[i]=0
            riporto=0

# Programma
numeroIntero=0
numeroBinario=[]
segno=0
numeroIntero=int(input("Numero intero: "))
while numeroIntero<-2147483648 or numeroIntero> 2147483647:
    print("Errore: inserire un numero compreso tra -2147483648 e 2147483647")
    numeroIntero=int(input("Numero intero: "))
if numeroIntero<0:
    segno=1
    numeroBinario=convertiBinario(-(numeroIntero))
    complemento2(numeroBinario)
elif numeroIntero>0:
    segno=0
    numeroBinario=convertiBinario(numeroIntero)
print("["+str(segno)+"][",end="")
for i,x in enumerate(numeroBinario):
    if i<31: print(x,end="")
print("]")


Leggi anche le altre lezioni ...

COMPETENZE PER PROGRAMMARE:
1-I sistemi di numerazione
2-Mondo reale e Mondo Digitale
4-Le stringhe

5-Le espressioni regolari (REGEXP)


Segui sul canale YouTube "Skill Factory Channel" la Playlist: COMPETENZE PER PROGRAMMARE


TUTORIALS
1-Laboratori di logica di programmazione in C
2-Impariamo a programmare con JavaScript
3-Ricominciamo dal linguaggio SQL
4-Introduzione alla logica degli oggetti
5-TypeScript
6-Impariamo a programmare in Python
7-Come sviluppare un sito in WordPress


PAR GOL (Garanzia di Occupabilità dei Lavoratori)

Se sei residente in Campania e cerchi lavoro, sai che puoi partecipare gratuitamente ad un corso di formazione professionale PAR GOL?

I corsi di formazione professionale PAR GOL sono finanziati dalla Regione Campania e ti permettono di acquisire una Qualifica Professionale Europea (EQF) e di partecipare ad un tirocinio formativo aziendale.

Invia il tuo CV o una manifestazione d'interesse a: recruiting@skillfactory.it

oppure

chiama ai seguenti numeri di telefono:

Tel.: 081/18181361
Cell.: 327 0870141

oppure

Contattaci attraverso il nostro sito: www.skillfactory.it


Per maggiori informazioni sul progetto PAR GOLclicca qui.

Per maggiori informazioni sulle Qualifiche Professionali Europee (EQF)clicca qui.


Academy delle professioni digitali

Per consultare il catalogo dei corsi online della nostra Academy ...

... collegati al nostro sito: www.skillfactory.it

 

Share Button

Competenze per programmare: Mondo Reale e Mondo Digitale

Gino Visciano | Skill Factory - 25/02/2023 10:16:25 | in Tutorials

Nell'era della trasformazione digitale è importante capire la differenza tra "Mondo reale" e "Mondo digitale".

Oggi, mondo reale e mondo digitale, coesistono, ampliando lo spazio fisico in cui viviamo con quello cibernetico, che può essere considerato come un Universo parallelo, alternativo a quello fisico.

Il mondo reale è quello in cui viviamo, composto dalle cose che osserviamo e tocchiamo, quello digitale è il mondo delle cose che assumono la forma di numeri binari.

Il mondo digitale esiste grazie al Ciberspazio (Cyberspace), la rete delle reti, chiamta Internet, che interconnette tutti i sistemi informatici ed elettronici del mondo, su cui girano i software e le applicazioni che permettono il funzionamento di Internet e del mondo cibernetico

Il termine è stato utilizzato la prima volta nel 1982, nella forma inglese cyberspace, in un racconto di fantascienza dal titolo "Burning Chrome".

I tipi di applicazioni più conosciuti  del cyberspace sono i seguenti:

  • Social media;
  • Social network;
  • Motori di ricerca;
  • Portali;
  • Siti Web;
  • Blog;
  • E-Commerce;
  • E-Learning
  • Community;
  • Suite applicative;
  • Etc..

Qual è la diiferenza tra mondo reale e mondo digitale?

La risposta è semplice, il mondo reale è fatto di informazioni analogiche, quello digitale è fatto di cifre binarie, perché gli apparecchi elettronici possono gestire solo due stati fisici (flip-flop), che noi identifichiamo con le cifre 0 e 1, chiamate bit (Binary Digit).

Come sono fatte le informazioni analogiche?

Tutto cio che percepiamo nel mondo reale ha una forma analogica. Senza scendere in tenicismi complessi, possiamo dire che tutto quello che vedete o ascoltate, sotto forma di immagini o suoni, fatto di punti, linee oppure onde, è analogico.

Gli apparecchi elettronici, a differenza degli uomini, non possono memorizzare le immagini e i suoni in forma analogica,  ma lo possono fare in forma digitale; sequenze di cifre binarie chiamate bit.

Fisicamente i bit negli apparecchi elettronici corrispondono a sequenze di interruttori (Flip-Flop) che possono assumere lo stato 0 oppure 1.

La cosa importante è che qualunque informazione analogica può essere trasformata in digitale e viceversa.

E' vero che le informazioni digitali sono più precise di quelle analogiche?

Si, è vero. I numeri sono grandezze precise, le immagini e i suoni possono anche essere interpretati male; questo è evidente con gli orologi.


Un orologio anlagico indica le ore, i minuti e i secondi attraverso tre lancette diverse, la posizione delle lancette, quando viene letta l'ora, può essere interpretata male e la persona potrebbe leggere un informazione non esatta.

Un orologio digitale indica le ore, i minuti e i secondi attraverso cifre, in questo caso l'ora letta è sempre esatta.

In che modo le informazioni analogiche possono essere trasformate in digitali?

La risposta a questa domanda complessa, può diventare semplice se facciamo riferimento all'informatica.

Quando scrivete qualcosa con un dispositivo elettronico, utilizzate la tastiera:

Tutti i caratteri della tastiera, noi li percepiamo come informazioni analogiche, perchè sono composti da punti e linee, quindi il testo che scriviamo noi lo possiamo ricordare, il dispositivo che stiamo usando no. 

Per permettere al dispositivo elettronico di memorizzare i caratteri usati per scrivre un testo, devono essere convertiti in numeri; per questo motivo è nata la tabella dei codici ASCII (pronuncia ASKII) che associa a 256 caratteri diversi, un numero da 0 a 255:


Per approfondire la conoscenza del codice ASCII clicca qui

Ad esempio, se digitate un carattere "A" oppure un carattere "1", entrabi vengono prima convertiti nei rispettivi codici ASCII 65 e 49, successivamente i numeri decimali vengono convertiti in banario, per permettere al dispositivo elettronico di memorizzarli attraverso sequenze di 8 flip-flop (interruttori elettrici), capaci di rappresentare i bit 0 oppure 1:

 A=6510=010000012
1=4910=001100012

L'immagine seguente mostra le fasi di conversione di un messaggio ti tipo testo in binario:

Ricordate che per indicare in binario il numero 255, che corrisponde all'ultimo carattere del codice ASCII, servono otto cifre (bit); per questo motivo l'unità di misura minima dell'informatica è il byte (8 bit).

Anche le immagini composte da punti o linee e i suoni formati da onde sinusoidali, possono essere convertiti in sequenze di byte, in questo modo possono essere memorizzati dai dispositivi elettronici.

L'immagine seguente mostra forme diverse di onde sonore in forma analogica:

  

 


PRINCIPALI STRUMENTI DEL MONDO REALE E DEL MONDO DIGITALE

  • COLORI


  • IMMAGINI


  • SUONI


  • POSTA


  • LIBRI


  • CHIAVI


  • FIRME


  • SOLDI


  • MAGAZZINO


IDENTITA' DIGITALE


  • INTELLIGENZA ARTIFICIALE


  • REALTA AUMENTATA O METAVERSO


Quali rischi corriamo quando siamo connessi al mondo digitale?

Come per il modo reale, anche in quello digitale si corrono dei rischi, quindi bisogna stare molto attenti a non assumere comportamenti sbagliati.

Quando siete connessi ad Internet con la vostra identità digitale e comunicate con qualcuno, state attenti, perché non sempre chi sta dall'altra parte è realmente chi dice di essere!!!

Non fidatevi di chi vi propone cose strane, ma soprattutto prima di fare qualunque cosa che vi viene richiesta, confidatevi con qualcuno molto vicino a voi.

Un altro rischio molto diffuso quando siete interconnessi ad Internet, è quello del furto d'informazioni riservate come ad esempio:

  • Carta d'identità;
  • Informazioni di genere, politiche, religiose;
  • Password di carte di credito, bmt, conti correnti, etc..

Questa attività, chiamata "Phishing", spesso avviene attraverso l'installazione sul proprio computer di software malevoli, chiamati malware.

Per evitare questo tipo di attacchi, bisogna installare sul proprio computer un buon antivirus, non aprire allegati di mail sospette e non navigare su siti non conosciuti.

Infine attenti ai bulli, perché potreste trovarli anche nel mondo digitale.

Purtroppo in Internet, il fenomeno del cyberbullismo è molto comune; sia nella vita reale, sia in quella digitale. Anche se avete paura non dovete mai subire minacce da parte di altre persone, le conseguenze potrebbero essere molto gravi. 

Se siete vitteme o conoscete qualcuno che è vittima di bullismo o cyberbullismo, è sempre meglio denunciare subito l'accaduto a qualcuno molto vicino a voi o alla polizia!!! 


 INFORMATICA APPLICATA

Laboratorio

Creare un programma che trasforma un messaggio di tipo testo in ASCII e in binario (Byte).

Soluzione JavaScript


// Funzioni
function decimaleBinario(decimale) {
    var binario = [];
    var numero = 0;
    var posizione = 7;
    for (var x = 0; x < 8; x++) {
        binario.push(0);
    }
    numero = decimale;
    while (numero >= 2) {
        risultato = Math.floor(numero / 2);
        resto = numero % 2;
        binario[posizione] = resto;
        posizione--;
        numero = risultato;
    }
    binario[posizione] = numero;
    return binario.join('');
}
// Programma
var input = require("readline-sync");
var messaggio = "";
var risposta = "";
var riga = "";
var ascii = [];
var binario = [];
var x = 0;
do {
    ascii = [];
    binario = [];
    messaggio = input.question("Messaggio da convertire: ");
    for (var x = 0; x < messaggio.length; x++) {
        ascii.push(messaggio.charCodeAt(x));
        binario.push(decimaleBinario(messaggio.charCodeAt(x)));
    }
    console.log("Conversione del messaggio in ASCII:");
    riga = "";
    for (x = 0; x < ascii.length - 1; x++) {
        riga = riga + ascii[x] + ","
    }
    riga = riga + ascii[x] + "."
    console.log(riga);
    console.log("Conversione del messaggio in binario (Byte):");
    riga = "";
    for (x = 0; x < binario.length - 1; x++) {
        riga = riga + binario[x] + ","
    }
    riga = riga + binario[x] + "."
    console.log(riga);
    risposta = input.question("Vuoi inserire un altro messaggio (s/n)? ")
    while (risposta.toLowerCase() != 's' && risposta.toLowerCase() != 'n') {
        console.log("Errore: inserire s oppure n.");
        risposta = input.question("Vuoi inserire un altro messaggio (s/n)? ")
    }
} while (risposta.toLowerCase() == 's');

 

Soluzione Python


import math

# Funzioni
def decimaleBinario(decimale):
    binario = []
    numero = 0
    posizione = 7
    for x in range(8):
        binario.append('0')
    numero = decimale
    while numero >= 2:
        risultato = math.floor(numero / 2)
        resto = numero % 2
        binario[posizione] = str(resto)
        posizione = posizione-1
        numero = risultato
    binario[posizione] = str(numero)
    return ''.join(binario)


# Programma
messaggio = ''
risposta = 's'
riga = ''
ascii = []
binario = []
x = 0
while risposta == 's':
    ascii = []
    binario = []
    messaggio = input("Messaggio da convertire: ")
    for carattere in messaggio:
        ascii.append(ord(carattere))
        binario.append(decimaleBinario(ord(carattere)))
    print("Conversione del messaggio in ASCII:")
    riga = ""
    for x in range(len(ascii)-1):
        riga = riga + str(ascii[x]) + ","
    x=x+1
    riga = riga + str(ascii[x]) + "."
    print(riga)
    print("Conversione del messaggio in binario (Byte):")
    riga = ""
    for x in range(len(binario)-1):
        riga = riga + binario[x] + ","
    x=x+1
    riga = riga + binario[x] + "."
    print(riga)
    risposta = input("Vuoi inserire un altro messaggio (s/n)? ")
    while risposta != 's' and risposta != 'n':
        print("Errore: inserire s oppure n.")
        risposta = input("Vuoi inserire un altro messaggio (s/n)? ")


Come eseguire il programma JavaScript

Per eseguire il programma JavaScript, bisogna installare il framework node.js sul proprio computer.

Il download del file d'installazione può essere fatto collegandosi al link: https://nodejs.org/it/download/.

Il file di download deve corrispondere al sistema operativo installato sul proprio computer.

Dopo il download eseguire il file per installare node.js.

Per verificare se il framework node.js è stato installato correttamente, dal prompt dei comandi del sistema operativo usato, eseguire il comando:
node --version

dovrebbe essere visualizzata la versione di node.js installata, come mostra l'immagine seguente:


Successivamente bisogna creare una cartella "laboratori" dove salvare il programma JavaScript da eseguire.

Per salvare il programma nella cartella "laboratori", basta  copiarlo nel blocco note o in qualunque editor di testo e salvarlo con il nome:

analogico_digitale.js

Infine, da prompt dei comandi, entrare nella cartella laboratori ed eseguire il comando:

npm install readline-sync

Questa libreria serve per permettere l'inserimento di dati da tastiera, quando viene eseguito il programma.

A queso punto si può eseguire il programma con il comando node, che è l'interprete JavaScript di node.js, come mostra l'esempo seguente:

node analogico_digitale


Come eseguire il programma Python

Per eseguire il programma Python, bisogna installare il framework python sul proprio computer.

Il download del file d'installazione può essere fatto collegandosi al link: https://www.python.org/downloads/
.

Il file di download deve corrispondere al sistema operativo installato sul proprio computer.

Dopo il download eseguire il file per installare python.

Attenzione, durante l'installazione è importante spuntare l'opzione "Add Python 3.X to PATH:



Per verificare se il framework python è stato installato correttamente, dal prompt dei comandi del sistema operativo usato, eseguire il comando:
python --version

dovrebbe essere visualizzata la versione di python installata, come mostra l'immagine seguente:


Successivamente bisogna creare una cartella "laboratori" dove salvare il programma python da eseguire.

Per salvare il programma nella cartella "laboratori", basta  copiarlo nel blocco note o in qualunque editor di testo e salvarlo con il nome:

analogico_digitale.py

Infine, da prompt dei comandi, entrare nella cartella laboratori ed eseguire il comando:

python analogico_digitale.py

 


Leggi anche le altre lezioni ...

COMPETENZE PER PROGRAMMARE:
1-I sistemi di numerazione
3-La reppresentazione digitale dei numeri interi e decimali
4-Le stringhe

5-Le espressioni regolari (REGEXP)


Segui sul canale YouTube "Skill Factory Channel" la Playlist: COMPETENZE PER PROGRAMMARE


TUTORIALS
1-Laboratori di logica di programmazione in C
2-Impariamo a programmare con JavaScript
3-Ricominciamo dal linguaggio SQL
4-Introduzione alla logica degli oggetti
5-TypeScript
6-Impariamo a programmare in Python
7-Come sviluppare un sito in WordPress


PAR GOL (Garanzia di Occupabilità dei Lavoratori)

Se sei residente in Campania e cerchi lavoro, sai che puoi partecipare gratuitamente ad un corso di formazione professionale PAR GOL?

I corsi di formazione professionale PAR GOL sono finanziati dalla Regione Campania e ti permettono di acquisire una Qualifica Professionale Europea (EQF) e di partecipare ad un tirocinio formativo aziendale.

Invia il tuo CV o una manifestazione d'interesse a: recruiting@skillfactory.it

oppure

chiama ai seguenti numeri di telefono:

Tel.: 081/18181361
Cell.: 327 0870141

oppure

Contattaci attraverso il nostro sito: www.skillfactory.it


Per maggiori informazioni sul progetto PAR GOLclicca qui.

Per maggiori informazioni sulle Qualifiche Professionali Europee (EQF)clicca qui.


Academy delle professioni digitali

Per consultare il catalogo dei corsi online della nostra Academy ...

... collegati al nostro sito: www.skillfactory.it

 

Share Button
TOP