or
. Sonuç True
olduğunu ve eğer sol argümanı dönerse bu değerlendirir çünkü x % (1 or 2 or 3)
yapamaz, böylece aksi takdirde doğru bir argüman döner sol argüman üzerinde bool
çağırır ve görmek sadece x % 1
1 or 2 or 3 == 1
tarihi:
>>> True or False
True
>>> False or True
True
>>> False or False
False
>>> 1 or False # all numbers != 0 are "true"
1
>>> bool(1)
True
>>> 1 or 2 or 3 #(1 or 2) or 3 == 1 or 3 == 1
1
Birden çok koşulunuz olduğunda, bunları any
veya all
kullanarak azaltmaya çalışabilirsiniz.
Biz all([a,b,c,d])
hep True
veya False
dönmek olduğunu hariç a and b and c and d
eşdeğerdir iken any([a,b,c,d])
a or b or c or d
denk olduğunu var. Örneğin bu şekilde
:
if any(x%i == 0 for i in (2,3,5,7)):
equivalently (0
beri sadece yanlış numara == 0
not
eşdeğerdir ise): Eşit
if any(not x%i for i in (2,3,5,7)):
:
if not all(x%i for i in (2,3,5,7))
bulundurun aklınızda (de Morgan yasası:)): bir jeneratör ifade kullanarak böylece tüm koşullar değerlendirilir değildir any
ve all
kısa devre yapar
any(not p for p in some_list) == not all(p for p in some_list)
not edin.any
çağırmadan önce
>>> any([1/x for x in (1,0)])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <listcomp>
ZeroDivisionError: division by zero
>>> 1/0 or 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
1/0
değerlendirilir Son örnekte:
>>> any(1/x for x in (1,0))
True
>>> 1 or 1/0
1
Ve: arasındaki farkı görün.
'Eğer varsa ([2, 3, 5, 7] 'de x% i için i):' - Şimdi kim dupe hedefi bulmama yardım edebilir ? –
@KevinGuan Aslında: Eğer varsa (2,3,5,7) için x% i değil, ya da değilse (2,3,5,7) için x% i) . – Bakuriu
@Bakuriu: Ah, doğru. Veya sadece eğer varsa ([2, 3, 5, 7] için x% i == 0): 'OP'nin kodu gibi. –