【问题标题】:If...else statement issue with raw_input on PythonPython 上 raw_input 的 if...else 语句问题
【发布时间】:2014-10-19 05:05:08
【问题描述】:

我目前正在关注 Zed Shaw 关于 Python 的书,Learn Python the Hard Way,我正在学习函数。我决定跟随课程中的一些额外的学分练习,并添加了一个 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 磅的食物”,但是如果我直接为变量水和食物分配一个数字,它就会起作用。

【问题讨论】:

    标签: python


    【解决方案1】:

    raw_input 的返回值是一个字符串,但是当你检查 food 的值时,你使用的是一个 int。事实上,if food == 1 永远不可能是 True,所以流程总是默认为复数形式。

    你有两个选择:

    if int(food) == 1:
    

    上述代码会将food 转换为整数类型,但如果用户不输入数字则会引发异常。

    if food == '1':
    

    上面的代码正在检查 字符串 '1' 而不是整数(注意周围的引号)。

    【讨论】:

    • 非常感谢您的帮助。他可能提到 raw_input 总是返回一个字符串,但我可能忘记了。现在可以正常使用了,感谢您的帮助。
    • @Matt 如果您觉得有帮助,请接受 Narpar1217 的回答作为有效答案。
    【解决方案2】:

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

    然后您可以通过使用 %d 而不是 %s 在整个代码中将 food 视为 int。输入非 int 时,您的程序会抛出异常。

    【讨论】:

      猜你喜欢
      • 2014-12-12
      • 2021-05-15
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多