我在一个简单的表达式中遇到了问题,如下所示。
number=int(input("enter the number"))
for n in range(40-101):
if n % number is 0:
print(n)
当我输入10作为输入时,它不输出任何内容作为输出。通过我的小学数学,我可以轻松地假设这应该打印所有可以除以10的数字。
所以问题应该在if
语句中。它没有进入print(n)
。
我正在使用PyCharm Community Edition和Python 3.4
答案 0 :(得分:5)
在这种情况下,您应该使用==
代替is
,因为:
is
检查两个对象的id
是否相同,==
检查两个对象的值是否相同。
好吧,range(40-101)
给出了range(-61)
,并将其视为range(0, -61)
。我们来看看:
>>> range(40-101)
range(0, -61)
>>> list(range(40-101))
[]
我认为你的意思是range(40, 101)
对吗?
所以你的代码应该是这样的:
number = int(input("Enter the number: "))
for n in range(40, 101):
if n % number == 0:
print(n)
演示:
Enter the number: 10
40
50
60
70
80
90
100
只是想知道改进代码,在这种情况下你不需要%
,因为range()
有一个step
参数。来自文件:
class range(stop)
class range(start, stop[, step])
范围构造函数的参数必须是整数(内置int或实现
__index__
特殊方法的任何对象)。如果省略
step
参数,则默认为1.如果省略start参数,则默认为0.如果step为零,则引发ValueError
。对于肯定步骤,范围r的内容由公式
r[i] = start + step*i
确定,其中i >= 0
和r[i] < stop
。
正如文档所述,您也可以设置step
而不是使用%
来检查所有可以手动除number
的数字使用if
。例如:
number = int(input("Enter the number: "))
for n in range(40, 101, number):
print(n)