如果符合某些条件,Python会添加到列表中

时间:2015-10-08 11:47:24

标签: python

有人可以解释为什么这不起作用吗?

我认为应根据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

2 个答案:

答案 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}}等等。