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

1 投票
1 回答
1329 浏览
提问于 2025-04-16 14:36

我正在学习《艰难的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。确保进行比较的类型是兼容的,这是程序员需要负责的事情。

撰写回答