Определенные условия оценивать иначе, чем ожидалось, в Python

голоса
-1

В настоящее время создание кусок, который принимает значения заданного значения в массиве и добавляет 32

Мой IDE (PyCharm) рекомендовал мне удалить избыточность в моем коде, выполнив следующие действия

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

в

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

Оба решения работают для меня, но мне интересно, почему этого создания условий перерывов

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

Я оценил бы объяснение в псевдо-коде, если удобно, я еще немного новичок

Задан 13/02/2020 в 23:55
источник пользователем
На других языках...                            


2 ответов

голоса
2

В третьем код, предоставленный Вами.

ascii_key[i] <= 65 >= 90это всегда оценивается с False.

ascii_key[i] <= 65 >= 90оценивается как ascii_key[i] <= 65 and 65 >= 90. 65>=90есть False.

Оценка Байт-код 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

Оценка Байт-код 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

Вы можете наблюдать наблюдать a<b<cэквивалентно a<b and b<c.

Ответил 14/02/2020 в 00:00
источник пользователем

голоса
0

это связано с тем, как решаются условия. if ascii_key[i] >= 65 and ascii_key[i] <= 90и if 65 <= ascii_key[i] <= 90эквивалентны. В то время как if ascii_key[i] <= 65 >= 90получает решен так: if ascii_key[i] <= 65 and 65 >= 90 65> = 90 никогда не верно.

Сначала состояние , 65 <= ascii_key[i]а затем другое условие ascii_key[i] <= 90оцениваются и прикованы с AND.

ура

Ответил 14/02/2020 в 00:08
источник пользователем

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