Za určitých okolností je hodnotit jinak, než se očekávalo v Python

hlasů
-1

V současné době vytváří kus, který nabývá hodnot danou hodnotu v poli a přidává 32

My IDE (PyCharm) doporučil, abych odstranit redundanci v mém kódu pomocí následujícího postupu

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

na

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

Obě řešení pracují pro mě, ale já jsem zvědavý, proč toto uspořádání podmínky přestávek

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

Ocenila bych toto vysvětlení pseudokódem pokud je to vhodné, jsem ještě trochu nováček

Položena 13/02/2020 v 23:55
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
2

Ve třetím kódu, které jste poskytli.

ascii_key[i] <= 65 >= 90to je vždy vyhodnocen False.

ascii_key[i] <= 65 >= 90je hodnocena jako ascii_key[i] <= 65 and 65 >= 90. 65>=90je False.

Vyhodnocení byte-kód 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

Vyhodnocení byte-kód 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

Můžete pozorovat pozorovat a<b<cje ekvivalentní a<b and b<c.

Odpovězeno 14/02/2020 v 00:00
zdroj uživatelem

hlasů
0

je to způsobeno tím, jak jsou řešeny podmínky. if ascii_key[i] >= 65 and ascii_key[i] <= 90a if 65 <= ascii_key[i] <= 90jsou ekvivalentní. Zatímco if ascii_key[i] <= 65 >= 90dostane se rozhodl takto: if ascii_key[i] <= 65 and 65 >= 90 65> = 90 Nikdy není pravda.

První podmínka 65 <= ascii_key[i]a pak na druhou podmínkou ascii_key[i] <= 90jsou vyhodnocovány a připoutaný se AND.

Na zdraví

Odpovězeno 14/02/2020 v 00:08
zdroj uživatelem

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