Funzioni 3 - esercizi con stringhe
Scarica zip esercizi
lung
✪ a. Scrivi una funzione lung1(stringa)
in cui data una stringa, RITORNI quanto è lunga la stringa. Usa len
Per esempio, con la stringa "ciao"
, la vostra funzione dovrebbe ritornare 4
mentre con "hi"
dovrebbe ritornare 2
>>> x = lung1("ciao")
>>> x
4
✪ b. Scrivi una funzione lung2
che come prima calcola la lunghezza della stringa, ma SENZA usare len
(usa un ciclo for
)
>>> y = lung2("mondo")
>>> y
5
[1]:
# scrivi qui
contin
✪ Scrivi la funzione contin(parola, stringa)
, che RITORNA True
se parola
contiene la stringa
indicata, altrimenti RITORNA False
Usa l’operatore
in
>>> x = contin('carpenteria', 'ent')
>>> x
True
>>> y = contin('carpenteria', 'zent')
>>> y
False
[13]:
# scrivi qui
invertilet
✪ Scrivi la funzione invertilet(primo, secondo)
che prende in input due stringhe di lunghezza maggiore di 3, e RESTITUISCE una nuova stringa in cui le parole sono concatenate e separate da uno spazio, le ultime lettere delle due parole sono invertite. Questo significa che passando in input ‘ciao’ e ‘world’, la funzione dovrebbe restituire ‘ciad worlo’
Se le stringhe non sono di lunghezza adeguata, il programma STAMPA errore!
SUGGERIMENTO: usa le slice
>>> x = invertilet('hi','mondo')
'errore!'
>>> x
None
>>> x = invertilet('cirippo', 'bla')
'errore!'
>>> x
None
[2]:
# scrivi qui
nspazio
✪ Scrivi la funzione nspazio
che data una stringa in input, RITORNA una nuova stringa in cui l’n-esimo carattere è uno spazio. Per esempio, data la stringa ‘largamente’ e il carattere all’indice 5, il programma deve RITORNARE 'larga ente'
. Nota: se il numero dovesse essere troppo grande (i.e., la parola ha 6 caratteri e chiedo di rimuovere il numero 9), il programma STAMPA errore!
>>> x = nspazio('largamente', 5)
>>> x
'larga ente'
>>> x = nspazio('ciao', 9)
errore!
>>> x
None
>>> x = nspazio('ciao', 4)
errore!
>>> x
None
[3]:
# scrivi qui
inifin
✪ Scrivi un programma in Python prende una stringa, e se la stringa ha una lunghezza maggiore di 4, il programma STAMPA le prime e le ultime due lettere. Altrimenti, nel caso in cui la lunghezza della stringa sia minore di 4, STAMPA voglio almeno 4 caratteri
. Per esempio, passando alla funzione "ciaomondo"
, la funzione dovrebbe stampare "cido"
. Passando "ciao"
dovrebbe stampare ciao
e passando "hi"
dovrebbe stampare voglio almeno 4 caratteri
>>> inifin('ciaomondo')
cido
>>> inifin('hi')
Voglio almeno 4 caratteri
[4]:
# scrivi qui
scambia
Scrivere una funzione che data una stringa, inverte il primo e l’ultimo carattere, e STAMPA il risultato.
Quindi, data la stringa “mondo”, il programma stamperà “oondm”
>>> scambia('mondo')
oondm
[5]:
# scrivi qui
Funzioni con assert
ATTENZIONE
Gli esercizi che segueno contengono dei test con gli assert. Per capire come svolgerli, leggi prima Gestione errori e testing
halet
✪ RITORNA True
se parola contiene lettera, False
altrimenti
USA un ciclo
while
NON USARE l’operatore
in
(troppo facile!)
[6]:
def halet(parola, lettera):
raise Exception('TODO IMPLEMENT ME !')
# INIZIO TEST - NON TOCCARE !
# se hai scritto tutto il codice giusto, ed esegui la cella, python non dovrebbe lanciare AssertionError
assert halet("ciao", 'a')
assert not halet("ciao", 'A')
assert halet("ciao", 'c')
assert not halet("", 'a')
assert not halet("ciao", 'z')
# FINE TEST
conta
✪ RITORNA il numero di occorrenze di lettera in parola
NOTA: NON VOGLIO UNA STAMPA, VOGLIO CHE RITORNI IL VALORE!
USA ciclo for in
NON usare il metodo
count
(troppo semplice!)
[7]:
def conta(parola, lettera):
raise Exception('TODO IMPLEMENT ME !')
# INIZIO TEST - NON TOCCARE !
# se hai scritto tutto il codice giusto, ed esegui la cella, python non dovrebbe lanciare AssertionError
assert conta("ciao", "z") == 0
assert conta("ciao", "c") == 1
assert conta("babbo", "b") == 3
assert conta("", "b") == 0
assert conta("ciao", "C") == 0
# FINE TEST
contiene_minuscola
✪ Esercizio ripreso dall’ Esercizio 4 del libro Pensare in Python Capitolo Stringhe leggere in fondo qua: https://davidleoni.github.io/ThinkPythonItalian/html/thinkpython2009.html
RITORNA True se la parola contiene almeno una lettera minuscola
RITORNA False altrimenti
Usare ciclo
while
[8]:
def contiene_minuscola(s):
raise Exception('TODO IMPLEMENT ME !')
# INIZIO TEST - NON TOCCARE !
# se hai scritto tutto il codice giusto, ed esegui la cella, python non dovrebbe lanciare AssertionError
assert contiene_minuscola("David")
assert contiene_minuscola("daviD")
assert not contiene_minuscola("DAVID")
assert not contiene_minuscola("")
assert contiene_minuscola("a")
assert not contiene_minuscola("A")
dialetto
✪✪ Esiste un dialetto in cui tutte le “a” devono per forza essere precedute da una “g”. Nel caso una parola dovesse contenere “a” non preceduta da una “g”, possiamo dire con certezza che questa parola non fa parte di quel dialetto. Scrivere una funzione che data una parola, RITORNI True
se la parola rispetta le regole del dialetto, False
altrimenti.
>>> dialetto("ammot")
False
>>> print(dialetto("paganog")
False
>>> print(dialetto("pgaganog")
True
>>> print(dialetto("ciao")
False
>>> dialetto("cigao")
True
>>> dialetto("zogava")
False
>>> dialetto("zogavga")
True
[9]:
def dialetto(parola):
raise Exception('TODO IMPLEMENT ME !')
# INIZIO TEST - NON TOCCARE !
# se hai scritto tutto il codice giusto, ed esegui la cella, python non dovrebbe lanciare AssertionError
assert dialetto("a") == False
assert dialetto("ab") == False
assert dialetto("ag") == False
assert dialetto("ag") == False
assert dialetto("ga") == True
assert dialetto("gga") == True
assert dialetto("gag") == True
assert dialetto("gaa") == False
assert dialetto("gaga") == True
assert dialetto("gabga") == True
assert dialetto("gabgac") == True
assert dialetto("gabbgac") == True
assert dialetto("gabbgagag") == True
# FINE TEST
contavoc
✪✪ Data una stringa, scrivere una funzione che conti il numero di vocali. Se il numero di vocali è pari RITORNA il numero di vocali, altrimenti solleva l’eccezione ValueError
>>> conta_vocali("asso")
2
>>> conta_vocali("ciao")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-15-058310342431> in <module>()
16 contavoc("arco")
---> 19 contavoc("ciao")
ValueError: Vocali dispari !
[10]:
def contavoc(parola):
raise Exception('TODO IMPLEMENT ME !')
# INIZIO TEST - NON TOCCARE !
# se hai scritto tutto il codice giusto, ed esegui la cella, python non dovrebbe lanciare AssertionError
assert contavoc("arco") == 2
assert contavoc("scaturire") == 4
try:
contavoc("ciao") # con questa stringa ci attendiamo che sollevi l'eccezione ValueError
raise Exception("Non dovrei arrivare fin qui !")
except ValueError: # se solleva l'eccezione ValueError,si sta comportando come previsto e non facciamo niente
pass
try:
contavoc("aiuola") # con questa stringa ci attendiamo che sollevi l'eccezione ValueError
raise Exception("Non dovrei arrivare fin qui !")
except ValueError: # se solleva l'eccezione ValueError,si sta comportando come previsto e non facciamo niente
pass
palindroma
✪✪✪ Una parola è palindroma quando è esattamente la stessa se letta al contrario
Scrivi una funzione che RITORNA True
se una parola è palindroma, False
altrimenti
assumi che la stringa vuota sia palindroma
Esempio:
>>> x = palindroma('radar')
>>> x
True
>>> x = palindroma('scatola')
>>> x
False
[1]:
def palindroma(parola):
raise Exception('TODO IMPLEMENT ME !')
# INIZIO TEST - NON TOCCARE !
# se hai scritto tutto il codice giusto, ed esegui la cella, python non dovrebbe lanciare AssertionError
assert palindroma('') == True # assumiamo che la stringa vuota sia palindroma
assert palindroma('a') == True
assert palindroma('aa') == True
assert palindroma('ab') == False
assert palindroma('aba') == True
assert palindroma('bab') == True
assert palindroma('bba') == False
assert palindroma('abb') == False
assert palindroma('abba') == True
assert palindroma('baab') == True
assert palindroma('abbb') == False
assert palindroma('bbba') == False
assert palindroma('radar') == True
assert palindroma('scatola') == False
# FINE TEST
Prosegui
Continua con esercizi su funzioni e liste