Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Verificare se due elementi siano esattamente identici

S
SamueleQ (2640 points)
1 2 4
in HW2 obbligatorio by (2.6k points)
Stavo svolgendo l'Homework e sono incappato in un problema: siccome due lettere possono essere identiche sia per un giocatore sia per un altro, come posso verificare che l'elemento di cui si sta parlando sia esattamente l'identico?

Faccio un esempio: g1['a','b',c'] g2['a','b','c']

lettera = g1[2]

lettera == g1[2] ma anche a g2[2]

è possibile identificare lettera in modo che sia solo uguale a g1[2] e non anche a g2[2]?
343 views
closed

2 Answers

Best answer
giordano_sannino (13650 points)
7 16 81
by (13.7k points)
selected by

Con il doppio "=" confronti quello che c'è dentro e quindi verrà fuori TRUE.(confronto due oggetti diversi se hanno le stesse info)

Si potrebbe usare il comande IS che abbiamo visto alla prima o seconda lezione.(confronta se sono lo stesso oggetto, confronta le locazioni di memoria)

Però proprio come abbiamo visto, phyton per alcune operazioni per risparmiare usa la stessa locazione di memoria,quindi specialmente quando si va nel tuo caso lettera=x il comando is darà TRUE.

"a is b" equivale a fare "id(a)=id(b)"

a=20**20 #numero grande

b=20**20

c=a

a is b
False

a is c
True

Con numeri piu piccoli pero succede anche ciò:

 a=10

b=10

c=a

a is c
True

c is b
True

In conclusione visto che phyton ha questa gestione ""dinamica"" degli id non so se qualcuno ha un altro metodo. In attesa, in base all'utilizzo che ne fai, IS puo' aiutarti come non puo'.

S
SamueleQ (2640 points)
1 2 4
by (2.6k points)
Grazie mille per la risposta, ricordavo qualcosa di simile ma non ricordavo l'istruzione esatta.

Intanto allora mi arrangio cercando altre strade.
giordano_sannino (13650 points)
7 16 81
by (13.7k points)
Di niente! Buona fortuna, se mi viene in mente/trovo qualcosa ti scrivo
S
Samuel_Greco (230 points)
0 0 2
by (230 points)
Non ho ben chiara la domanda ad essere onesto, vuoi verificare se un elemento è esattamente identico ad un altro (quindi come valore e come tipo, anche se sono due elementi diversi), verificare se l'elemento che stai controllando è esattamente quello che tu intendi controllare (quindi da un punto di vista di memoria, stiamo parlando dello stesso elemento), oppure molto più semplicemente vuoi verificare se (x) è uguale sia a (y) che a (z) ?
S
SamueleQ (2640 points)
1 2 4
by (2.6k points)
Dal punto di vista della memoria.

Attualmente ho il problema che confrontando sia lettera == g1[2] sia lettera == g2[2] mi vengono incrementati entrambi i contatori delle rispettive if.

Volevo sapere se era possibile evitarlo usando un'altra istruzione oppure devo cambiare strada.