如果在Python上使用raw_input的else语句问题

时间:2014-10-19 05:05:09

标签: python

我目前正在关注Zed Shaw关于Python的书,学习Python的艰难之路以及我正在学习的功能。我决定遵循课程中的一些额外学分练习,并添加了IF ELSE流程声明。这是我下面的代码。

print "How much bottles of water do you have?"
water = raw_input("> ")

print "How many pounds of food do you have?" 
food = raw_input("> ")

if food == 1:
    def water_and_food(bottles_of_water, food):
        print "You have %s bottles of water" % bottles_of_water
        print "And %s pound of food" % food

else:
    def water_and_food(bottles_of_water, food):
        print "You have %s bottles of water" % bottles_of_water
        print "And %s pounds of food" % food

water_and_food(water, food)

我想做的就是这个。如果用户输入他们有1磅的食物,它将显示"你有1磅的食物"如果他们输入他们有2磅或更多的食物,它将显示"你有2磅的食物,"英镑的差异是单数还是复数。

然而,如果我放1,它仍会显示"你有1磅的食物,"但是,如果我直接为变量水和食物分配一个数字,它将起作用。

2 个答案:

答案 0 :(得分:4)

raw_input的返回值是一个字符串,但是当你检查food的值时,你正在使用int。实际上,if food == 1永远不会是True,因此流程始终默认为复数形式。

您有两种选择:

if int(food) == 1:

上面的代码会将food强制转换为整数类型,但如果用户没有输入数字,则会引发异常。

if food == '1':

上面的代码检查 string '1'而不是整数(注意周围的引号)。

答案 1 :(得分:1)

在Python 2.x中,raw_input返回一个字符串。查看代码,您还可以使用返回整数的input。我认为这将是使用Python2的最explicit选项。

然后,您可以使用%d代替%s将整个代码中的食物视为int。输入非int时,程序会抛出异常。