为什么Python中的以下短脚本忽略了“if”中的条件?

时间:2012-04-06 20:46:37

标签: python if-statement

当参数大于10时,我希望它给'甜甜圈的数量:许多'和当参数计数<10时,'甜甜圈的数量:'。但它总是给我'甜甜圈数量:很多'

#!/usr/bin/python2.6 -tt
import sys
def donuts(count):
  if count < 10:
    x = str(count)
  else:
    x = 'many'
  print 'Number of donuts: ' + x

def main():
  donuts(sys.argv[1])

if __name__ == "__main__":
  main()

5 个答案:

答案 0 :(得分:6)

sys.argv只会包含字符串,即使您将整数作为参数提供,例如,如果您将其称为python donuts.py 4,则sys.argv[1]将为'4'并且您当您真正想要'4' < 10时,会尝试进行比较4 < 10

首先,尝试将sys.argv[1]转换为int:

def main():
    donuts(int(sys.argv[1]))

如果没有提供参数或者它不是整数,您可能还想添加一些错误处理:

def main():
    try:
        donuts(int(sys.argv[1]))
    except IndexError:
        print 'Missing argument'
    except ValueError:
        print 'Invalid argument'

答案 1 :(得分:5)

count是一个字符串。试试count = int(count)

答案 2 :(得分:3)

在将count与10比较之前,你应该将count转换为int:

#!/usr/bin/python2.6 -tt
import sys
def donuts(count):
    if int(count) < 10:
        x = count
    else:
        x = 'many'
    print 'Number of donuts: %s' % x

def main():
    donuts(sys.argv[1])

if __name__ == "__main__":
    main()

答案 3 :(得分:3)

尝试将count参数转换为int以进行比较:

if int (count) < 10:
  x = str (count)
else:
  x = 'many'

因为您传入了count参数的字符串参数,所以比较失败。

答案 4 :(得分:3)

您不要将输入作为整数开始。

变化:

def main():
  donuts(sys.argv[1])

为:

def main():
  donuts(int(sys.argv[1]))

如果他们输入字符串或小数而不是数字值,你会遇到问题。