繁体   English   中英

连续数之和

[英]The Sum of Consecutive Numbers

我必须编写一个程序,要求用户输入限制。 然后程序计算连续数字的总和(1 + 2 + 3 +...),直到总和至少等于用户设置的限制。

除了结果之外,它还应该打印出执行的计算。 我应该只用一个 while 循环,没有列表或 True 条件来做到这一点。

limit = int(input("Limit:"))
base = 0
num = 0
calc = " "
while base < limit:
    base += num
    num += 1
    calc += f" + {num}"
print(base)
print(f"The consecutive sum: {calc} = {base}")

例如,如果输入为 10,则 output 应为 10,其下方应为“连续总和:1 + 2 + 3 + 4 = 10”。 如果输入为 18,则 output 应为 21,其下方应为“连续总和:1 + 2 + 3 + 4 + 5 + 6 = 21”。

现在我可以让它打印最终结果(基础)并让它打印出计算,但它打印出一个 integer 太多了。 如果输入是 10,它应该在 5 之前停止时打印出 1 + 2 + 3 + 4 + 5。

我会避免使用while循环并改用range 你可以用算术推导出最后一项的值。

如果最后一项是,那么总和将为(+1)/2,它必须小于或等于输入限制。 解决这个方程给定极限,我们得到 √(1 + 8⋅limit) − 1) / 2

那么程序可以是:

limit = int(input("Limit:"))

n = int(((1 + 8 * limit) ** 0.5 - 1) / 2)

formula = " + ".join(map(str, range(1, n + 1)))
total  = n * (n + 1) // 2
print(f"The consecutive sum: {formula} = {total}")

我想到的一种方法是连接每次迭代的值:

limit = int(input("Limit:"))
base = 0
num = 1
num_total = 0
calculation = 'The consecutive sum: '
while base < limit:
    calculation += f"{num} + "
    base += num
    num += 1

print(f"{calculation[:-3]} = {base}")
print(base)

#> Limit:18
## The consecutive sum: 1 + 2 + 3 + 4 + 5 + 6 = 21
## 21

另一种方法是在每次迭代中打印值,最后没有换行(但你在最后有额外的+符号):

limit = int(input("Limit:"))
base = 0
num = 1
num_total = 0
print('The consecutive sum: ', end='')
while base < limit:
    print(f"{num} + ", end='')
    base += num
    num += 1

print(f"= {base}")
print(base)

#> Limit:18
## The consecutive sum: 1 + 2 + 3 + 4 + 5 + 6 + = 21
## 21

可能有一种更有效的方法来写这个,但这就是我想到的......

sum = 0
long_output = []

for i in range(limit + 1):
  sum += i
  long_output.append(str(i))

print("The consecutive sum: {} = {}".format(' + '.join(long_output), sum))

继续把东西放在一个列表中,然后加入它们。 i必须强制转换为str类型,因为 join 仅用于字符串

注意:output 从0开始,以说明limit可能为 0(我不知道您的约束是什么,如果有的话)

编辑:根据@Copperfield 的建议进行更新

你/非常接近。 尝试在您的 while 语句中重新安排执行的后续。 我也觉得这个任务很难。 尝试将 calc 行作为“while”之后的第一条语句移动。

另一种方法是添加if语句:

if base< num :
   calc += f" + {num}"

这是打印计算的示例

limit = int(input("Limit:"))
base = 0
num = 1
num_total = 0
msg = ""
while base < limit:
    msg = msg + str(num) + "+"
    base += num
    num += 1
msg =  msg[:-1] + "=" + str(limit) 
print(msg)

如果limit = 21那么 output 将是

1+2+3+4+5+6=21

暂无
暂无

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

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