简体   繁体   English

出现逻辑错误时,将打印出三个或五个整数的所有数字之和

[英]logic errors with print the sum of all the numbers that are either multiple of three or five

I'm having some logic errors with my program. 我的程序出现一些逻辑错误。 I've been trying to solve this for the last couple of hours. 在过去的几个小时中,我一直在尝试解决此问题。 It's supposed to print the sum of all the numbers that are either multiple of three or five. 应该打印出三个或五个整数的所有数字的总和。

my output 我的输出

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

expected output 预期产量

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

below is my 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) )

I've seen similar answers for this just not in python specifically 我已经没有在python中看到类似的答案

The following (properly indented) code will give you what you need: 以下代码(适当缩进)将为您提供所需的信息:

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) )

Note that it uses a variable separator sep to more cleanly print the item you're working out. 请注意,它使用可变分隔符sep来更清晰地打印您要处理的项目。 A sample run follows: 运行示例如下:

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

You can simplify your code a lot by using the sum builtin and f-strings for printed text formatting. 通过使用内建的sumf字符串来打印文本格式,可以大大简化代码。 This will likely be more efficient as well. 这也将更有效率。

Code

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)}')

Output 产量

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM