一、場景 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}")