Visse forhold evaluere annerledes enn forventet i Python

stemmer
-1

Foreløpig lage et stykke som tar verdier en gitt verdi i en matrise og legger 32

Min IDE (PyCharm) anbefalte at jeg fjerner en redundans i min kode ved å gjøre følgende

if ascii_key[i] >= 65 and ascii_key[i] <= 90:
    ascii_key[i] = ascii_key[i] + 32

til

if 65 <= ascii_key[i] <= 90:
    ascii_key[i] = ascii_key[i] + 32

Begge løsningene fungerer for meg, men jeg er nysgjerrig på hvorfor denne ordningen forhold pauser

if ascii_key[i] <= 65 >= 90:
    ascii_key[i] = ascii_key[i] + 32

Jeg ville sette pris på en forklaring i pseudo-kode hvis praktisk, jeg er fortsatt litt nybegynner

Publisert på 13/02/2020 klokken 23:55
kilden bruker
På andre språk...                            


2 svar

stemmer
2

I den tredje kode gitt av deg.

ascii_key[i] <= 65 >= 90dette er alltid vurderes til False.

ascii_key[i] <= 65 >= 90vurderes som ascii_key[i] <= 65 and 65 >= 90. 65>=90er False.

Byte-kode evaluering av a<b<c.

In [17]: dis.dis('a<b<c')
  1           0 LOAD_NAME                0 (a)
              2 LOAD_NAME                1 (b)
              4 DUP_TOP
              6 ROT_THREE
              8 COMPARE_OP               0 (<)
             10 JUMP_IF_FALSE_OR_POP    18
             12 LOAD_NAME                2 (c)
             14 COMPARE_OP               0 (<)
             16 RETURN_VALUE
        >>   18 ROT_TWO
             20 POP_TOP
             22 RETURN_VALUE

Byte-kode evaluering av a<b and b<c.

In [18]: dis.dis('a<b and b<c')
  1           0 LOAD_NAME                0 (a)
              2 LOAD_NAME                1 (b)
              4 COMPARE_OP               0 (<)
              6 JUMP_IF_FALSE_OR_POP    14
              8 LOAD_NAME                1 (b)
             10 LOAD_NAME                2 (c)
             12 COMPARE_OP               0 (<)
        >>   14 RETURN_VALUE

Du kan observere observere a<b<ctilsvarer a<b and b<c.

Svarte 14/02/2020 kl. 00:00
kilden bruker

stemmer
0

det er på grunn av hvordan forholdene er løst. if ascii_key[i] >= 65 and ascii_key[i] <= 90og if 65 <= ascii_key[i] <= 90er likeverdige. Mens if ascii_key[i] <= 65 >= 90blir løst på denne: if ascii_key[i] <= 65 and 65 >= 90 65> = 90 er aldri sant.

Først tilstanden 65 <= ascii_key[i]og deretter den andre tilstanden ascii_key[i] <= 90evalueres og lenket med AND.

Jubel

Svarte 14/02/2020 kl. 00:08
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more