Pewne warunki oceniają inaczej niż oczekiwano Pythona

głosy
-1

Obecnie jest tworzona kawałek, który przyjmuje wartości danej wartości w tablicy i dodaje 32

Mój IDE (pycharm) zaleca się, aby usunąć nadmiarowość w moim kod w następujący sposób

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

do

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

Oba rozwiązania dla mnie pracować, ale jestem ciekaw, dlaczego ten układ warunków przerw

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

Byłbym wdzięczny wyjaśnienie w pseudo-kodzie, jeśli wygodne, nadal jestem trochę początkujący

Utwórz 13/02/2020 o 21:55
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
2

W trzecim kodu podanego przez Ciebie.

ascii_key[i] <= 65 >= 90to zawsze jest oceniana na False.

ascii_key[i] <= 65 >= 90jest oceniany jako ascii_key[i] <= 65 and 65 >= 90. 65>=90jest False.

Ocena bajt-kod 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

Ocena bajt-kod 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

Można obserwować obserwować a<b<codpowiada a<b and b<c.

Odpowiedział 13/02/2020 o 22:00
źródło użytkownik

głosy
0

to ze względu na to, jak warunki są rozwiązane. if ascii_key[i] >= 65 and ascii_key[i] <= 90i if 65 <= ascii_key[i] <= 90są równoważne. Podczas gdy if ascii_key[i] <= 65 >= 90pobiera rozwiązane do tego: if ascii_key[i] <= 65 and 65 >= 90 65> = 90 nie jest prawdą.

Pierwszy warunek 65 <= ascii_key[i], a następnie drugi warunek ascii_key[i] <= 90są oceniane i przykuty z AND.

Twoje zdrowie

Odpowiedział 13/02/2020 o 22:08
źródło użytkownik

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