Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Esercizi svolti con Python, Esercizi di Fondamenti di informatica

Esercizi svolti con il for, while, file, dizionari, range, implemento, definizioni.

Tipologia: Esercizi

2018/2019

In vendita dal 11/01/2019

PaCa.
PaCa. 🇮🇹

4.6

(14)

21 documenti

1 / 29

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Gestione del Range
#stampa triangolo rettangolo
ht=int(input('inserisci altezza triangolo:'))
for i in range(ht):
print('*'*(i+1))
#se lo voglio dall'altro lato(simmetrico)
ht=int(input('inserisci altezza triangolo:'))
for i in range(ht):
print(' '*(ht-i-1),end='')
print('*'*(i+1))
#stampa quadrato
l=int(input('inserisci lato del quadrato:'))
for i in range(l):
if i==0 or i==l-1:
print('*'*l)
else:
print('*'+' '*(l-2)+'*')
#stampa triangolo isoscele
ht=int(input('inserisci altezza del triangolo:'))
for i in range(ht):
print(' '*(ht-i-1)+'*'*(2*i+1)+' '*(ht-i-1)) #l'ultimo è opzionale
perché sono spazi e non si vedono
#stampa albero di natale
ht=int(input('altezza totale albero:'))
hb=int(input('altezza tronco:'))
lb=int(input('lato tronco(dispari):'))
for i in range(ht-hb):
s=' '*(ht-hb-i-1)+'*'*(2*i+1)
print(s)
for j in range(hb):
s=(' '*((2*(ht-hb)-1-lb)//2)+'*'*lb+' '*((2*(ht-hb)-1-lb)//2))
print(s)
#snake passo 2
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d

Anteprima parziale del testo

Scarica Esercizi svolti con Python e più Esercizi in PDF di Fondamenti di informatica solo su Docsity!

Gestione del Range

#stampa triangolo rettangolo

ht=int(input('inserisci altezza triangolo:')) for i in range(ht): print(''(i+1))

#se lo voglio dall'altro lato(simmetrico)

ht=int(input('inserisci altezza triangolo:')) for i in range(ht): print(' '(ht-i-1),end='') print(''*(i+1))

#stampa quadrato

l=int(input('inserisci lato del quadrato:')) for i in range(l): if i==0 or i==l-1: print(''l) else: print(''+' '(l-2)+'*')

#stampa triangolo isoscele

ht=int(input('inserisci altezza del triangolo:')) for i in range(ht): print(' '(ht-i-1)+''(2i+1)+' '*(ht-i-1)) #l'ultimo è opzionale perché sono spazi e non si vedono

#stampa albero di natale

ht=int(input('altezza totale albero:')) hb=int(input('altezza tronco:')) lb=int(input('lato tronco(dispari):')) for i in range(ht-hb): s=' '(ht-hb-i-1)+''(2i+1) print(s)

for j in range(hb): s=(' '((2(ht-hb)-1-lb)//2)+''lb+' '((2(ht-hb)-1-lb)//2)) print(s)

#snake passo 2

#altezza 7 in questo caso ------ i= ------ i= ------ i= ------ i= ------ i= ------ i= ------** i=

hs=int(input('inserisci altezza serpente:')) for i in range(hs): print(' 'i+''+' '(hs+1-2-i))

#list(range(start,stop,step))

list(range(1,6,1)) #da 1 a 6 di passo 1 [1, 2, 3, 4, 5]

list(range(10,0,-1)) # 10 a 1 di passo -1 ovvero vado all'indietro [10,9,8,7,6,5,4,3,2,1]

#somma i primi 100 numeri positivi

somma= for i in range(1,101,1): somma=somma+i print(somma) print(100101/2) #n(n+1)/

#somma numeri

n=int(input('quanti numeri?')) somma= for i in range(1,n+1,1): #n+1 perchè n+1 è escluso somma=somma+i print(somma) print(n*(n+1)/2)

Implementa

#implementa s.count(c)

finito=False while not finito:

print(news)

#implementa s.find con while (il while è più indicato perchè appena trovo

il carattere devo restituire True s=input('inserisci una stringa:') c=input('inserisci il carattere da cercare c:')

trovato=False indice=- i= while not trovato and i<len(s): if c==s[i]: indice=i trovato=True i=i+

print('mio :',indice) print('python:',s.find(c))

Funzioni in python

def ()

istruzioni

return

def raddoppia (n): #n parametro formale #n è un input n=n* return n #n parametro attuale #il return è un'uscita(output)

'''def raddoppia (n): #n parametro formale #n è un input print(n*2) #questa ha effetti collaterali perchè stampa[l=raddoppia('casa')] ma dentro l non c'è niente. Quindi nella funzione ci va il return e non il print perchè ci deve restituire qualcosa'''

def isPari(n): return n%2==

#funzione con più argomenti

def raddoppia (n,volte): return n2*(volte-1)

#range

def r(start,stop,step): for i in range(start,stop,step): print(i)

def r(start,stop,step=1): #se metto step=2 andrà di due; se non metto niente va di uno for i in range(start,stop,step): print(i)

#per vedere se è un intero

  • def isInteger1 (s): if len(s)==0: return False #ho bisogno di questo perchè sennò ricevo un errore in s[0] in .. else: return s.isdecimal() or (s[0] in '+-' and s[1:].isdecimal())
  • def isInteger2 (s): if s[0:1] in '+-': #s[0:1] funziona anche per stringhe vuote s=s[1:] return s.isdecimal()

n=input('inserisci un intero:') while isInteger2(n): print(int(n)) n=input('inserisci un intero:')

#se è reale

def isReal(s): if s[0:1] in '+-': s=s[1:]

n=int(input('inserisci n:')) print(estrai(s,n)) continua=input('vuoi continuare? s/n:')

#estrai quindi che farà? ad esempio inserisco la stringa '012345679' inserisco #n=3 e quindi mi restituisce la stringa '0369'

def estrai (s,n,k): #k è il punto da cui devo partire risultato = '' for i in range(k,len(s)): if (i-k) % n == 0 : #i-k vuol dire che parte da 0 risultato += s[i] return risultato

continua= 's' while continua!= 'n': s= input('inserisci la stringa:') n= input('inserisci il numero n:') k= input('inserisci l indice iniziale:') print(estrai(s,n,k)) continua = input('vuoi continuare? s/n:')

#però così io devo mettere per forza k anche se voglio partire da 0 #allora come posso fare?

#dalla stringa s cera una nuova stringa con i caratteri #di indice k,k+n,k+2n,k+3n... #se k non è presente tra i parametri attuali vale 0

def estrai(s,n,k=0): risultato = '' for i in range(k,len(s)): if (i-k) % n ==0: risultato += s[i] return risultato

continua = 's' while continua != 'n': s= input('inserisci la stringa:') n= input('inserisci il numero n:') k= input('inserisci l indice iniziale:') print('estrai(s,n,k)',estrai(s,n,k)) print('estrai(s,n)', estrai(s,n)) #li scrivo tutti e due solo per vedere la differenza continua = input('vuoi continuare? s/n:')

Correzione esercizi

#prendi in ingresso una stringa s e crea una lista(ordinata)

che contiene tutti i caratteri della stringa s distinti tra loro ordinati

in ordine alfabetico

def creaListaCD(s): l=[] for c in s: if c not in l: l.append(c) # l=l+[c] questo però crea sempre una nuova lista che viene persa al ciclo successivo però è corretta

l.sort() #va fatta prima perchè sennò restituisce None return l

continua='s' while continua != 'n': s=input('inserisci la stringa:') print (creaListaCD(s)) continua = input('vuoi continuare? s/n:')

#scrivere una funzione che riceve in ingresso la stringa s e restituisce True

se il carattere c compare almeno una volta in due posizioni adiacenti. False

altrimenti. Ad esempio se la stringa s vale 'asso' e c vale 's' deve

restituire True

def A_Ex1(s,c): i=1 #perchè la stringa deve essere lunga almeno 2 caratteri while i <len(s): if s[i]==s[i-1]==c: #questo si fa solo in python; dovrebbe essere s[i]==s[i-1] and s[i]==c return True i=i+

return False

#scrivere una funzione booleana che prende come parametro una lista e

restituisce True se nella lista ci sono tutte stringhe convertibili in interi.

Ad esempio, se la lista vale ['11','-2','+3','81']la funzione deve restituire True.

#Usare la libreria libreriaV1.py

from libreriaV1 import *

Se faccio f. mi compaiono tutte le cose che posso fare:

f.close se non lo faccio il programma viene bloccato e quindi nessun altro lo può aprire. Quindi ci deve sempre stare.

Esempio di codice:

f=open(‘Esempio.txt’,encoding=”UTF-8”) s=f.read() f.close() print(s) print(‘\n\n’) #Se lo eseguo dentro s ci sarà tutto il file

Questo è un esempio di un file di testo. Occupa quattro righe

Riga 4.

La terza riga non è vuota ma c’è un \n.

Quindi endoding=”UTF-8” serve per leggere ad esempio la è, cioè quei simboli “strani”.

s.count(‘a’) mi dice le a che ci sono nel file

‘un’ in s ci dice se è vero che c’è ‘un’ nel file

True

readlines() legge tutto il file e lo mette in una lista

l=f.readlines() mette una riga per ogni argomento (l[0]=prima riga..)

#scansione del file per elementi(righe)

F=open(‘Esempio.txt’, encoding= “UTF-8”)

i=

for elem in f: #elem è una riga

print(i,elem) i=i+

f.close()

Stamperà:

1 Questo è un esempio di un file di testo. 2 Occupa quattro righe 3

4 Riga 4.

def creaListaParole(file): f=open(file,encoding=”UTF-8”) s=f.read() sv=s.split() #ogni volta che trova uno spazio bianco e ogni volta che trova \n return sv lp=creaListaParole(‘Esempio.txt’)

print(‘lp=’,lp)

lp=[‘Quando’, ‘è’, ‘un’, ‘esempio’,….]

def creaListaParoleNoDoppioni (file): f=open(file,encoding=”UTF-8”) s=f.read() sv=s.split() ris= [ ] #lista vuota, inizializzo la lista for elem in sv: if elem not in in ris: ris:append(elem) ris.sort() #poi le metto in ordine alfabetico return ris lp=creaListaParoleNoDoppioni(‘Esempio.txt’)

print(lp)

#accede ad un file che è un csv e crea una lista di oggetti corrispond. alle

righe del file

def creaListaTuple(file):

f=open(file,encoding=”UTF-8”) sv= [ ] for elem in f: elem=elem.strip().split(‘,’) #con strip pulisco la riga(toglie gli spazi aggiuntivi, \n.. #con la virgola perché è il separatore che ho usato su excel print(elem) #serve solo per far capire cosa sta succedendo sv.append(elem)

Riga 4.

Lo vogliamo leggere e copiare da un’altra parte.

#lettura scrittura di un file per elementi (righe)

fin=open(‘Esempio.txt’, ‘r’, encoding=”UTF-8”) #file input

fout=open(‘Copia_Esempio.txt’, ‘w’, encoding=”UTF-8”) #se Copia.. esiste distrugge quello che c’è dentro e crea un nuovo file sennò lo crea e basta

for riga in fin: #riga prima assume Questo è..,poi Occupa.. ecc..

print(riga,end= ‘ ‘ ,file=fout) #non stampa sullo schermo ma sul file

#mettendo end= ‘ ‘ lo stampa esattamente così com’è

perché sennò mette troppi \n

fin.close()

fout.close()

#lettura scrittura parziale di un file per elementi (righe)

fin=open(‘Esempio.txt’, ‘r’, encoding=”UTF-8”) #file input

fout=open(‘Copia_Esempio.txt’, ‘w’, encoding=”UTF-8”)

for riga in fin:

#stampo solo righe non vuote (in questo caso specifico) if len(riga.strip())>0: #riga.strip toglie il \n alla fine però non modifica la stringa è solo un controllo print(riga,end= ‘ ‘,file=fout)

fin.close()

fout.close()

#lettura scrittura parziale di un file per elementi (righe)

def filtra(file_in, file_out, parola):

fin=open(file_in, ‘r’, encoding=”UTF-8”)

fout=open(file_out, ‘w’, encoding=”UTF-8”)

for riga in fin: #stampo solo righe che contengono ‘parola’ if parola in riga: print(riga,end= ‘ ‘,file=fout)

fin.close()

fout.close()

#conservo quello che è successo in passato

def aggiungiParoleFile(file_out, s):

fout=open(file_out, ‘a’, encoding=”UTF-8”) #appendi

parole=s.split()

for parola in parole:

print(parola,file=fout)

fout.close()

aggiungiParoleFile(‘parole.txt’, ‘nel mezzo’)

aggiungiParoleFile(‘parole.txt’, ‘pippo pluto’)

aggiungiParoleFile(‘parole.txt’, s)

aggiungiParoleFile(‘parole.txt’, ‘pippo pluto’)

if min(riga)==max(riga): pareggiate=pareggiate+ elif riga[giocatore]==min(riga): ultimo=ultimo+ elif riga[giocatore]==max(riga): primo=primo+ riga=fin.readline().strip().split(',')

fin.close()

return nome,partite,primo,ultimo,pareggiate

print('Nome Partite primo ultimo Pareggiate')

print(statistichePartire('Partite3.csv',0)

print(statistichePartire('Partite3.csv',1)

print(statistichePartire('Partite3.csv',2)

nome,partite,primo,ultimo,pareggiate=statistichePartire('Partite3.csc')

def vincitore(file_in):

fin=open(file_in,'r',encodinf='UTF-8') nomi=fin.readline().strip().split(',') #fin.readline legge una riga vincitore=[] for i in range(len(nomi)): vincite.append(0) #[0,0,0]

riga=fin.readline().strip().split(',') while len(riga[0]) > 0: for i in range(len(riga)): riga[i]=int(riga[i]): #riga ora è una lista di interi if min(riga) != max(riga): for i in range(len(nomi)):

if riga[i]==max(riga): vincite[i]= vincite[i] + riga=fin.readline().strip().split(',') #leggo riga successiva fin.close() vincitori='' for i in range(len(nomi)): if vincite[i]==max(vincite): vincitori=vincitori+nomi[i]+ ' ' return vincitori

#restituisce il nome del giocatore che ha vinto più numero partite vinte

print(vincitore('Partire3.csv'))

def media(file_in):

fin=open(file_in,'r',encoding='UTF-8') somma= n= riga=fin.readline().strip() #non faccio split perchè non ci sono virgole #visto che c'è solo un elemento per riga while len(riga) > 0 : somma=somma+float(riga) #float converte la riga in un reale n=n+ riga=fin.readline().strip() fin.close() return somma/n

print(media('Reali.txt')

#copio nel nuovo file solo quello che soddisfa una condizione

c=fin.read(1) #legge un singolo carattere while c!='': #c diverso da niente. il carattere può essere vuoto solo quando arrivo alla fine print(c) c=fin.read(1) #legge il prossimo carattere(in questo caso 1 alla volta) stampaCarattere('argomenti.txt')

#mi calcoli il nummero di occorrenze di ogni singolo carattere(quante a,

quante b..)senza fare distinzioni tra maiuscole e minuscole

def fCaratteri(file_in): fin=open(file_in,'r',encoding='UTF-8') f=[] for i in range(ord('z')-ord('a')+1): # f.append(0) #[0,0..] c=fin.read(1) #legge il primo carattere while c!='': if 'a'<=c.lower()<='z' f[ord(c.lower())-ord('a')]+=1 #tolgo ord('a') così parto da 0 visto che ord('a')= c=fin.read(1) return f

print(fCaratteri('argomenti.txt')

f=fCaratteri('IMalavoglia.txt') for i in range(len(f)): print(chr(ord('a')+i),f[i])

Dizionari <valore

Assomiglia molto ad una lista. La differenza è che io accedo ad un elemento del dizionario non con un indice numerico ma con una chiave.

Dizionario è un insieme di oggetti non ordinati.

d={} #per mettere i dizionari d[5]='casa' d {5: 'casa'} d['mario']= d {5: 'casa', 'mario': 55} d['mario'] 55 d {5: 'casa', 'mario': 55} len(d) 2 for elem in d: #stampa la chiave print(elem)

5 mario

for elem in d: print(elem,d[elem]) 5 casa mario 55 d.keys() dict_keys([5, 'mario']) d.values() dict_values(['casa', 55]) 5 in d True 6 in d False