Python While Loop,也使用模数和继续命令

Posted

技术标签:

【中文标题】Python While Loop,也使用模数和继续命令【英文标题】:Python While Loop, also using modulo and continue commands 【发布时间】:2019-05-26 06:04:36 【问题描述】:

尝试完成要求我完成的任务:

"编写一个 while 循环,计算从 1 到 20(包括)的整数之和,不包括可以被 3 整除的整数。(提示:您会发现模运算符 (%) 和 continue 语句很方便这个。)

我尝试自己构建代码,但代码的评估超时。我猜我的语法不正确并导致无限循环

    total, x = 0, 1
    while x >=1 and x <= 20:
        if x%3==0:
            continue
        if x%3 != 0:
            print(x)
            x+=1
            total+=1
    print(total)

预期的答案应该是:

20 19 17 16 14 13 11 10 8 7 5 4 2 1

但我只是收到“超时”错误

***最新::

尝试过:

total, x = 0, 1
while x>=1 and x<=20:
    if x%3 == 0:
        x+=1
        continue
    if x%3 != 0:
       print(x)
       x+=1
       total=+1
print(total)

收到这个::

Traceback (most recent call last):
   File "/usr/src/app/test_methods.py", line 23, in test
    self.assertEqual(self._output(), "147\n")
AssertionError:     '1\n2\n4\n5\n7\n8\n10\n11\n13\n14\n16\n17\n19\n20\n1\n' != '147\n'

- 1 - 2 - 4 - 5 - 7 - 8 - 10 - 11 - 13 - 14 + 147 ? + - 16 - 17 - 19 - 20 - 1

【问题讨论】:

只运行循环直到 20,因为你给 x 的值是 1,还有 total += x 我猜是这样? 你应该在x += 1 外面 if 声明。 或者更好的是,只需执行for x in range(1,21) 并摆脱x += 1 您的AssertionError 与您共享的代码无关。另外,请尝试我在下面的答案部分分享的代码。 【参考方案1】:

您不会在第一个 if 语句中增加 x,因此它会停留在该值并永远循环。你可以试试这个。

total, x = 0, 1
while x >=1 and x <= 20:
    if x%3==0:
        x+=1  # incrementing x here
        continue
    elif x%3 != 0:  # using an else statement here would be recommended
        print(x)
        x+=1
        total+=x  # we are summing up all x's here
print(total)

或者,您可以在 if 语句之外增加 x。您也可以使用range()。在这里,我们只是忽略了可以被3 整除的x

total, x = 0, 1
for x in range(1, 21):
    if x%3 != 0:
        print(x)
        x+=1
        total+=x
print(total)

【讨论】:

对于第二个示例,您不需要在 for 循环中增加 x,因为 for x in range(1, 21) 已经处理了这个 哦,是的,真是个愚蠢的错误!感谢您指出@Chachmu。【参考方案2】:

试试这个,

>>> lst = []
>>> while x >=1 and x <= 20:
    if x%3==0:
        x+=1  # this line solve your issue
        continue
    elif x%3 != 0:   # Use elif instead of if
        lst.append(x) # As your expected output is in reverse order, store in list
        x+=1
        total+=1

一个班轮:(另一种方式)

>>> [x for x in range(20,1,-1) if x%3 != 0]
[20, 19, 17, 16, 14, 13, 11, 10, 8, 7, 5, 4, 2]

输出:

>>> lst[::-1] # reverse it here
[20, 19, 17, 16, 14, 13, 11, 10, 8, 7, 5, 4, 2, 1]

【讨论】:

以上是关于Python While Loop,也使用模数和继续命令的主要内容,如果未能解决你的问题,请参考以下文章

020003_循环——批量处理数据

哪位是python高手,求解啊。要用while loop。

Day1_Python基础_15.while loop

6.while loop

Python3练习题系列(03)

数据库--循环语句:while loop/end loop