2010-11-11 15 views
27

Programımın bir parçasında, karşılaştırmayı doğru kullanırsam şüphe ederim. Bir şey yapmadan önce (u0 < = u < u0 + adım) emin olmak istiyorum.Python'da karşılaştırma ve 'değilse' nasıl kullanılır?

if not (u0 <= u) and (u < u0+step): 
    u0 = u0+ step # change the condition until it is satisfied 
else: 
    do something. # condition is satisfied 
+12

Python sihiri: u0 <= u <(u0 + adım) –

cevap

42

Sen yapabilirsiniz:

if not (u0 <= u <= u0+step): 
    u0 = u0+ step # change the condition until it is satisfied 
else: 
    do sth. # condition is satisfied 

bir döngü kullanarak:

while not (u0 <= u <= u0+step): 
    u0 = u0+ step # change the condition until it is satisfied 
do sth. # condition is satisfied 
8

Operator precedence in python
Sen not Xand daha yüksek önceliğe sahip olduğunu görebiliriz. Yani not sadece (u0 <= u) ilk parçasına uygulanır. Yaz:

if not (u0 <= u and u < u0+step): 

hatta

if not (u0 <= u < u0+step): 
0

iki yolu vardır. Şüphe durumunda, her zaman sadece deneyebilirsiniz. Bu işe yaramazsa, bunun gibi, emin olmak için ekstra parantez ekleyebilirsiniz:

if not ((u0 <= u) and (u < u0+step)): 
2

Neden sence? not sizi şaşırtıyorsa, olumsuzlamadan kaçınmak için if ve başka cümleleri çevirin.

i (u0 < = u < u0 + adım) önce şey yapması emin olmak istiyorum. Bunu yazınız.

Sadece bunu yazınız.

if u0 <= u < u0+step: 
    "do sth" # What language is "sth"? No vowels. An odd-looking word. 
else: 
    u0 = u0+ step 

Neden aşırı?

Boş bir if - gerekiyorsa ve mantığı çözemezseniz - pass kullanın.

if some-condition-that's-too-complex-for-me-to-invert: 
    pass 
else: 
    do real work here 
+0

Teşekkürler :) ... bu arada sth bir şeydir! ama haklısınız – masti

+0

"sth", "bir şey mi?" Hangi dilde? –

+2

Sanırım bazı sözlüklerde bu kısaltmayı gördüm. Her neyse, ben ana dili İngilizce konuşanı değilim, İngilizce hatalarımdan özür dilerim! – masti

3

Bu özel durumda en net çözüm S.Lott answer

olduğunu Ama bazı karmaşık mantıksal koşullarda ben berrak bir çözelti elde etmek için kullanacağım bazı boolean cebir tercih ediyorum. Bu durumda «berrak» çözümünü De Morgan yasası ¬ (A^B) = ¬Av¬B sonra

not (u0 <= u and u < u0+step) 
(not u0 <= u) or (not u < u0+step) 
u0 > u or u >= u0+step 

if u0 > u or u >= u0+step: 
    pass 

... kullanma

daha belli değil: P

+0

Genel olarak ilginç bir tavsiye, ama dediğiniz gibi, bu durumda açıklığa yardımcı olmaz. –

İlgili konular