2025年9月27日 星期六

[水井USR創新教材]Python一下採用魚菜共生技術-函式

 


過去實作的魚菜共生技術:

以下範例是使用Grok AI產生:

範例一:函式使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import math
import random

def aquaponics_simulation(months, area=3.3058, base_emission=1.5, base_water=0.5):
    """
    模擬魚菜共生系統的減碳與節水數據(每月)。
    參數:
        months: 模擬月數
        area: 魚池面積(平方米,預設 1 分 ≈ 3.3058 m²)
        base_emission: 每平方米年排放量(kg CO₂e,轉為月均)
        base_water: 每平方米月用水量(m³)
    返回:
        生成器,產生 (減碳量, 節水量) 元組
    """
    tech_carbon_reduction = 0.85  # 魚菜共生減碳效果(減少 15%)
    tech_water_saving = 0.9       # 魚菜共生節水效果(減少 10%)
    monthly_emission = base_emission / 12  # 月均排放量
    
    for month in range(1, months + 1):
        # 季節性波動:夏季(6-8 月)增加 20%
        seasonal_factor = 1.2 if 6 <= (month % 12 or 12) <= 8 else 1.0
        # 計算減碳量(kg CO₂e)
        carbon = (monthly_emission * area * seasonal_factor * tech_carbon_reduction +
                  random.uniform(-5, 5))
        # 計算節水量(m³)
        water = (base_water * area * seasonal_factor * tech_water_saving +
                 random.uniform(-0.05, 0.05))
        yield round(carbon, 2), round(water, 2)

# 模擬 12 個月數據
simulator = aquaponics_simulation(12)
monthly_data = [(carbon, water) for carbon, water in simulator]  # 串列生成式收集數據

# 輸出結果
print("水井村魚菜共生每月減碳與節水數據:")
for i, (carbon, water) in enumerate(monthly_data, 1):
    print(f"第 {i} 月 - 減碳量: {carbon} kg CO₂e, 節水量: {water} m³")

執行結果:
水井村魚菜共生每月減碳與節水數據:
第 1 月 - 減碳量: 4.61 kg CO₂e, 節水量: 1.45 m³
第 2 月 - 減碳量: 2.21 kg CO₂e, 節水量: 1.51 m³
第 3 月 - 減碳量: 1.12 kg CO₂e, 節水量: 1.48 m³
第 4 月 - 減碳量: -0.71 kg CO₂e, 節水量: 1.5 m³
第 5 月 - 減碳量: 5.21 kg CO₂e, 節水量: 1.45 m³
第 6 月 - 減碳量: -1.18 kg CO₂e, 節水量: 1.74 m³
第 7 月 - 減碳量: 5.01 kg CO₂e, 節水量: 1.8 m³
第 8 月 - 減碳量: 4.25 kg CO₂e, 節水量: 1.76 m³
第 9 月 - 減碳量: 2.44 kg CO₂e, 節水量: 1.46 m³
第 10 月 - 減碳量: 2.55 kg CO₂e, 節水量: 1.45 m³
第 11 月 - 減碳量: 3.25 kg CO₂e, 節水量: 1.45 m³
第 12 月 - 減碳量: -3.3 kg CO₂e, 節水量: 1.47 m³

範例二:採用遞迴
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import math
import random

