我对编程比较陌生,并且遇到简单的while循环问题。我正在尝试编写一个程序,输出0到100之间的所有3的倍数。这就是我所拥有的:
counter3 = 1
theList = []
while counter3 <= 1000:
if 3 % counter3 : True
theList.append(counter3)
counter3 = counter3+1
print(theList)
我使用的while循环有语法错误,但我不确定它在哪里。任何帮助将不胜感激
答案 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(其他选项)评估为真。
虚假值为if
,False
,0
,[]
,""
,0.0
,0j
,{{ 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)