Python While Loop, также использующий команды modulo и continue - PullRequest
1 голос
/ 26 мая 2019

Попытка завершить эту задачу, которая просит меня:

"Напишите цикл 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 * * +1010

Но я просто получаю ошибки «Тайм-аут»

*** Последние ::

Попытка это:

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

Ответы [ 2 ]

5 голосов
/ 26 мая 2019

Вы не увеличиваете x внутри первого оператора if, следовательно, оно застряло в этом значении и зацикливается навсегда.Вы можете попробовать это.

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)

В качестве альтернативы, вы можете увеличить x за пределами операторов if.Вы также можете использовать range().Здесь мы просто игнорируем x, которые делятся на 3.

total, x = 0, 1
for x in range(1, 21):
    if x%3 != 0:
        print(x)
        x+=1
        total+=x
print(total)
0 голосов
/ 26 мая 2019

Попробуйте это,

>>> 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]
...