一、場景 1:基礎兩數求和(新手入門)
適用於已知兩個數字或手動輸入兩個數字的簡單求和場景,是最基礎的數字求和方式。
完整代碼示例
# 方式1:直接定義數字求和
num1 = 10
num2 = 25
sum_result = num1 + num2
print(f"數字{num1}和{num2}的和:{sum_result}") # 輸出:數字10和25的和:35
# 方式2:手動輸入兩個數字求和(處理輸入類型轉換)
print("\n--- 手動輸入求和 ---")
try:
# input()獲取的是字符串,需轉為浮點數(支持小數)
input1 = float(input("請輸入第一個數字:"))
input2 = float(input("請輸入第二個數字:"))
input_sum = input1 + input2
print(f"你輸入的兩個數之和:{input_sum}")
except ValueError:
# 處理非數字輸入的異常
print("錯誤:請輸入有效的數字(整數/小數)!")
關鍵説明
input()函數獲取的用户輸入是字符串類型,必須通過int()/float()轉為數字類型才能求和;- 加入
try-except異常處理,避免用户輸入非數字(如字母、符號)導致程序崩潰; - 浮點數求和可能存在精度問題(如
0.1+0.2=0.30000000000000004),若需高精度可使用decimal模塊(見場景 5)。
二、場景 2:列表 / 元組等可迭代對象求和(最常用)
適用於批量數字(如列表、元組、集合)的求和,Python 內置sum()函數是最優選擇,簡潔高效。
完整代碼示例
# 1. 列表求和(最常用)
num_list = [1, 2, 3, 4, 5, 6]
list_sum = sum(num_list)
print(f"列表{num_list}的和:{list_sum}") # 輸出:列表[1,2,3,4,5,6]的和:21
# 2. 元組求和
num_tuple = (10, 20, 30, 40)
tuple_sum = sum(num_tuple)
print(f"元組{num_tuple}的和:{tuple_sum}") # 輸出:元組(10,20,30,40)的和:100
# 3. 求和時指定初始值(默認初始值為0)
num_set = {1.5, 2.5, 3.5}
set_sum = sum(num_set, 10) # 初始值10,總和=10+1.5+2.5+3.5=17.5
print(f"集合{num_set}(初始值10)的和:{set_sum}") # 輸出:集合{1.5,2.5,3.5}(初始值10)的和:17.5
關鍵説明
sum(iterable, start=0)是 Python 內置函數,iterable為可迭代對象(列表、元組、集合等),start為求和初始值(可選);sum()效率遠高於手動循環求和(底層由 C 實現),優先使用;- 注意:
sum()僅支持數字類型,不能直接求和字符串列表(如sum(["1","2"])會報錯)。
三、場景 3:手動輸入多個數求和(不定數量)
適用於用户輸入任意數量數字(用空格 / 逗號分隔)的求和場景,需先拆分輸入內容再求和。
完整代碼示例
print("\n--- 輸入多個數字求和(空格分隔) ---")
try:
# 接收用户輸入(如:1 2 3 4 5)
input_str = input("請輸入多個數字(空格分隔):")
# 拆分字符串為列表,轉為浮點數
num_list = [float(num) for num in input_str.split()]
# 求和
total = sum(num_list)
print(f"輸入的數字列表:{num_list}")
print(f"總和:{total}")
except ValueError:
print("錯誤:請輸入有效的數字,並用空格分隔!")
# 擴展:逗號分隔的輸入(如:1,2,3,4)
print("\n--- 輸入多個數字求和(逗號分隔) ---")
try:
input_str2 = input("請輸入多個數字(逗號分隔):")
num_list2 = [float(num.strip()) for num in input_str2.split(",")]
total2 = sum(num_list2)
print(f"輸入的數字列表:{num_list2}")
print(f"總和:{total2}")
except ValueError:
print("錯誤:請輸入有效的數字,並用逗號分隔!")
關鍵説明
split():默認按空格拆分字符串,split(",")按逗號拆分;strip():去除每個數字字符串的首尾空格(如處理輸入"1 , 2 , 3"的情況);- 列表推導式
[float(num) for num in ...]快速將字符串列表轉為數字列表。
四、場景 4:帶條件的數字求和
適用於僅對滿足特定條件的數字求和(如偶數、奇數、大於 10 的數),結合列表推導式 / 生成器表達式實現。
完整代碼示例
# 示例數據
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 1. 求偶數的和
even_sum = sum(num for num in nums if num % 2 == 0)
print(f"列表{nums}中偶數的和:{even_sum}") # 輸出:30
# 2. 求奇數的和
odd_sum = sum(num for num in nums if num % 2 != 0)
print(f"列表{nums}中奇數的和:{odd_sum}") # 輸出:25
# 3. 求大於5且小於10的數的和
range_sum = sum(num for num in nums if 5 < num < 10)
print(f"列表{nums}中大於5且小於10的數的和:{range_sum}") # 輸出:36(6+7+8+9)
# 4. 求列表中正數的和(處理含負數的場景)
nums_with_neg = [-5, -2, 0, 3, 7, 10]
positive_sum = sum(num for num in nums_with_neg if num > 0)
print(f"列表{nums_with_neg}中正數的和:{positive_sum}") # 輸出:20
關鍵説明
- 生成器表達式
num for num in nums if 條件比列表推導式更節省內存(無需創建臨時列表); - 條件可靈活組合(如
num > 0 and num % 3 == 0),滿足複雜求和需求; - 若條件邏輯複雜,可封裝為函數(如
def is_valid(num): return num > 5 and num % 2 == 0),再用sum(num for num in nums if is_valid(num))。
五、場景 5:大數 / 高精度求和
Python 天然支持大整數求和(無溢出問題),但浮點數求和可能有精度誤差,需用decimal模塊保證高精度。
完整代碼示例
# 1. 大整數求和(Python天然支持,無需額外處理)
big_num1 = 123456789012345678901234567890
big_num2 = 987654321098765432109876543210
big_sum = big_num1 + big_num2
print(f"\n大整數求和:{big_num1} + {big_num2} = {big_sum}")
# 輸出:1111111110111111111011111111100
# 2. 高精度浮點數求和(解決0.1+0.2≠0.3的問題)
from decimal import Decimal, getcontext
# 設置精度(保留10位小數)
getcontext().prec = 10
# 普通浮點數求和(有精度誤差)
normal_sum = 0.1 + 0.2
print(f"普通浮點數求和:0.1 + 0.2 = {normal_sum}") # 輸出:0.30000000000000004
# 高精度求和
decimal_sum = Decimal("0.1") + Decimal("0.2")
print(f"高精度求和:0.1 + 0.2 = {decimal_sum}") # 輸出:0.3
關鍵説明
- Python 的 int 類型無大小限制,可直接求和任意大整數;
decimal.Decimal需傳入字符串形式的數字(而非浮點數),才能保證高精度;getcontext().prec設置全局精度,根據需求調整(如財務計算設為 2 位)。
六、場景 6:迭代器 / 生成器求和(節省內存)
對於超大數據集(如百萬級數字),直接生成列表會佔用大量內存,用生成器迭代求和更高效。
完整代碼示例
# 示例:求1到100萬的和(用生成器,不創建臨時列表)
def num_generator(start, end):
"""生成從start到end的數字生成器"""
current = start
while current <= end:
yield current
current += 1
# 求和1到100萬
total = sum(num_generator(1, 1000000))
print(f"\n1到100萬的和:{total}") # 輸出:500000500000
# 等價於sum(range(1, 1000001))(range本身就是迭代器,節省內存)
total2 = sum(range(1, 1000001))
print(f"用range求和1到100萬:{total2}") # 輸出:500000500000
關鍵説明
- 生成器(
yield)和range()都是惰性迭代,僅在需要時生成數字,內存佔用幾乎可忽略; - 對於文件中的海量數字(如每行一個數字),可逐行讀取求和,避免加載整個文件到內存:
# 讀取文件中的數字求和
total_file = 0
with open("nums.txt", "r", encoding="utf-8") as f:
for line in f:
num = float(line.strip())
total_file += num
print(f"文件中數字的和:{total_file}")
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。