RISOLTO Sorting

Pubblicità

Filippo Fabbri

Nuovo Utente
Messaggi
47
Reazioni
8
Punteggio
26
Ragazzi ho un problema enorme, devo implementare due funzioni.
La prima deve, dato un numero intero in base 10 , restituire una lista i cui elementi sono le cifre del numero rappresentate come interi
Esempio f(2043) -> [2,0,4,2]

La seconda inserire un oggetto persona in ordine alfabetico prima per cognome poi per nome.

ho fatto errori ma non so dove, la prima funzione restituisce una lista vuota, la seconda da errore.

Codice:
#esercizio C

def lista_cifre(numero):
    lista_interi=[]
    numero=str(numero)
    for i in numero:
        lista_interi.append(int(i))
    return lista_interi
  
#esercizio D e E

class persona:
    def __init__(self,nome,cognome):
        self.nome=str(nome)
        self.cognome=str(cognome)
    def __str__(self):
        return 'Persona:'+self.nome +self.cognome
      
def inserisci(persona,lista_persone):
    lista_persone.append(persona)
    l=[]
    for i in range(len(lista_persone)):
        while not lista_persone[i].cognome <= persona.cognome:
            if lista_persone[i].cognome == persona.cognome:
                if lista_persone[i].cognome < persona.cognome:
                    return lista_persone.insert(i+1,persona)
            elif lista_persone[i].cognome > persona.cognome:
                return lista_persone.insert(i,persona)
            else:
                return lista_persone.insert(i,persona)
            i += 1
    l.append(persona)
  
def main():
    print('Esercizio C\n')
    lista_interi=[]
    j=input('Vuoi inserire un intero nella lista?\nDigita si oppure no: ')
  
    if j=='si':                                                                 #allora inserisco l'intero nella lista                                                             
        n=input('Scrivi il numero intero desiderato: ')                         #chiedo il numero
                                               
        lista_cifre(n)                                                         
                                                                  
        print('La lista contiene questi interi:\n')
        print(lista_interi)
      
    else:                                                                       #non inserisco nessuno
        print('La lista è vuota')
  
    time.sleep(3)                                                               #faccio scorrere qualche secondo per rendere a mio avviso più soddisfacente l'esecuzione
  
    print('Esercizio E\n')
    lista_persone=[]
    h=input('Vuoi inserire delle persone nella lista?\nDigita si oppure no: ')
    q=int(input('Quante?: '))
  
    if h=='si':                                                                 #allora inserisco persone nella lista
        i=1                                                                     #inizializzo un conteggio
        while q>0:                                                              #ciclo dell' aggiunta di q persone
            n=input('Scrivi il nome della persona numero '+str(i)+': ')         #chiedo il nome della persona i
            c=input('Scrivi il cognome della persona numero ' +str(i)+': ')     #chiedo cognome della persona i
            p=persona(n,c)                                                      #trasformo la persona come oggetto
            inserisci(p,lista_persone)                                          #inserisco l'oggetto in una lista
            i = i+1                                                             #aggiorno il conto della persona da inserire
            q = q-1                                                             #diminuisco il conto delle persone rimaste da inserire
        print('La lista contiene queste persone:\n')
        print(lista_persone)
    else:                                                                       #non inserisco nessuno
        print('La lista di persone è vuota')

  
main()

Qualcuno mi può aiutare?
 
Ultima modifica:
nell'esercizio sulla lista non c'è bisogno di convertire in int il numero passato (il parametro non ha tipo, viene preso per stringa, come tutto in Python)
Python:
def lista_cifre(numero):
    lista=[]
    for i in numero:
        print(i)
        lista.append(i)
    return lista
Nella funzione main non hai assegnato il valore di ritorno di lista_cifre
Python:
def main():
    n=input('Scrivi il numero intero desiderato: ')
    lista_interi=lista_cifre(n)
    print('La lista contiene questi interi:\n')
    print(lista_interi)
Semmai ci sarebbe da discutere sull'input:
in Python quando tu inserisci un input, esso viene sempre interpretato come stringa;
se il numero deve essere intero dovresti prima definire una funzione che controlla che l'input inserito sia veramente un int. Il codice precedente, più che suddividere in cifre, divide la stringa in caratteri, infatti funziona su stringhe generiche anche non composte da numeri (e questo non va bene)
 
ho risolto il problema ma mi rimane un dilemma, in questo code faccio un sorting per cognome di un oggetto persona(nome, cognome) da inserire in una lista, come faccio a fare in modo che se ci sono cognomi identici me li sorti in base al nome per primo in ordine alfabetico?

Codice:
def inserisci(persona,lista_persone):
    lista_persone.append(persona)
    l=[]
    for i in range(len(lista_persone)):
        while not lista_persone[i].cognome <= persona.cognome:
            if lista_persone[i].cognome == persona.cognome:
                if lista_persone[i].cognome < persona.cognome:
                    return lista_persone.insert(i+1,persona)
            elif lista_persone[i].cognome > persona.cognome:
                return lista_persone.insert(i,persona)
            else:
                return lista_persone.insert(i,persona)
            i += 1
    l.append(persona)
 
@Filippo Fabbri se hai risolto basta scrivere un commento ma non esiste che elimini tutti i commenti, altrimenti non può essere di aiuto per chi dovesse averne bisogno in futuro.
 
come faccio a fare in modo che se ci sono cognomi identici me li sorti in base al nome per primo in ordine alfabetico?
"me li sorti" non è lingua italiana, non farlo ad un esame perché ti bocciano, si dice "ordinare"!

Tornando a noi potresti, molto banalmente, concatenare cognome-nome e conforntarli come se fossero un'unica stringa;
in alternativa ti scrivi una funzione di confronto a parte che tiene conto del fatto che 2 cognomi possano essere uguali;
se non erro si possono definire criteri di confronto più complicati per gli oggetti
 
Pubblicità
Pubblicità
Indietro
Top