PYTHON 2.7.3中的布尔运算符

时间:2013-01-07 17:59:40

标签: python python-2.7 boolean-logic

我正在编写一个程序,我要求用户提供输入。

我希望python检查输入是否为数字(不是单词或puntuation ...),如果它是一个数字,表示我的元组中的对象。如果3个条件中的一个导致False,那么我希望用户为该变量提供另一个值。这是我的代码

colour={'yello':1, 'blue':2, 'red':3, 'black': 4, 'white': 5, 'green': 6}
height_measurements=('centimeter:1', 'inch:2', 'meter:3', 'foot:4')
weight_measurements=('gram:1', 'kilogram:2', 'pounds:3')
print height_measurements
hm_choice = raw_input('choose your height measurement').lower()
while not hm_choice.isdigit() or hm_choice > 0 or hm_choice < len(height_measurements) :
    hm_choice = raw_input('choose your height measurement').lower()        
print weight_measurements
wm_choice = raw_input('choose your weight measurement').lower()
while not wm_choice.isdigit() or wm_choice > 0 or wm_choce < len(weight_measurements) :
    wm_choice = raw_input('choose your weight measurement').lower()

当我对它进行测试时,无论我放入什么内容,它都会让我不断地为height_measurement插入输入

请检查我的代码并为我更正。如果您愿意,请向我提供更好的代码。

2 个答案:

答案 0 :(得分:6)

我不会完全修复你的代码,但我会向你解释一些你似乎感到困惑的事情。

raw_input返回一个字符串。字符串和整数是两种类型,不能相互比较(即使在python 2 this is does not raiseTypeError中)。所以你的变量hm_choice是一个字符串,你使用isdigit方法来确保它是一个整数是正确的。但是,您正在将一个字符串与一个整数进行比较,该整数在其中一个条件中总是计算为True,这意味着while循环永远不会停止。所以我向你提出这个问题:如何从字符串中获取整数?

接下来,您需要检查该循环的逻辑。你说的是:虽然hm_choice不是数字,而hm_choice大于0(我们已经知道这是一个无效的陈述),或hm_choice小于4(或你的元组长度。)

因此,如果其中任何一个为True,那么循环将不会结束。如果您阅读我上面链接的文章,您将找出其中哪些始终评估为True。 ;)

答案 1 :(得分:0)

  

当我把它测试时,它一直让我插入输入   无论我把什么放在

中,都会经常出现height_measurement

那是因为hm_choice > 0是字符串和int之间的比较,undefined并且可以等于TrueFalse,具体取决于实现。

我没有完全理解第三个条件,所以我只是将THE_OTHER_CONDITION放在那里。如果您定义THE_OTHER_CONDITION = True,代码将起作用。

colour={'yello':1, 'blue':2, 'red':3, 'black': 4, 'white': 5, 'green': 6}
height_measurements=('centimeter:1', 'inch:2', 'meter:3', 'foot:4')
weight_measurements=('gram:1', 'kilogram:2', 'pounds:3')

print height_measurements
while True:
    hm_choice = raw_input('choose your height measurement: ').lower()
    if (hm_choice.isdigit() and int(hm_choice) > 0 and THE_OTHER_CONDITION):
        break

print weight_measurements
while True:
    wm_choice = raw_input('choose your weight measurement: ').lower()
    if (wm_choice.isdigit() and int(hm_choice > 0) and THE_OTHER_CONDITION):
        break