2016-04-10 12 views
0

Şu anda kendimi Python 2.7'yi çevrimiçi bir ders olarak okuyorum ve bir boole operatörü ile biraz sorun yaşıyorum. Bağlam çok basit - kapalı bir metin tabanlı bir macera oyunu (30 saniyenin tamamını çekecek).Python (2.7) VEYA boolean işleçleri neden doğru olmayan bir şekilde yanlış döndü?

Ben deyimi farklı kullanıcı girişlerine izin vermek için, aşağıdaki ekledik - ancak bile girdi demek olduğunu "gobbledigook" demek durumlarda veya bir elif deyimi var olduğu için "doğru", bear_room() işlevi hala çağrılıyor. OR işlevini burada yanlış mı kullanıyorum? Eğer bu zaten bir yerlerde cevaplanmışsa özür dilerim, mantıksal mantıktaki kontroller sadece şu anki düşüncemi doğruladı, bu yüzden fazla yardımcı olmadı! Bir mantıksal OR boole değerlere yok - - bu da bu kadar

choice = raw_input()  
if choice == "left" or "Left" or "LEFT": 
      bear_room() 

cevap

2

Sen sadece sen or operatörü yanlış anlama vardır if choice.lower() == 'left'

+0

Bu harika! Bütün gün bu işte çalıştım - böyle basit bir sözdizimini özlediğime inanamıyorum. Teşekkürler! – rtob

+0

Sorun değil. Diğer cevap daha derinlemesine ve bunun neden olduğunu açıklıyor. Yani - diğer 'veya' aslında gerçekten – Pythonista

0

kullanmak durumunuzu kolaylaştırabilirsiniz, if choice == "left" or choice == "Left" ...

kullanmak gerekir Ama True veya False. Öte yandan Kişisel anlatım türlerini karıştırır - Hadi yıkmak bakalım:

  • choice == "left" bir boolean
  • 'Left' bir dizedir olduğunu. or işleci dizeleri üzerinde çalışamaz, bu yüzden bir boole dönüştürmeye çalışır. Bu boş olup olmadığını kontrol ederek yapar - herhangi nonempty dize True dönüştürülür, boş dizeler False
  • dönüştürülür 'sol' - dizeden boolean dönüşümleri sonra

yukarıdaki ile aynıdır, ifadenizi herhangi bir giriş yürütmek için bear_room neden nedeni şimdi anlaşılıyor

if choice == "left" or True or True: 
      bear_room() 

olur. Davanızı doğru bir şekilde ele almak için aşağıdakilerden herhangi birini yapabilirsiniz:

if choice == 'left' or choice == 'Left' or choice == 'LEFT': 
    bear_room() 
if choice.lower() == 'left': # convert all letters to lower case 
    bear_room() 
if choice in ['left', 'Left', 'LEFT']: # check choice is in the list of valid options 
    bear_room() 
+0

için değerlendirmek Açıklama için çok teşekkürler. Şimdi kendimi kaçırdığım için hayal kırıklığına uğradım! – rtob

İlgili konular