我正在努力学习学习python ,并在练习33中额外学分2我试图利用raw_input
或argv
来设置变量将在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
设置变量会导致无限整数递增。后两种设置变量的形式有什么不同,它们的行为与同一变量的硬编码设置完全不同?
答案 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
。程序员有责任确保这种比较的类型是兼容的。