Verificare se due elementi siano esattamente identici

S
SamueleQ (2640 points)
1 2 4
asked Oct 22, 2020 in HW2 obbligatorio by SamueleQ (2,640 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]?
174 views

2 Answers

Best answer
giordano_sannino (13650 points)
7 16 81
answered Oct 22, 2020 by giordano_sannino (13,650 points)
selected Oct 23, 2020 by SamueleQ

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
commented Oct 22, 2020 by SamueleQ (2,640 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
commented Oct 22, 2020 by giordano_sannino (13,650 points)
Di niente! Buona fortuna, se mi viene in mente/trovo qualcosa ti scrivo
S
Samuel_Greco (230 points)
0 0 2
answered Oct 22, 2020 by Samuel_Greco (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
commented Oct 22, 2020 by SamueleQ (2,640 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.