为什么python中的这些代码行只输出相同的答案?

时间:2016-07-07 05:33:25

标签: python math

我正在尝试让这个程序返回1001以下的所有可能的3和5的倍数,然后将它们全部加在一起并打印出来但由于某种原因,这些代码行似乎只打印一个数字而且这个数字是数字2显然是错误的。有人能指出我为什么这个代码严重错误的正确方向?

n = 0
x = n<1001
while (n < 1001):
     s = x%3 + x%5
     print s

3 个答案:

答案 0 :(得分:2)

你有一些错误:

  • x是布尔类型
  • 你的循环永远不会结束
  • 为模仿列表添加值?

修改

没有看到你要求总和的部分,所以你可以使用for-in循环或只是一个简单的循环:

sum = 0
for i in range(1001):
    if(i % 3 == 0 or i % 5):
        sum += i
print(sum)

(Python 3)

你需要在某个时刻通过递增n来停止。这是一些代码:

nums = []
n = 0
while (n < 1001):
    # in here you check for the multiples
    # then append using nums.append()
    n += 1

这将创建一个循环和一个列表,该列表记录0到1000中的每个数字。在正文中,检查任一条件并附加到列表,然后打印出列表中的值。

num是一个列表,您可以在其中存储所有适用的值(可以用3和5整除的数字,用模数计算)。在满足条件时附加到该列表。这是一些代码:

nums = []
n = 0
while (n < 1001):
    if(n % 3 == 0 or n % 5 ==0):
        nums.append(n)
    n += 1
print(n) #or for loop for each value

说明:名为num的数字列表存储可被3或5整除的数字。循环从零开始到1000,对于所有可被3或5整除的值,它们将被添加到列表中。然后它打印列表。

当然,有一个范围更简单的方法:

for i in range(1001):
    if(i % 3 == 0 or i % 5 == 0):
        print(i)

这将逐个打印出所有值。它是1001,因为上限是独占的。

答案 1 :(得分:0)

在你的代码中: 1. x=n<1001 - 生成一个布尔值;我们无法进行数学运算。

  1. 在while循环中: 你的变量n,x没有变化;对于所有迭代,它们都是相同的值。
  2. 解决方案1: 下面的代码将帮助您。

    s=0
    for i in range(1,1002):
    if( i%3 == 0 or i%5 == 0):
        s = s + i
    print(s)
    

    解决方案:2 您还可以使用另一种方法。

    var = [i for i in range(1,1002) if i%3==0 or i%5 ==0]
    print(sum(var))
    

答案 2 :(得分:0)

true=1
false=0

这样:

x = n<1001

我们有x = 1,因为0 <1001为真

s = x%3 + x%5

1/3的余数为1,而1/5为1