Aggiungere un numero random in un file

Aggiungere un numero random in un file

In questa lezione svilupperemo un semplice algoritmo per aggiungere un numero random in un file in Python.

Supponiamo di avere un file che contiene un numero.

Innanzitutto stampiamo il numero contenuto nel file, dopo generiamo un numero random e lo sommiamo al numero che è contenuto nel file.

Poi sommiamo i due numeri e aggiungiamo il numero così ottenuto al file, iniziando da una nuova riga.

Supponendo che il file number_random.txt contenga il numero 6, proviamo questo codice di esempio:


import random

f = open('number_random.txt', 'r+')
numero = f.readline()
print(numero)

random_number = random.randint(1, 100)
print(random_number)

somma = random_number + int(numero)
print(somma)

f.write('\n' + str(somma))
f.close()

Occorre utilizzare la modalità r+ per poter aprire un file in lettura e scrittura contemporaneamente.

Ricordiamo inoltre che il metodo write() vuole una stringa, quindi dobbiamo convertire il numero ottenuto dalla lettura del file in una stringa utilizzando il casting con str().

Aggiungere un numero random in un file – secondo esempio

In questo secondo esempio cercheremo di indovinare il numero che è contenuto nel file di testo number.txt.

Supponendo che il file contenga un solo numero, apriamo il file in modalità di sola lettura e leggiamo il numero. Dopo chiediamo qual è il numero contenuto nel file e diamo un messaggio di vittoria o di sconfitta dopo averlo confrontato.

Sviluppiamo un possibile algoritmo che risolve il nostro problema utilizzando anche una semplice funzione:


f = open('number.txt', 'r')
number = f.readline()

def indovina(num):
    if num == number:
        return True

my_number = input('Quale numero è contenuto nel file?: ')

risultato = indovina(my_number)

if risultato:
    print('Hai indovinato!')
else:
    print('Non hai indovinato')
    print('Il numero era: ' + number)

Aggiungere un numero random in un file – terzo esempio

Adesso modifichiamo l’algoritmo dando degli aiuti all’utente. Ogni volta che l’utente proverà ad indovinare gli verrà detto se il numero pensato è più basso o più alto di quello contenuto nel file di testo.

Il tutto per 5 volte.

Quando siamo davanti ad un problema complesso dobbiamo scomporlo in sottoproblemi per renderlo più semplice.

Allora dapprima sviluppiamo il caso più semplice, cioè una sola risposta:


f = open('number.txt', 'r')
number = f.readline()

def indovina(num):
    if num == number:
        return 0
    elif num > number:
        return 1
    else:
        return 2
 

my_number = input('Quale numero è contenuto nel file?: ')

risultato = indovina(my_number)

if risultato == 0:
    print('Hai indovinato!')
elif risultato == 1:
    print('Il numero da indovinare è più basso')
else:
    print('Il numero da indovinare è più alto')

Adesso generiamo i 5 tentativi, facendo in modo di terminare il gioco quando si finiscono i tentativi oppure quando si indovina.

Generiamo una prima soluzione nella quale usciremo dal ciclo attraverso l’uso di break:


f = open('number.txt', 'r')
number = f.readline()

def indovina(num):
    if num == number:
        return 0
    elif num > number:
        return 1
    else:
        return 2
 
tentativi = 5

for i in range(tentativi):
    my_number = input('Quale numero è contenuto nel file?: ')
    risultato = indovina(my_number)
    if risultato == 0:
        print('Hai indovinato!')
        break
    elif risultato == 1:
        print('Il numero da indovinare è più basso')
    else:
        print('Il numero da indovinare è più alto') 

Adesso creiamo una nuova funzione evitando così l’utilizzo del break:


f = open('number.txt', 'r')
number = f.readline()

def indovina(num):
    if num == number:
        return 0
    elif num > number:
        return 1
    else:
        return 2
 
tentativi = 5
trovato = False

def gioco():
    for i in range(tentativi):
        my_number = input('Quale numero è contenuto nel file?: ')
        risultato = indovina(my_number)
        if risultato == 0:
            print('Hai indovinato!')
            return
        elif risultato == 1:
            print('Il numero da indovinare è più basso')
        else:
            print('Il numero da indovinare è più alto')

gioco()

In questa lezione abbiamo sviluppato alcuni algoritmi come ad esempio aggiungere un numero random in un file in Python, oppure indovinare il numero contenuto in un file di testo. Nelle prossime lezioni ci eserciteremo ancora sui file.

Alcuni link utili

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione

4 – Stringhe

5 – Casting

6 – Input e print

7 – Primi esercizi in Python

Aggiungere contenuto a un file in Python

Aggiungere contenuto a un file in Python

In questa lezione studieremo come aggiungere contenuto a un file in Python già esistente, utilizzando la modalità append.

Aggiungere contenuto a un file in Python – primo esempio

In questo primo esempio utilizzeremo il nostro file rubrica.txt che già contiene dei dati ed aggiungere dei nuovi contatti.

Ipotizziamo ad esempio che il file contenga questi contatti:

Nome: cristina – Telefono: 3567
Nome: luisa – Telefono: 34789

Implementiamo un algoritmo che consente di aggiungere un nuovo dato utilizzando il metodo write:


f = open('rubrica.txt', 'a')
name = input('Inserisci un nuovo nome: ')
telephone = input('Inserisci il telefono: ')
f.write('Nome:' + name + ' - Telefono:' + telephone)    
f.close()

Possiamo anche utilizzare la funzione print per scrivere nel file, dove specifichiamo il file su cui scrivere che abbiamo aperto in precedenza con open:


f = open('rubrica.txt', 'a')
name = input('Inserisci un nuovo nome: ')
telephone = input('Inserisci il telefono: ')
print('Nome:' + name + ' - Telefono:' + telephone, file = f)    
f.close()

Aggiungere contenuto a un file in Python – secondo esempio

In questo secondo esempio gestire più inserimenti grazie alle istruzioni cicliche.

Supponiamo ad esempio di voler chiedere all’utente quanti nomi si vuole aggiungere al file e di conseguenza gestire gli input in base alla risposta data.

Questa una possibile implementazione del semplice algoritmo nel quale utilizziamo il ciclo for:


f = open('rubrica.txt', 'a')

n_dati = int(input('Quanti dati vuoi inserire?: '))

for i in range(n_dati):
    name = input('Inserisci un nuovo nome: ')
    telephone = input('Inserisci il telefono: ')
    f.write('\nNome:' + name + ' - Telefono:' + telephone)

f.close()

Aggiungere contenuto a un file in Python – terzo esempio

Se vogliamo aggiungere più elementi possiamo utilizzare anche un’istruzione iterativa e terminare ad esempio quando si clicca su un carattere a scelta.

Ipotizziamo di voler inserire dei dati e fermarci quando si sceglie di digitare il carattere *.

Ecco dunque una possibile implementazione nel quale utilizziamo il ciclo while:


f = open('rubrica.txt', 'a')

print('Inserisci nuovi contatti nella rubrica, per terminare inserisci * nel nome')

name = input('Inserisci un nuovo nome: ')

while name !='*':
    telephone = input('Inserisci il telefono: ')
    f.write('\nNome:' + name + ' - Telefono:' + telephone)
    name = input('Inserisci un nuovo nome: ')
f.close()

Colgo l’occasione per ricordare che il ciclo for si utilizza quando sappiamo esattamente quante volte sarà eseguito il ciclo, come nel secondo esempio dove verrà esseguito n_dati. Mentre il ciclo while si utilizza quando si vuole fermare il ciclo a seguito di una condizione.

In questa lezione abbiamo visto alcuni semplici esempi su come aggiungere contenuto ad un file in Python.

Alcuni link utili

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione

4 – Stringhe

5 – Casting

6 – Input e print

7 – Primi esercizi in Python

readline Python

readline Python

In questa lezione studieremo il metodo readline di Python necessario per la lettura di un file di testo.

Questo metodo restituisce una riga di caratteri, incluso il carattere di fine riga, ovvero il carattere \n.

readline Python – primo esempio

Facciamo un primo esempio su un file rubrica che contiene i seguenti contatti di esempio:

Nome: cristina – Telefono: 3567
Nome: coding – Telefono: 34789

Apriamo il file utilizzando la funzione open, specificando la modalità di lettura (r). Dopo applicahiamo il metodo readline() di Python e proviamo a stampare il testo letto.


f = open('rubrica.txt', 'r')
testo = f.readline()
print(testo)
f.close()

Il seguente codice stamperà solo la prima riga: Nome: cristina – Telefono: 3567.

Come possiamo notare l’esecuzione di readline() produce la lettura fino al carattere di fine riga, ovvero \n.

In definitiva questo metodo utilizza un cursore che rappresenta un indice numerico che parte da 0 e che si incrementa di 1 ad ogni carattere letto.

Se provassimo ad eseguire nuovamente readline() leggeremo la seconda riga, in quanto l’indice è stato incrementato.


f = open('rubrica.txt', 'r')
testo = f.readline()
print(testo)
testo = f.readline()
print(testo)
f.close()

Ma chiaramente questo codice per la lettura di un file di testo non è l’ideale. Proviamo ad utilizzare un ciclo.

readline Python – secondo esempio

Ragioniamo sul fatto che arresteremo la lettura quando incontreremo la stringa nulla, in quanto rappresenta la fine del file.

Implementiamo dunque una possibile soluzione:


f = open('rubrica.txt', 'r')
testo = f.readline()

while testo != "":
    print(testo)
    testo = f.readline()
    
f.close()

Notiamo che ciascun contatto della rubrica occuperà due righe in quanto la funzione print aggiunge un ulteriore carattere di fine riga.

Per evitare questo problema potremmo utilizzare la funzione print con il parametro end, in questo modo:

print(testo, end = ” “)

in alternativa si può utilizzare il metodo rstrip().

Ciclo for in

Un’alternativa all’utilizzo di readline in Python per poter leggere un file è il ciclo for in.

Vediamo un semplice esempio:


f = open('rubrica.txt', 'r')

for testo in f:
    print(testo.rstrip())
    
f.close()

In definitiva stiamo trattando il file come se fosse semplicemente un elenco di stringhe.

Conclusioni

In questa lezione abbiamo studiato il metodo readline di Python per leggere i dati da un file di testo. Abbiamo anche visto che non è l’unico modo per poter leggere un file di testo.

Alcuni link utili

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione

4 – Stringhe

5 – Casting

6 – Input e print

7 – Primi esercizi in Python

Dati di input in un file di testo

Dati di input in un file di testo

In questa lezione andremo a memorizzare dei dati di input in file di testo in Python, creando una semplice rubrica che contiene i nomi ed i telefoni dei nostri amici.

Primo esempio – dati di input in un file di testo

Facciamo un primo esempio memorizzando un dato di input alla volta nel file rubrica.txt.

Innanzitutto creiamo l’oggetto per poter poi utilizzare i metodi e le proprietà dei file:

f = open(“rubrica.txt“, ‘w’)

Stampiamo dunque una frase a video per dire che stiamo memorizzando i nomi ed i telefoni dei nostri amici:
print(‘Inserisci i nomi ed il telefono dei tuoi amici!’)

Dopo chiediamo di inserire il nome del nostro amico:
nome = input(‘Nome: ‘)

Poi chiediamo di inserire il telefono:
telefono = input(‘Telefono: ‘)

Utilizziamo il metodo write per inserire i dati presi in input:
f.write(‘Nome: ‘ + nome + ‘ – Telefono: ‘ + telefono)

Infine chiudiamo il file per poter vedere i dati memorizzati nella memoria di massa:
f.close()

Ricordiamo che se dimentichiamo di effettuare quest’ultima operazione potremmo non vedere alcuni o tutti i record inseriti in fase di scrittura.

Secondo esempio – dati di input in un file di testo

Nel primo esempio abbiamo memorizzato un solo dato in Python, adesso utilizzeremo un ciclo per momorizzare più dati di input.

Supponiamo di voler interrompere l’inserimento dei dati quando inseriamo il carattere asterisco.

Potremmo utilizzare un ciclo while, in modo tale che finchè il nome sarà diverso dal carattere asterisco si continuerà a chiedere i dati.

Ecco dunque una possibile implementazione del programma:


f = open("rubrica.txt", 'w')
print('Inserisci i nomi ed il telefono dei tuoi amici! Assegna il carattere * al nome quando vuoi fermare l\'inserimento')

nome = input('Nome: ')
while nome != '*':
    telefono = input('Telefono: ')
    f.write('Nome: ' + nome + ' - Telefono: ' + telefono + '\n')
    nome = input('Nome: ')

f.close()

In questa lezione abbiamo creato una semplice rubrica in Python ovvero abbiamo memorizzato dei dati in input in un file di testo.

Alcuni link utili

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione

4 – Stringhe

5 – Casting

6 – Input e print

7 – Primi esercizi in Python

write Python

write Python

In questa lezione studieremo il metodo write in Python per poter scrivere sui file di testo.

Dopo aver aperto il file in scrittura possiamo infatti scrivere su di esso.

f = open(“coding.txt“, ‘w‘)
f.write(“Il coding è fondamentale per incrementare il pensiero logico”)
f.close() #chiusura stream

In questo semplice esempio abbiamo creato un oggetto f sul quale abbiamo poi utilizzato 2 metodi: write() e close() di Python.

L’oggetto si crea utilizzando la funzione open(), spiegata nella lezione precedente.

Il metodo write() in Python consente, dopo l’apertura del file, di poter scrivere su di esso. Attenzione, se c’era già del contenuto esso verrà sosvrascritto. Dopo, per salvare quanto scritto sul file, occorre chiuderlo utilizzando il metodo close().

L’operazione di chiusura, come abbiamo già spiegato, consente il salvataggio del file nella memoria di massa.

Nel metodo write si specifica dunque la stringa che vogliamo inserire nel file di testo.

write Python con append

Supponiamo adesso di voler aggiungere del testo ad un file esistente. Per farlo dobbiamo utilizzare la modalità mode = ‘a’.

Facciamo un semplice esempio:

f = open(“coding.txt“, ‘a‘)
f.write(“Divertitevi a programmare in Python.”)
f.close() #chiusura stream

Se apriamo il file coding.txt possiamo notare che il testo è attaccato al codice di prima. Come possiamo fare per scrivere la frase a capo in una nuova riga?

Potremmo semplicemente scrivere:

f.write(“\nDivertitevi a programmare in Python”)

Abbiamo aggiunto \n per andare a capo ed iniziare a scrivere in una nuova riga.

In questa lezione abbiamo parlato del metodo write in Python per scrivere su un file, nella prossima lezione continueremo a fare degli esempi.

Alcuni link utili

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione

4 – Stringhe

5 – Casting

6 – Input e print

7 – Primi esercizi in Python

8 – Errori in Python

9 – Script Python

open in Python

open in Python

In questa lezione studieremo la funzione open in Python, ovvero vedremo come aprire un file di testo o binario.

Nella precedente lezione abbiamo parlato di file e abbiamo visto la differenza tra file binari e di testo (o ASCII). Nei nostri esempi saranno usati principalmente file di testo per memorizzare archivi sia con lunghezza fissa sia con lunghezza variabile.

Dunque, per operare su un file in linguaggio Python dobbiamo eseguire queste semplici fasi:

  • innanzitutto aprire il file specificando: nome, estensione (obbligatori) e tipo di accesso (se in scrittura, lettura, in modalità append per aggiungere contenuto ad un file esistente, in lettura e scrittura. Dato opzionale in quanto ha un valore di default che è in lettura). Oltre a questi valori ci sono altri argomenti che si possono indicare e che vedremo a mano a mano nel tutorial;
  • dopo fare le operazioni sul file;
  • infine chiudere il file.

Se il file non si trova nella stessa cartella del file Python occorre specificare il percorso corretto. Se siete alle prime armi vi consiglio di lasciare il file nella stessa cartella del file di Python.

Open in Python

I flussi vengono descritti tramite le classi, ovvero un elenco di proprietà e metodi collegati tra loro. Una volta dichiarata una variabile di tipo oggetto si dispone di tutte le proprietà e metodi collegati ad esso.

Una delle funzioni che vi voglio presentare è proprio open in Python che ci permette di aprire un file.

Vediamolo in dettaglio, supponendo di voler aprire un file di nome coding.txt che si trova nella stessa cartella del nostro file Python.

f = open(‘coding.txt‘,’r’) # Apertura in input

Consente di aprire il file solo per la lettura dei caratteri. Ma attenzione, se il file non esiste ci restituirà un errore!

Puntualizziamo però che la sintassi completa sarebbe questa:

f = open(‘coding.txt’, mode = ‘r’)

Ma possiamo anche omettere mode.

Da notare cha abbiamo dichiarato una variabile f di tipo oggetto sulla quale poi applicheremo i vari metodi.

Facciamo adesso un altro semplice esempio:

f = open(‘coding.txt’,’w’) # Apertura in output

Si apre il file e si consente la scrittura su di esso. Ma attenzione, se il file esiste viene cancellato e ricreato!

Vediamo in dettaglio le varie modalità di apertura di un file.

Modalità di apertura di un file in Python

Approfondiamo la funzione open in Python studiando in dettaglio le varie modalità di accesso.

Di seguito ecco una tabella esplicativa dei tipi di accesso ad un file in Python.

ModalitàEsempioUtilizzo
ropen(‘coding.txt’,’r’)Valore di default. Crea il file e lo apre in sola lettura. Se il file esiste non esiste viene restituito un messaggio di errore.
wopen(‘coding.txt’,’w’)Crea il file e lo apre in sola scrittura. Se il file esiste viene cancellato.
aopen(‘coding.txt’,’a’)Apre in file in modalità append, ovvero consente di aggiungere testo in un file già esistente. Se il file non esiste lo crea.
+open(‘coding.txt’,’r+’)Apre il file in modalità lettura e scrittura in modalità append. Se il file non esiste restituisce errore.
xopen(‘coding.txt’,’x’)Crea il file, se già il file esiste restituisce errore.
topen(‘coding.txt’,’t’)Apre un file in modalità testo.
bopen(‘coding.jpg’,’b’)Apre un file in modalità binaria. Ad esempio per le immagini.

Facciamo adesso un esempio combiando più opzioni di quelle elencate nella tabella sopra:

f=open(‘coding.jpg’,’r+b’)

Questa semplicissiam riga di codice consente di aprire un file binario di nome coding.jpg in lettura e scrittura.

In questa lezione abbiamo dunque introdotto il metodo open in Python nella prossima parleremo del metodo write.

Alcuni link utili

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione

4 – Stringhe

5 – Casting

6 – Input e print

7 – Primi esercizi in Python