def aquaponics_recursive(months, current_month=1, area=3.3058, base_emission=1.5, base_water=0.5):
    """
    遞迴函式:模擬魚菜共生系統的減碳與節水數據(每月)。
    參數:
        months: 總模擬月數
        current_month: 當前月份(遞迴追蹤)
        area: 魚池面積(平方米,預設 1 分 ≈ 3.3058 m²)
        base_emission: 每平方米年排放量(kg CO₂e,轉為月均)
        base_water: 每平方米月用水量(m³)
    返回:
        生成器,產生 (減碳量, 節水量) 元組
    """
    if current_month > months:
        return  # 遞迴終止條件:超過指定月份

    # 季節性波動:夏季(6-8 月)增加 20%
    seasonal_factor = 1.2 if 6 <= (current_month % 12 or 12) <= 8 else 1.0
    tech_carbon_reduction = 0.95  # 魚菜共生減碳效果(減少 5%)
    tech_water_saving = 0.9       # 魚菜共生節水效果(減少 10%)
    monthly_emission = base_emission / 12  # 月均排放量

    # 計算當月減碳量(kg CO₂e)與節水量(m³)
    carbon = (monthly_emission * area * seasonal_factor * tech_carbon_reduction +
              random.uniform(-5, 5))
    water = (base_water * area * seasonal_factor * tech_water_saving +
             random.uniform(-0.05, 0.05))

    # 產生當前月份數據
    yield round(carbon, 2), round(water, 2)

    # 遞迴呼叫下一月份
    yield from aquaponics_recursive(months, current_month + 1, area, base_emission, base_water)

# 模擬 12 個月數據
simulator = aquaponics_recursive(12)
monthly_data = [(carbon, water) for carbon, water in simulator]  # 串列生成式收集數據

# 輸出結果
print("水井村魚菜共生每月減碳與節水數據:")
for i, (carbon, water) in enumerate(monthly_data, 1):
    print(f"第 {i} 月 - 減碳量: {carbon} kg CO₂e, 節水量: {water} m³")

執行結果:
水井村魚菜共生每月減碳與節水數據:
第 1 月 - 減碳量: -0.09 kg CO₂e, 節水量: 1.53 m³
第 2 月 - 減碳量: -3.0 kg CO₂e, 節水量: 1.48 m³
第 3 月 - 減碳量: 2.79 kg CO₂e, 節水量: 1.5 m³
第 4 月 - 減碳量: 0.02 kg CO₂e, 節水量: 1.49 m³
第 5 月 - 減碳量: 3.88 kg CO₂e, 節水量: 1.5 m³
第 6 月 - 減碳量: -2.87 kg CO₂e, 節水量: 1.8 m³
第 7 月 - 減碳量: 3.24 kg CO₂e, 節水量: 1.75 m³
第 8 月 - 減碳量: -0.6 kg CO₂e, 節水量: 1.75 m³
第 9 月 - 減碳量: -2.14 kg CO₂e, 節水量: 1.44 m³
第 10 月 - 減碳量: -1.64 kg CO₂e, 節水量: 1.45 m³
第 11 月 - 減碳量: 4.4 kg CO₂e, 節水量: 1.52 m³
第 12 月 - 減碳量: 1.04 kg CO₂e, 節水量: 1.51 m³

範例三:採用裝飾器
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import math
import random
import functools
import logging

# 設定日誌
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s')

def log_and_validate(func):
    """
    裝飾器:記錄模擬數據並驗證非負值。
    """
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        for carbon, water in func(*args, **kwargs):
            # 驗證數據:確保減碳量和節水量不為負
            carbon = max(0, carbon)
            water = max(0, water)
            # 記錄日誌
            logging.info(f"Month {kwargs.get('current_month', 1)}: Carbon = {carbon} kg CO₂e, Water = {water} m³")
            yield carbon, water
    return wrapper

@log_and_validate
def aquaponics_recursive(months, current_month=1, area=3.3058, base_emission=1.5, base_water=0.5):
    """
    遞迴函式:模擬魚菜共生系統的減碳與節水數據(每月)。
    參數:
        months: 總模擬月數
        current_month: 當前月份(遞迴追蹤)
        area: 魚池面積(平方米,預設 1 分 ≈ 3.3058 m²)
        base_emission: 每平方米年排放量(kg CO₂e,轉為月均)
        base_water: 每平方米月用水量(m³)
    返回:
        生成器,產生 (減碳量, 節水量) 元組
    """
    if current_month > months:
        return  # 遞迴終止條件:超過指定月份

    # 季節性波動:夏季(6-8 月)增加 20%
    seasonal_factor = 1.2 if 6 <= (current_month % 12 or 12) <= 8 else 1.0
    tech_carbon_reduction = 0.95  # 魚菜共生減碳效果(減少 5%)
    tech_water_saving = 0.9       # 魚菜共生節水效果(減少 10%)
    monthly_emission = base_emission / 12  # 月均排放量

    # 計算當月減碳量(kg CO₂e)與節水量(m³)
    carbon = (monthly_emission * area * seasonal_factor * tech_carbon_reduction +
              random.uniform(-5, 5))
    water = (base_water * area * seasonal_factor * tech_water_saving +
             random.uniform(-0.05, 0.05))

    # 產生當前月份數據
    yield round(carbon, 2), round(water, 2)

    # 遞迴呼叫下一月份
    yield from aquaponics_recursive(months, current_month + 1, area, base_emission, base_water)

