Forum >> Principianti >> Esercizio rompicapo Liste

Pagina: 1

Salve a tutti.



Sono nuovo del forum, pertanto non so se è questo il luogo giusto dove poter postare domande su esercizi vari su python.




Sto seguendo un corso universitario di informatica online, e tra i vari esercizi, ce n'è uno che mi ha completamente bloccato (causa anche la mia scarsa esperienza).




L'esercizio è il seguente:


ESERCIZIO N. 2

# Si scriva una funzione:

# output = estraiDieci(L)

# che data una lista di numeri restituisca una lista nella quale ci siano tutte le coppie di numeri

# la cui somma è 10. I numeri non si ripetono nella lista L

# Esempio

# L1 = [3,5,7,5,2,8,1]

# output = [3,7,5,5,2,8]

#

# Soluzione in 10 righe








Vi prego aiutatemi!

Matteo.
cosa non ti riesce?

che logica abbozzeresti?

THE 🍺-WARE LICENSE (Revision ㊷):
<carlo@🐍.it> wrote this post. As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝
devo trovare un modo per scorrere la lista (quindi ciclo for) e per sommare pian piano tutti i numeri della lista, prima al primo, poi al secondo, poi al terzo ecc..elemento della lista.
Avevo abbozzato una cosa del genere ma non funziona.

def estraiDieci(L):
 	output = []
 	x = 0     #mi serve per tenere "fermo" l'elemento al quale sommo via via gli altri elementi della lista.
 	while x <= len(Lista):    #gli chiedo di iterare il ciclo finche il numero "fermo" al quale sommo tutti gli altri non arriva ad essere l'ultimo della lista
 		for i in Lista:
 			if  i + Lista[x] == 10:
 			output.append(Lista[x])
 			output.append(i)
 			x += 1    #Qui ad esempio mi va in loop, probabilmente perchè il ciclo for finisce prima che x sia arrivata ad essere uguale a len(Lista)...ma non mi vengono in mente soluzioni alternative...
 return  output
[c'è un tasto apposta per il codice nella toolbar -- Nd㎝]


--- Ultima modifica di matteofulciniti in data 2018-08-30 17:30:59 ---

--- Ultima modifica di ㎝ in data 2018-08-30 17:47:04 ---
dove la x è in rosso, è perchè ci sono le parentesi quadre...non so perchè non le visualizza.
ah ovviamente ho indentato tutto correttamente, non come visualizzare qui.





--- Ultima modifica di matteofulciniti in data 2018-08-30 17:32:26 ---
questo è un altro codice che forse mi avvicina un po' di piu al risultato...ma ripete troppe volte i numeri nella lista...




def EstraiDieci(L):

output = []

for fisso in L:

for i in L:

if fisso + i == 10:

output.append(fisso)

output.append(i)

return output



Ho trovato! mi serve un modo per far si che quando "fisso" è uguale, o meglio, nella stessa posizione di "i", si ignorino, ossia il ciclo for deve andare avanti senza considerare questa situazione....come faccio?
io invece farei una copia della lista in ingresso, estrarrei il primo elemento e cercherei nel resto se c'è il complemento a 10; se c'è, lo elimini e aggiungi i due alla lista di output. E così via finché la lista non è vuota.
THE 🍺-WARE LICENSE (Revision ㊷):
<carlo@🐍.it> wrote this post. As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝
io invece farei una copia della lista in ingresso, estrarrei il primo elemento e cercherei nel resto se c'è il complemento a 10; se c'è, lo elimini e aggiungi i due alla lista di output. E così via finché la lista non è vuota.

Prima di leggere la tua risposta avevo fatto una cosa simile, ossia ho "svuotato" tramite la funzione remove. Ma l'ho fatto direttamente sulla lista principale, senza creare una copia.





def EstraiDieci(L):

output = []

for fisso in L:

print("fisso=",fisso)

for i in L:

print("i=",i)

if fisso + i == 10:



output.append(fisso)

output.append(i)

L.remove(i)

L.remove(fisso)

return output






il risultato è che, ipotizzando la lista [3,5,7,5,2,8,11], mi da [3,7,5,5]...non capisco dove siano finiti 2 e 8!



TROVATOOOOO!!!




def EstraiDieci(L):

output = []

for fisso in L:



for i in L:



if fisso + i == 10:



output.append(fisso)

output.append(i)

L.remove(i)



return output





dopo un giorno di combattimenti...

Ti ringrazio comunque per l'aiuto e per i suggerimenti!


Pagina: 1



Esegui il login per scrivere una risposta.