有网友出了一道题:
从键盘输入一个小于10的正整数n,计算1+12+123+1234……,即前n项之和。
第一眼看到题目,直觉告诉我必须使用嵌套的两个for循环,里面的循环生成每一项,外面的循环求和。错误的方向和思路让我白白浪费了三个小时都没有调试出来,大受打击,最后不得已向AI求助。
(1)sider生成的代码如下:
n = int(input("请输入一个小于10的正整数:"))
result = 0
number = 0
for i in range(1, n + 1):
number = 10 * number + i
print(number)
result += number
print(f'求和结果是{result}')
这段代码使用了双变量(result和number)、一个for循环求解,比我最开始想到的嵌套循环简单了很多。number = 10 * number + i是核心语句,是最关键的部分。程序其他地方就没有技术含量了,结果如下:
有了如此简单的答案,心态产生了微妙的变化。我反复安慰、鼓励自己:你行的!于是,想挑战使用其他方法来求解。首先想到的是递归方法求解,代码如下:
(2)递归的方法:
n = int(input("请输入一个小于10的正整数:"))
def f(n):
if n == 1:
return 1
else:
return 10 * f(n-1) + n
list_created = [f(i) for i in range(1, n+1)]
print(list_created)
print(sum(list_created))
除了递归,第二种方法还涉及列表解析式和sum()函数的用法。运行得到正确答案。
第三种方法我认为很巧妙,运用了字符串、变量转换、for循环、切片等知识,代码如下:
(3)字符串的方法:
n = int(input("请输入一个小于10的正整数:"))
s = "123456789"
result = 0
for i in range(1, n+1):
s_temp = s[:i]
value = int(s_temp)
print(value)
result += value
print(result)
当然,条条大路通罗马,读者若有更多方法,欢迎在下面留言分享。