# 模擬 12 個月數據
simulator = aquaponics_recursive(12)
monthly_data = [(carbon, water) for carbon, water in simulator]  # 串列生成式收集數據

# 輸出結果
print("水井村魚菜共生每月減碳與節水數據:")
for i, (carbon, water) in enumerate(monthly_data, 1):
    print(f"第 {i} 月 - 減碳量: {carbon} kg CO₂e, 節水量: {water} m³")

執行結果:
2025-09-27 20:49:40,437 - Month 1: Carbon = 3.41 kg CO₂e, Water = 1.44 m³
2025-09-27 20:49:40,449 - Month 1: Carbon = 0 kg CO₂e, Water = 1.5 m³
2025-09-27 20:49:40,453 - Month 1: Carbon = 0 kg CO₂e, Water = 1.5 m³
2025-09-27 20:49:40,459 - Month 1: Carbon = 4.2 kg CO₂e, Water = 1.46 m³
2025-09-27 20:49:40,465 - Month 1: Carbon = 4.2 kg CO₂e, Water = 1.46 m³
2025-09-27 20:49:40,470 - Month 1: Carbon = 4.2 kg CO₂e, Water = 1.46 m³
2025-09-27 20:49:40,476 - Month 1: Carbon = 4.37 kg CO₂e, Water = 1.5 m³
2025-09-27 20:49:40,482 - Month 1: Carbon = 4.37 kg CO₂e, Water = 1.5 m³
2025-09-27 20:49:40,488 - Month 1: Carbon = 4.37 kg CO₂e, Water = 1.5 m³
2025-09-27 20:49:40,492 - Month 1: Carbon = 4.37 kg CO₂e, Water = 1.5 m³
2025-09-27 20:49:40,498 - Month 1: Carbon = 0 kg CO₂e, Water = 1.51 m³
2025-09-27 20:49:40,503 - Month 1: Carbon = 0 kg CO₂e, Water = 1.51 m³
2025-09-27 20:49:40,509 - Month 1: Carbon = 0 kg CO₂e, Water = 1.51 m³
2025-09-27 20:49:40,519 - Month 1: Carbon = 0 kg CO₂e, Water = 1.51 m³
2025-09-27 20:49:40,524 - Month 1: Carbon = 0 kg CO₂e, Water = 1.51 m³
2025-09-27 20:49:40,531 - Month 1: Carbon = 0 kg CO₂e, Water = 1.82 m³
2025-09-27 20:49:40,537 - Month 1: Carbon = 0 kg CO₂e, Water = 1.82 m³
2025-09-27 20:49:40,542 - Month 1: Carbon = 0 kg CO₂e, Water = 1.82 m³
2025-09-27 20:49:40,547 - Month 1: Carbon = 0 kg CO₂e, Water = 1.82 m³
2025-09-27 20:49:40,553 - Month 1: Carbon = 0 kg CO₂e, Water = 1.82 m³
2025-09-27 20:49:40,559 - Month 1: Carbon = 0 kg CO₂e, Water = 1.82 m³
2025-09-27 20:49:40,565 - Month 1: Carbon = 0 kg CO₂e, Water = 1.79 m³
2025-09-27 20:49:40,570 - Month 1: Carbon = 0 kg CO₂e, Water = 1.79 m³
2025-09-27 20:49:40,575 - Month 1: Carbon = 0 kg CO₂e, Water = 1.79 m³
2025-09-27 20:49:40,581 - Month 1: Carbon = 0 kg CO₂e, Water = 1.79 m³
2025-09-27 20:49:40,586 - Month 1: Carbon = 0 kg CO₂e, Water = 1.79 m³
2025-09-27 20:49:40,593 - Month 1: Carbon = 0 kg CO₂e, Water = 1.79 m³
2025-09-27 20:49:40,599 - Month 1: Carbon = 0 kg CO₂e, Water = 1.79 m³
2025-09-27 20:49:40,604 - Month 1: Carbon = 0.01 kg CO₂e, Water = 1.77 m³
2025-09-27 20:49:40,610 - Month 1: Carbon = 0.01 kg CO₂e, Water = 1.77 m³
2025-09-27 20:49:40,618 - Month 1: Carbon = 0.01 kg CO₂e, Water = 1.77 m³
2025-09-27 20:49:40,624 - Month 1: Carbon = 0.01 kg CO₂e, Water = 1.77 m³
2025-09-27 20:49:40,632 - Month 1: Carbon = 0.01 kg CO₂e, Water = 1.77 m³
2025-09-27 20:49:40,638 - Month 1: Carbon = 0.01 kg CO₂e, Water = 1.77 m³
2025-09-27 20:49:40,642 - Month 1: Carbon = 0.01 kg CO₂e, Water = 1.77 m³
2025-09-27 20:49:40,649 - Month 1: Carbon = 0.01 kg CO₂e, Water = 1.77 m³
2025-09-27 20:49:40,654 - Month 1: Carbon = 4.98 kg CO₂e, Water = 1.46 m³
2025-09-27 20:49:40,659 - Month 1: Carbon = 4.98 kg CO₂e, Water = 1.46 m³
2025-09-27 20:49:40,665 - Month 1: Carbon = 4.98 kg CO₂e, Water = 1.46 m³
2025-09-27 20:49:40,671 - Month 1: Carbon = 4.98 kg CO₂e, Water = 1.46 m³
2025-09-27 20:49:40,677 - Month 1: Carbon = 4.98 kg CO₂e, Water = 1.46 m³
2025-09-27 20:49:40,682 - Month 1: Carbon = 4.98 kg CO₂e, Water = 1.46 m³
2025-09-27 20:49:40,688 - Month 1: Carbon = 4.98 kg CO₂e, Water = 1.46 m³
2025-09-27 20:49:40,694 - Month 1: Carbon = 4.98 kg CO₂e, Water = 1.46 m³
2025-09-27 20:49:40,699 - Month 1: Carbon = 4.98 kg CO₂e, Water = 1.46 m³
2025-09-27 20:49:40,704 - Month 1: Carbon = 0 kg CO₂e, Water = 1.48 m³
2025-09-27 20:49:40,710 - Month 1: Carbon = 0 kg CO₂e, Water = 1.48 m³
2025-09-27 20:49:40,715 - Month 1: Carbon = 0 kg CO₂e, Water = 1.48 m³
2025-09-27 20:49:40,720 - Month 1: Carbon = 0 kg CO₂e, Water = 1.48 m³
2025-09-27 20:49:40,726 - Month 1: Carbon = 0 kg CO₂e, Water = 1.48 m³
2025-09-27 20:49:40,732 - Month 1: Carbon = 0 kg CO₂e, Water = 1.48 m³
2025-09-27 20:49:40,737 - Month 1: Carbon = 0 kg CO₂e, Water = 1.48 m³
2025-09-27 20:49:40,743 - Month 1: Carbon = 0 kg CO₂e, Water = 1.48 m³
2025-09-27 20:49:40,749 - Month 1: Carbon = 0 kg CO₂e, Water = 1.48 m³
2025-09-27 20:49:40,753 - Month 1: Carbon = 0 kg CO₂e, Water = 1.48 m³
2025-09-27 20:49:40,759 - Month 1: Carbon = 0 kg CO₂e, Water = 1.52 m³
2025-09-27 20:49:40,764 - Month 1: Carbon = 0 kg CO₂e, Water = 1.52 m³
2025-09-27 20:49:40,770 - Month 1: Carbon = 0 kg CO₂e, Water = 1.52 m³
2025-09-27 20:49:40,776 - Month 1: Carbon = 0 kg CO₂e, Water = 1.52 m³
2025-09-27 20:49:40,781 - Month 1: Carbon = 0 kg CO₂e, Water = 1.52 m³
2025-09-27 20:49:40,787 - Month 1: Carbon = 0 kg CO₂e, Water = 1.52 m³
2025-09-27 20:49:40,792 - Month 1: Carbon = 0 kg CO₂e, Water = 1.52 m³
2025-09-27 20:49:40,798 - Month 1: Carbon = 0 kg CO₂e, Water = 1.52 m³
2025-09-27 20:49:40,803 - Month 1: Carbon = 0 kg CO₂e, Water = 1.52 m³
2025-09-27 20:49:40,808 - Month 1: Carbon = 0 kg CO₂e, Water = 1.52 m³
2025-09-27 20:49:40,814 - Month 1: Carbon = 0 kg CO₂e, Water = 1.52 m³
2025-09-27 20:49:40,819 - Month 1: Carbon = 0.84 kg CO₂e, Water = 1.53 m³
2025-09-27 20:49:40,824 - Month 1: Carbon = 0.84 kg CO₂e, Water = 1.53 m³
2025-09-27 20:49:40,830 - Month 1: Carbon = 0.84 kg CO₂e, Water = 1.53 m³
2025-09-27 20:49:40,837 - Month 1: Carbon = 0.84 kg CO₂e, Water = 1.53 m³
2025-09-27 20:49:40,841 - Month 1: Carbon = 0.84 kg CO₂e, Water = 1.53 m³
2025-09-27 20:49:40,847 - Month 1: Carbon = 0.84 kg CO₂e, Water = 1.53 m³
2025-09-27 20:49:40,852 - Month 1: Carbon = 0.84 kg CO₂e, Water = 1.53 m³
2025-09-27 20:49:40,858 - Month 1: Carbon = 0.84 kg CO₂e, Water = 1.53 m³
2025-09-27 20:49:40,863 - Month 1: Carbon = 0.84 kg CO₂e, Water = 1.53 m³
2025-09-27 20:49:40,868 - Month 1: Carbon = 0.84 kg CO₂e, Water = 1.53 m³
2025-09-27 20:49:40,874 - Month 1: Carbon = 0.84 kg CO₂e, Water = 1.53 m³
2025-09-27 20:49:40,880 - Month 1: Carbon = 0.84 kg CO₂e, Water = 1.53 m³
水井村魚菜共生每月減碳與節水數據:
第 1 月 - 減碳量: 3.41 kg CO₂e, 節水量: 1.44 m³
第 2 月 - 減碳量: 0 kg CO₂e, 節水量: 1.5 m³
第 3 月 - 減碳量: 4.2 kg CO₂e, 節水量: 1.46 m³
第 4 月 - 減碳量: 4.37 kg CO₂e, 節水量: 1.5 m³
第 5 月 - 減碳量: 0 kg CO₂e, 節水量: 1.51 m³
第 6 月 - 減碳量: 0 kg CO₂e, 節水量: 1.82 m³
第 7 月 - 減碳量: 0 kg CO₂e, 節水量: 1.79 m³
第 8 月 - 減碳量: 0.01 kg CO₂e, 節水量: 1.77 m³
第 9 月 - 減碳量: 4.98 kg CO₂e, 節水量: 1.46 m³
第 10 月 - 減碳量: 0 kg CO₂e, 節水量: 1.48 m³
第 11 月 - 減碳量: 0 kg CO₂e, 節水量: 1.52 m³
第 12 月 - 減碳量: 0.84 kg CO₂e, 節水量: 1.53 m³



沒有留言:

張貼留言