【目錄】
文章目錄
- 101.for循環語句練習題-求數列前n項的平方和
- 1. 求數列前n項的平方和
- 2. 冪函數
- 3. `f` 字符串格式化語法
- 4. 基礎代碼
- 5. 自定義函數代碼
- 6. 遞歸函數代碼
- 7. 代碼總結
【正文】
101.for循環語句練習題-求數列前n項的平方和
1. 求數列前n項的平方和
【目標任務】
已知一個數列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
2. 冪函數
【使用 **
符號來表示冪函數】
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
是指數。
3. 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格式化字符串
4. 基礎代碼
求一個數列前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**2print(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語句的位置哦!!!
5. 自定義函數代碼
【代碼示例】
def square_sum(n):result = 0for i in range(1, n+1):result += i ** 2return resultn = 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
是參數。
6. 遞歸函數代碼
【代碼示例】
def square_sum(n):if n == 1:return 1else: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的遞歸函數
7. 代碼總結
【基礎代碼】
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 = 0for i in range(1, n+1):result += i ** 2return resultn = int(input("請輸入數列的項數:"))
print(f"數列前{n}項的平方和為:{square_sum(n)}。")
【遞歸函數代碼】
def square_sum(n):if n == 1:return 1else:return n**2 + square_sum(n-1)n = int(input("請輸入數列的項數:"))
print(f"數列前{n}項的平方和為:{square_sum(n)}")