【目录】
【目标任务】
已知一个数列1,2,3,4,……,n,计算并输出其前n项的平方和。
【输入输出】
输入:1
输出:1
输入:2
输出:5
输入:3
输出:14
【平方和】
数列前n项的平方和是指将数列中每一项的平方相加得到的结果。
【题目解析】
n=1,前1项的平方和为1×1=1
n=2,前2项的平方和为1×1+2×2=5
n=3,前3项的平方和为1×1+2×2+3×3=14
n=4,前4项的平方和为1×1+2×2+3×3+4×4=30
n=n,前n项的平方和为1×1+2×2+3×3+……+n×n
【使用 **
符号来表示幂函数】
print(2 ** 2) # 2的2次方
print(2 ** 3) # 2的3次方
print(2 ** 4) # 2的4次方
【终端输出】
4
8
16
【使用 pow()
函数来计算幂函数】
print(pow(2, 2)) # 2的2次方
print(pow(2, 3)) # 2的3次方
print(pow(2, 4)) # 2的4次方
【终端输出】
4
8
16
第一个参数2
是底数。
第二个参数2,3,4
是指数。
f
字符串格式化语法当我们需要将变量的值插入到字符串中时,可以使用 f 字符串格式化
来实现。
f 字符串
是一种特殊的字符串,可以通过在花括号 {}
插入变量,并在字符串前加上字母f
来标识。
例如,假设我们有一个变量 name,存储了一个人的姓名,我将其插入到字符串中:
name = "安迪"
print(f"大家好,我是{name}!")
【终端输出】
大家好,我是安迪!
【课堂练习】
用f字符串格式化方法输出:n=2时,平方和为 5。
i = 2
square_sum = 5
print(f"n={i}时,平方和为 {square_sum}。")
【终端输出】
n=2时,平方和为 5。
f
字符串格式化语法相关知识可参考下面的链接:
53.Python的f格式化字符串
求一个数列前n项的平方和
与求一个数列的前n项和
在逻辑上是一样的。
【求和代码回顾】
n = int(input("请输入一个正整数n:"))
add = 0
# 题目要求包括n,因此range函数需要以n+1结尾
for i in range(1,n+1):
add += i
print(add)
不管解什么题,在你无从下手时,记得从最简单的代码开始编写起。
先从n = 1
开始编写:
【n = 1】
n = 1
square_sum = n**2 # n**2表示n的2次方
print(square_sum ) # square_sum是变量名,表示平方和
【终端输出】
1
【n = 2】
n=2,前2项的平方和为1×1+2×2=5 。
n=2,要取出1和2
两个值来进行计算,我们第一时间就应该想到for
循环语句。
因为从1到n
是一个范围,在某个范围内我们肯定要用到for
循环语句。
n=2,加上for循环语句,我们应该第一时间想到用for i in range(1,3)
。
求和的思路如下:
使用一个变量add
来保存和的结果,并给这个变量赋一个初始值0
。
通过循环将每次取到的值添加到这个变量中。
求平方和的思路同样如下:
先定义一个存储平方和的变量square_sum
。
给它赋一个初始值0
。
将每次取到的值进行平方计算后和square_sum
进行累加。
为了检测输出结果是否正确,这里我会输出每次循环后得到的值,因此这里我将print放在for循环的代码中
:
n = 2
square_sum =0
for i in range(1, n+1):
square_sum = square_sum + i**2
print(square_sum)
【终端输出】
1
5
为了让输出结果更直观,我用f
字符串格式化语法对输出语句进行优化:
n = 2
square_sum =0
for i in range(1, n+1):
square_sum = square_sum + i**2
print(f"n={i}时,平方和为 {square_sum}。")
【终端输出】
n=1时,平方和为 1。
n=2时,平方和为 5。
观察输出语句,程序计算正确,最后我给代码加上输入语句:
n = int(input("请输入一个正整数:"))
square_sum =0
for i in range(1, n+1):
square_sum = square_sum + i*i
print(f"n={i}时,平方和为 {square_sum}。")
【终端输出】
n=1时,平方和为 1。
n=2时,平方和为 5。
n=3时,平方和为 14。
n=4时,平方和为 30。
n=5时,平方和为 55。
终端输入的值为5。
观察输出结果,程序计算正确。
题目只要求输出最终的结果,我们只需要输出最后一次循环的值即可。
将print
语句的位置调整到和for
语句对齐
,只输出最终的结果:
n = int(input("请输入一个正整数:"))
square_sum =0
for i in range(1, n+1):
square_sum = square_sum + i*i
print(f"n={i}时,平方和为 {square_sum}。")
【终端输出】
n=3时,平方和为 14。
重点关注print语句的位置哦!!!
【代码示例】
def square_sum(n):
result = 0
for i in range(1, n+1):
result += i ** 2
return result
n = int(input("请输入数列的项数:"))
print(f"数列前{n}项的平方和为:{square_sum(n)}。")
【终端输出】
数列前3项的平方和为:14。
【代码解析】
def square_sum(n):
自定义一个函数,函数名为 square_sum
,它接受一个参数 n
。
result = 0
创建一个变量 result,并将其初始化为0。
这个变量将用来保存平方和的结果。
for i in range(1, n+1):
for循环语句从1循环到 n(包含 n),每次循环将当前的值赋给变量 i。
result += i ** 2
在每次循环中,将 i 的平方加到 result 变量中。即将当前项的平方累加到结果中。
return result
函数执行完毕后,返回最终的结果 result。
n = int(input("请输入数列的项数:"))
获取用户输入的数列项数 n,使用 input 函数获取用户输入的字符串,然后使用 int 函数将其转换为整数型。
print(f"数列前{n}项的平方和为:{square_sum(n)}。")
使用 f 字符串格式化输出结果,将数列项数和平方和的结果插入到字符串中,并通过 print 函数输出。
square_sum(n)
调用函数语句,square_sum
是函数名,n
是参数。
【代码示例】
def square_sum(n):
if n == 1:
return 1
else:
return n**2 + square_sum(n-1)
n = int(input("请输入数列的项数:"))
print(f"数列前{n}项的平方和为:{square_sum(n)}。")
【终端输出】
数列前3项的平方和为:14。
【代码解析】
if n == 1:
这是一个条件语句,判断 n 是否等于 1。
return 1
如果 n 等于 1,则直接返回 1,终止递归
。
else:
如果 n 不等于 1,则执行下面的语句块。
return n**2 + square_sum(n-1)
这是一个递归语句。
该语句计算当前项的平方 n**2
,并将其与前 n-1
项的平方和 square_sum(n-1)
相加,作为递归函数的返回值。
【递归过程解析】
假设我们输入的 n 的值为 3,即计算数列前 3 项的平方和,程序执行的过程如下:
第一次调用 square_sum(3)
:
n 不等于 1,执行 else 部分的代码。
返回 3**2 + square_sum(2)
。
第二次调用 square_sum(2
)`:
n 不等于 1,执行 else 部分的代码。
返回 2**2 + square_sum(1)
。
第三次调用 square_sum(1)
:
n 等于 1,执行 if 部分的代码。
返回 1
。
回到第二次调用的结果,此时返回的值为 2**2 + square_sum(1)
,即 4 + 1 = 5。
回到第一次调用的结果,此时返回的值为 3**2 + square_sum(2)
,即 9 + 5 = 14。
【总结】
递归的执行过程是不断调用自身。
每次递归都会将问题规模减小,直到达到递归终止条件,然后逐层返回结果,并通过相加得到最终的结果。
我们可以把递归理解成是一个先调用
,后返回
的过程。
需要注意的是,递归函数需要有递归终止条件,否则会导致无限递归并最终引发栈溢出错误。在这个示例中,当 n 等于1时,递归终止,直接返回结果。
递归函数相关知识可参考下面的链接:
58.Python的递归函数
【基础代码】
n = int(input("请输入一个正整数:"))
square_sum =0
for i in range(1, n+1):
square_sum = square_sum + i*i
print(f"n={i}时,平方和为 {square_sum}。")
【自定义函数代码】
def square_sum(n):
result = 0
for i in range(1, n+1):
result += i ** 2
return result
n = int(input("请输入数列的项数:"))
print(f"数列前{n}项的平方和为:{square_sum(n)}。")
【递归函数代码】
def square_sum(n):
if n == 1:
return 1
else:
return n**2 + square_sum(n-1)
n = int(input("请输入数列的项数:"))
print(f"数列前{n}项的平方和为:{square_sum(n)}")