Bestimmte Bedingungen unterschiedlich ausgewertet werden dann in Python erwartet

stimmen
-1

Zur Zeit der Erstellung, ein Stück, das Werte einen bestimmten Wert in einem Array nimmt und 32 fügt

Meine IDE (PyCharm) empfohlen, dass ich eine Redundanz in meinem Code entfernen, indem Sie folgendermaßen vorgehen

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

zu

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

Beide Lösungen arbeiten für mich, aber ich bin neugierig, warum diese Anordnung von Bedingungen Pausen

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

Ich würde eine Erklärung in Pseudo-Code schätzen, wenn bequem, ich habe noch ein bisschen Anfänger bin

Veröffentlicht am 13/02/2020 um 21:55
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
2

Im dritten Code, der von Ihnen zur Verfügung gestellt.

ascii_key[i] <= 65 >= 90dies wird immer ausgewertet False.

ascii_key[i] <= 65 >= 90wird bewertet , wie ascii_key[i] <= 65 and 65 >= 90. 65>=90ist False.

Byte-Code - Auswertung von 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-Code - Auswertung von 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

Beobachten können Sie beobachten , a<b<centspricht a<b and b<c.

Beantwortet am 13/02/2020 um 22:00
quelle vom benutzer

stimmen
0

es ist darauf zurückzuführen, wie die Bedingungen gelöst werden. if ascii_key[i] >= 65 and ascii_key[i] <= 90und if 65 <= ascii_key[i] <= 90sind äquivalent. Während if ascii_key[i] <= 65 >= 90auf dieses Problem gelöst wird: if ascii_key[i] <= 65 and 65 >= 90 65> = 90 ist nie wahr.

Zuerst wird der Zustand 65 <= ascii_key[i]und dann die andere Bedingung ascii_key[i] <= 90ausgewertet und gekettet mit einem UND.

Prost

Beantwortet am 13/02/2020 um 22:08
quelle vom benutzer

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