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