有人可以解释为什么这不起作用吗?
我认为应根据div3num and div5num
最初的内容为number
分配一个值。然后它应该击中if语句的哪一部分返回一个整数。例如,对于1. 1/3和1/5应该直接跳到else部分,因此不会添加到列表中。但是对于3. 3/3 = 1,所以应该在列表中添加3。在我运行代码的那一刻,它放入了0-9的所有值。
number = 0
divisnumbers = [];
while len(divisnumbers) < 10:
div3num = number / 3;
div5num = number / 5;
if type(div3num) is int:
divisnumbers.append(number)
number += 1
elif type(div5num) is int:
divisnumbers.append(number)
number += 1
else:
number += 1
print divisnumbers
答案 0 :(得分:3)
因为将int类型变量划分为int类型变量总是在python2中生成int(在python3中它将是float)。
您可以使用modulo:
if number % 5 == 0:
divisnumbers.append(number)
答案 1 :(得分:2)
不要通过划分和检查类型来测试可分性(它永远不会起作用;除了操作数和Python版本的type
之外,除法总是产生一种类型,不依赖于值的操作数。)
使用remainder / mod运算符并验证整数除法后剩余的余数为0:
if number % 3 == 0:
...
elif number % 5 == 0:
...
...
作为旁注,您可以将number += 1
完全移出if/elif/else
链,并通过将整个链替换为以下内容来简化代码:
if number % 3 == 0 or number % 5 == 0:
divisnumbers.append(number)
number += 1
请注意number
现在无条件递增(因为所有情况都在增加它,所以你可以移出增量),你只有一个append
调用(因为它是相同的)等等{/ 1}}等等。