0

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

我希望python检查输入是否是数字(不是单词或标点符号......),以及它是否是一个数字,表示我的元组中的一个对象。如果 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 插入输入

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

4

2 回答 2

6

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

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

接下来,您需要检查该循环的逻辑。您是说: Whilehm_choice不是数字或 whilehm_choice大于 0(我们已经知道这是无效语句)或 whilehm_choice小于 4(或您的元组的长度)。

因此,如果其中任何一个为 True,则循环不会结束。如果您阅读我上面链接的文章,您会发现其中哪些总是评估为 True。;)

于 2013-01-07T18:11:47.493 回答
0

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

这是因为hm_choice > 0string 和 int 之间的比较,它是未定义的,可以等于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
于 2013-01-07T18:37:49.917 回答