Funzioni 3 - esercizi con stringhe

Scarica zip esercizi

Naviga file online

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
[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
Mostra soluzione
[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
Mostra soluzione
[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
Mostra soluzione
[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
Mostra soluzione
[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
Mostra soluzione
[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!)

Mostra soluzione
[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!)

Mostra soluzione
[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

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