Stringhe 4 - altri esercizi

Esercizi con le funzioni

ATTENZIONE: Gli esercizi seguenti richiedono di conoscere:

Se sei alle prime armi con la programmazione, ti conviene saltarli e ripassare in seguito

Che fare

  • scompatta lo zip in una cartella, dovresti ottenere qualcosa del genere:

strings
    strings1.ipynb
    strings1-sol.ipynb
    strings2.ipynb
    strings2-sol.ipynb
    strings3.ipynb
    strings3-sol.ipynb
    jupman.py

ATTENZIONE: Per essere visualizzato correttamente, il file del notebook DEVE essere nella cartella szippata.

  • apri il Jupyter Notebook da quella cartella. Due cose dovrebbero aprirsi, prima una console e poi un browser. Il browser dovrebbe mostrare una lista di file: naviga la lista e apri il notebook strings1.ipynb

  • Prosegui leggendo il file degli esercizi, ogni tanto al suo interno troverai delle scritte ESERCIZIO, che ti chiederanno di scrivere dei comandi Python nelle celle successive. Gli esercizi sono graduati per difficoltà, da una stellina ✪ a quattro ✪✪✪✪

Scorciatoie da tastiera:

  • Per eseguire il codice Python dentro una cella di Jupyter, premi Control+Invio

  • Per eseguire il codice Python dentro una cella di Jupyter E selezionare la cella seguente, premi Shift+Invio

  • Per eseguire il codice Python dentro una cella di Jupyter E creare una nuova cella subito dopo, premi Alt+Invio

  • Se per caso il Notebook sembra inchiodato, prova a selezionare Kernel -> Restart

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
Mostra soluzione
[2]:
# 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
Mostra soluzione
[9]:
# 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
Mostra soluzione
[4]:
# 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
Mostra soluzione
[5]:
# 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
Mostra soluzione
[6]:
# 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
Mostra soluzione
[7]:
# scrivi qui


Esercizi con eccezioni e test

ATTENZIONE: Gli esercizi seguenti richiedono di conoscere:

**Se sei alle prime armi con la programmazione, ti conviene saltarli e ripassare in seguito**

halet

✪ RITORNA True se parola contiene lettera, False altrimenti

  • usare ciclo while

Mostra soluzione
[8]:
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!

  • Usare ciclo for in

Mostra soluzione
[9]:

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

Mostra soluzione
[10]:

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
Mostra soluzione
[11]:


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 !
Mostra soluzione
[12]:

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
Mostra soluzione
[13]:

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
[ ]: