SORU
27 ŞUBAT 2013, ÇARŞAMBA


Nasıl çoklu değerlere karşı bir değişken test edebilirim?

Tamsayı ve bir çıkış için birden çok değişken üç harf bir dize karşılaştırma işlevi yapmak için çalışıyorum. Eğer Python içine bu çevirmek için bir yolu varsa merak ettim. Öyle ki:

x = 0
y = 1
z = 3
Mylist = []

if x or y or z == 0 :
    Mylist.append("c")
elif x or y or z == 1 :
    Mylist.append("d")
elif x or y or z== 2 :
    Mylist.append("e")
elif x or y or z == 3 : 
    Mylist.append("f")

bir listesini döndürür

["c", "d", "f"]

Bu mümkün gibi bir şey mi?

CEVAP
27 ŞUBAT 2013, ÇARŞAMBA


Boole ifadeleri nasıl yanlış anladın; İngilizce bir cümle gibi çalışmak ve tüm isimler için aynı karşılaştırma bahsediyorsun sanırım bilmiyorlar. Arıyoruz:

if x == 1 or y == 1 or z == 1:

x y aksi takdirde kendi başına değerlendirilir (0, True aksi takdirde False).

Bunu kısaltmak için:

if 1 in (x, y, z):

veya daha da iyisi

if 1 in {x, y, z}:

sabit maliyetli üyelik testi yararlanmak için set (in sol işlenen her ne zaman sabit bir miktar alır) kullanarak.

Kullandığınızda or python için operatör her tarafı görüyorayrıifadeler. x or y == 1 x, eğer Yanlış ise daha sonra ifade için bir boolean test y == 1 olarak kabul edilir ifade test edilir.

Bu operator precedence kaynaklanmaktadır. or operatör == test daha düşük bir önceliğe sahiptir, ikincisi değerlendirilirilk.

Eğer bu olsaydı bile ancakdeğildava ve x or y or z == 1 aslında (x or y or z) == 1 olarak yorumlandı ifade yerine, bu hala bunu yapmak için ne bekliyorsun.

x or y or z olurdu değerlendirmek için ilk argüman 'truthy', örneğin False sayısal 0 veya boş (bkz: boolean expressions ayrıntılar üzerinde ne Python gördüğü yanlış bir boolean bağlamında).

Yani değerler için x = 2; y = 1; z = 0, x or y or z iddialar gerçek gibi ilk değer olduğundan 2, çözmek için. 2 == 1 y == 1 True olsa bile 31**, olacaktır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Codecourse

    Codecourse

    3 ŞUBAT 2009
  • gsmaestro

    gsmaestro

    17 AĞUSTOS 2006
  • ParryGripp

    ParryGripp

    12 AĞUSTOS 2006