为什么这个python while循环缺少逻辑运算符?

时间:2011-03-28 23:48:39

标签: python while-loop

我正在努力学习学习python ,并在练习33中额外学分2我试图利用raw_inputargv来设置变量将在while循环中使用:

# from sys import argv
# script, my_num = argv

def all_the_numbers(n):
   """increment by 1 up to limit n"""
   i = 0
   numbers = []
   while i < n:
      print "At the top i is %d" % i
      numbers.append(i)

      i = i + 1
      print "Numbers now: ", numbers
      print "At the bottom i is %d" % i

# print "Please enter an integer: "
# n = raw_input("#")
# n = my_num
n = 10
all_the_numbers(n)

硬编码n = 10按预期工作;打印行最多10。但是从my_num传递argv值和/或从raw_input设置变量会导致无限整数递增。后两种设置变量的形式有什么不同,它们的行为与同一变量的硬编码设置完全不同?

1 个答案:

答案 0 :(得分:5)

raw_input()函数返回字符串,而不是整数。尝试:

n = int(raw_input("#"))

n = int(my_num)

这会将raw_input()返回的字符串转换为整数,all_the_numbers()函数需要这个整数。

这是relevant passage from the Python docs(强调我的):

  

运算符&lt;,&gt;,==,&gt; =,&lt; =和!=比较两个对象的值。对象不必具有相同的类型。如果两者都是数字,则将它们转换为通用类型。否则,不同类型的对象总是比较不相等,并且一致但是任意地排序

在您的情况下,数字和字符串是任意排序的,在您的情况下,<比较总是评估为True。程序员有责任确保这种比较的类型是兼容的。