Логические ошибки с печатью суммы всех чисел, кратных трем или пяти - PullRequest
0 голосов
/ 25 июня 2018

У меня возникли логические ошибки в моей программе.Я пытался решить эту проблему последние пару часов.Предполагается напечатать сумму всех чисел, кратных трем или пяти.

мой вывод

1.)enter an integer number (0 to end): enter an integer number (0 to end):
2.)enter an integer number (0 to end): 3+ = 3

ожидаемый результат

1.)enter an integer number (0 to end): 3 = 3
2.)enter an integer number (0 to end): 3+5 = 8

ниже мойcode.

while True:
  answer = ""
  num = int(input("enter an integer number (0 to end): "))
  end_answer = 0

  if num == 0:
    exit()

  for i in range(1, num+1):
    if i%3==0 or i%5==0 :
      answer += str(i)
      end_answer += i


    if i != num and (i%3==0 or i%5==0):
      answer += "+"
      print(str(answer) + " = " + str(end_answer) )

Я видел похожие ответы на этот вопрос, но не в python, а конкретно

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Вы можете значительно упростить свой код, используя встроенные sum и f-строки для форматирования печатного текста.Это, вероятно, будет более эффективным.

Код

from itertools import count

counter = count(1)

while True:
    num = int(input(f'{next(counter)}). Enter an integer number (0 to end): '))

    if num == 0:
        break

    nums = [x for x in range(1, num + 1) if x % 3 == 0 or x % 5 == 0]
    print(f'{" + ".join(map(str, nums))} = {sum(nums)}')

Вывод

1). Enter an integer number (0 to end): 3
3 = 3
2). Enter an integer number (0 to end): 9
3 + 5 + 6 + 9 = 23
3). Enter an integer number (0 to end): 15
3 + 5 + 6 + 9 + 10 + 12 + 15 = 60
4). Enter an integer number (0 to end): 0
0 голосов
/ 25 июня 2018

Следующий (с правильным отступом) код даст вам то, что вам нужно:

while True:
    num = int(input('Enter an integer number (0 to end): '))
    if num == 0: exit()

    answer = ''
    end_answer = 0
    sep = ''
    for i in range(1, num+1):
        if i % 3 == 0 or i % 5 == 0 :
            answer += sep + str(i)
            sep = ' + '
            end_answer += i

    if end_answer > 0:
        print(str(answer) + ' = ' + str(end_answer) )

Обратите внимание, что он использует разделитель переменных sep, чтобы более аккуратно распечатать элемент, с которым вы работаете. Пример прогона:

Enter an integer number (0 to end): 2
Enter an integer number (0 to end): 3
3 = 3
Enter an integer number (0 to end): 10
3 + 5 + 6 + 9 + 10 = 33
Enter an integer number (0 to end): 38
3 + 5 + 6 + 9 + 10 + 12 + 15 + 18 + 20 + 21 + 24 + 25 + 27 + 30 + 33 + 35 + 36 = 329
Enter an integer number (0 to end): 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...