为什么我的while语句不起作用

时间:2018-01-19 22:13:55

标签: python

我对编程比较陌生,并且遇到简单的while循环问题。我正在尝试编写一个程序,输出0到100之间的所有3的倍数。这就是我所拥有的:

counter3 = 1
theList = []

while counter3 <= 1000:
   if 3 % counter3 : True
   theList.append(counter3)
   counter3 = counter3+1


print(theList)

我使用的while循环有语法错误,但我不确定它在哪里。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

当您运行的代码运行时,它不会引发语法错误。它返回一个从1到1000的数字列表。原因是以下声明:

if 3 % counter3 : True
theList.append(counter3) 

:运算符表示if语句的结束,如果语句为真,则执行后执行的操作。在这种情况下,您可能希望将:替换为==。由于if语句在3 % counter3为真时自动执行,因此您根本不需要== true

然后,您希望缩进theList.append(counter3),以便在语句为真时运行它。新代码:

counter3 = 1
theList = []

while counter3 <= 1000:
   if 3 % counter3:
       theList.append(counter3)
   counter3 = counter3+1


print(theList)

但是,它仍会打印1到1000之间的数字。这是因为%运算符中使用的数字是错误的。您想使用行if counter3 % 3:检查该数字是否可被3整除。

现在它打印除了之前可以被3整除的数字。这是因为可以被3整除的数字将返回0. 0是一个虚假值,这意味着它在{{1}中的计算结果为false声明。 1和2(其他选项)评估为真。

虚假值为ifFalse0[]""0.00j,{{ 1}}和()

查看this link了解详情。

由于你想检查它是否可以被3整除,那么你想检查数字mod 3是否等于0.现在你的代码如下:

{}

你可以做set(),因为0是假的,但这会掩盖代码的功能并不是一个好习惯。

由于你的问题是要做0到100之间的数字,你应该将while语句更改为counter3 = 1 theList = [] while counter3 <= 1000: if counter3 % 3 == 0: theList.append(counter3) counter3 = counter3+1 print(theList)

另一件事是你应该使用if not counter3 % 3循环。这使您可以迭代while counter3 <= 100:,这样您就不必跟踪变量并随时间增加变量。

for

此代码有效,并且它遵循大多数最佳做法。

如果您愿意,可以使用列表理解进行单行,但不需要这样做。

range

答案 1 :(得分:0)

要判断一个数字是否是三的倍数,它应该是

if counter3 % 3 == 0:

counter3 % 3计算counter3 / 3的余数,剩余部分为0,用于精确倍数。

然后,当这个条件为真时,你需要缩进应该执行的语句。

所以循环应该是:

while counter3 <= 1000:
    if counter3 % 3 == 0:
        theList.append(counter3)
    counter3 = counter3+1

您可以使用while

,而不是for循环
for counter3 in range(1, 1001):
    if counter3 % 3 == 0:
        theList.append(counter3)