【问题标题】:logic errors with print the sum of all the numbers that are either multiple of three or five打印所有三或五的倍数的总和的逻辑错误
【发布时间】:2018-06-25 13:01:46
【问题描述】:

我的程序有一些逻辑错误。在过去的几个小时里,我一直在尝试解决这个问题。它应该打印三或五的倍数的所有数字的总和。

我的输出

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

下面是我的代码。

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 中看到过类似的答案

【问题讨论】:

  • while True: 没有退出条件,也没有中断。您的代码将一直要求 num 永远(假设空行结束必须格式化的代码块)
  • 请正确格式化您的代码,它不会在当前状态下运行。 @TusharAggarwal,我猜正确的缩进会在while True 中包含整个事物,这意味着if num == 0: exit() 将是退出条件。
  • @paxdiablo 是的,如果数字等于 0,则它存在。
  • @AngelValenzuela,您仍然需要正确格式化缩进
  • 希望我的缩进现在是正确的。

标签: python python-3.x logic


【解决方案1】:

以下(适当缩进)代码将为您提供所需的内容:

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

【讨论】:

  • 我的问题是我的缩进错误,这就是为什么它给我一个错误的输出?
  • @AngelValenzuela:不知道。如果你的缩进是真的你最初拥有的,它根本就不会运行!所以我认为根据您的文字描述提供运行的东西会更容易。
【解决方案2】:

您可以通过使用内置的sumf-strings 来大大简化您的代码以进行打印文本格式。这也可能会更有效。

代码

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2011-11-29
    相关资源
    最近更新 更多