Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Python - Aiuto, non capisco il problema
Forum - Python - Aiuto, non capisco il problema

Avatar
Peke (Normal User)
Newbie


Messaggi: 2
Iscritto: 12/08/2021

Segnala al moderatore
Postato alle 11:23
Giovedì, 12/08/2021
Ciao a tutti, ho un problema con una parte del mio programma questo è il codice:

import random as rd

wa=[[],[],[]]
wb=[[],[]]
ba=[]
bb=[]
for i in range(4):
   for y in range(3):
      wa[y].append(rd.random())

  
dz_dwa=wa
dz_dwb=wb
dz_dwb=wb
dz_dba=ba
dz_dbb=bb
print(wa)
for i in range(len(wa)):
  for y in range(len(wa)):
     dz_dwa[y]=5
    
    
print(wa)

Nel primo print(wa) i numeri sono randomici mentre nel secondo print(wa) i numeri diventano tutti 5, tuttavia dentro il for non c'è niente che modifichi wa inserendoci dentro 5

Grazie mille

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 972
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 13:13
Giovedì, 12/08/2021
Sono alle prime armi con Python ma provo a rispondere lo stesso.
guarda la riga: dz_dwa=wa
credo che questa assegnazione venga presa per riferimento, qualsiasi valore andrai a modificare in dz_dwa, si riperquoterà su wa, perché entrambi i vettori sono identici anche a livello di allocazione.

Per evitare il problema devi dichiarare il vettore dz_dwa e poi ricopiare wa in dz_dwa in modo da renderli indipendenti.

Codice sorgente - presumibilmente Python

  1. import random as rd
  2.  
  3. wa=[[],[],[]]
  4. dz_dwa=[[],[],[]]
  5. wb=[[],[]]
  6. ba=[]
  7. bb=[]
  8. for i in range(4):
  9.    for y in range(3):
  10.       wa[y].append(rd.random())
  11.  
  12. for i in range(len(wa)):
  13.    dz_dwa[i] = wa[i]
  14.    
  15. dz_dwb=wb
  16. dz_dwb=wb
  17. dz_dba=ba
  18. dz_dbb=bb
  19. print("wa originale")
  20. print(wa)
  21. print("dz_dwa copiato da wa")
  22. print(dz_dwa)
  23.  
  24. for i in range(len(wa)): # i 5 li scrivi per tre volte
  25.   for y in range(len(wa)):
  26.      dz_dwa[y]=5
  27.    
  28. print("dz_dwa sovrascritto con i 5")
  29. print(dz_dwa)
  30. print("wa originale")
  31. print(wa)


Potrebbero anche esserci istruzioni dedicate come clone o similia...
Non sono in grado di valutare la correttezza logica del tuo codice, che mi sembra strana perché con l'ultimo doppio for sovrascrivi più volte i tre valori inutilmente.

Ultima modifica effettuata da Carlo il 15/08/2021 alle 22:16


in programmazione tutto è permesso
PM Quote
Avatar
Peke (Normal User)
Newbie


Messaggi: 2
Iscritto: 12/08/2021

Segnala al moderatore
Postato alle 17:02
Giovedì, 12/08/2021
Hey Carlo, grazie mille, ho preso spunto da ciò che mi hai consigliato e sono riuscito a risolvere il probelma

PM Quote