这个Python的while循环为什么缺少逻辑运算符?
我正在学习《艰难的Python学习法》,在第33个练习的额外任务2中,我想用raw_input
或者argv
来设置一个变量,这个变量会在一个循环中使用:
# 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
的所有行。但是如果我通过argv
传入一个值给my_num
,或者用raw_input
来设置这个变量,就会出现一个无限增加的整数。这两种设置变量的方式和直接写死的变量有什么不同,为什么它们的表现不一样呢?
1 个回答
5
raw_input()
这个函数返回的是一个字符串,而不是整数。你可以试试:
n = int(raw_input("#"))
或者
n = int(my_num)
这样可以把raw_input()
返回的字符串转换成整数,这样你的all_the_numbers()
函数就能正常使用了。
这里有一段来自Python文档的相关内容(我加了重点):
运算符<、>、==、>=、<=和!=用于比较两个对象的值。这两个对象不一定要是同一种类型。如果它们都是数字,会被转换成一种共同的类型。否则,不同类型的对象总是比较不相等,并且它们的顺序是一致但任意的。
在你的情况中,一个数字和一个字符串的比较是任意的,而在你的情况下,<
的比较总是返回True
。确保进行比较的类型是兼容的,这是程序员需要负责的事情。