2019年4月27日 星期六


大鵬網路心聞的報導:
19568月政府為了擴建日治時期的公館機場(清泉崗),徵收大肚山台地1400公頃,並將附近大雅、沙鹿、清水及神岡等472戶集體遷村到新社、石岡仙塘坪、埔里大坪頂及魚池等地,就是所謂疏開
在大肚山台地472戶移民大遷徙,其中有一部分遷入現在新社區,而有的攜家帶眷扶老攜幼的千里跋涉,遷移到埔里大坪頂居民就屬於這一族群,他們集體走了2天的路才到達現在的太平國小,政府為他們搭建了39間竹筒屋居住。
在太平國小附近,住在竹筒屋的移民族群,大約在一、二年之後就搬去村落裡了。因為那裏一戶可以分配到約90坪的房子 。大概有300戶一模一樣的房子,坐落在六條狹小的巷弄之間,當地人稱他「移民仔」。這群移民仔居住在像眷村般的整齊房舍裡。

但他們都是農民,都能辛勤務農,因大坪頂地勢略高,海拔650~700公尺,溫度比埔里盆地略低2度左右,所以白蘿蔔、苦瓜、絲瓜都能襖期收成。近幾年更因百香果的種植成功,打造了聞名全台的百香果王國。

影音,請點此連結觀看。感謝大鵬網路心聞 製播

https://www.facebook.com/2158602054453575/videos/179612949582160/

2019年4月20日 星期六

用Python撰寫「用戶定義的HTTP回呼」結合IFTTT服務在LINE群組報導百香果交易情形


IFTTT以及程式設計的說明請參考下列文件:

1. ifttt 讓你手上的網路服務比別人聰明,讓網際網路自動做很多事

2.IFTTT Android iOS 入門教學:如果明天下雨請今日提醒我



4.https://medium.com/@yanweiliu/匯率的line機器人-使用python-ifttt-傳送最新匯率資訊-fa0f59c20ce8

import requests
import json
def send_ifttt(v1,v2,v3):   
    url = ('https://maker.ifttt.com/trigger/觸發名稱可以看上圖toLINE/with/' +
          'key/設定您的KEY' +
          '?value1='+str(v1)+
          '&value2='+str(v2)+
          '&value3='+str(v3))
    r = requests.get(url)     
    if r.text[:5] == 'Congr':  
        print('已傳送 ('+str(v1)+','+str(v2)+','+str(v3)+') 到 Line')
    return r.text
import requests

r = requests.get('http://data.coa.gov.tw/Service/OpenData/FromM/FarmTransData.aspx')
text = json.loads(r.text)
cnt = 0
totalPrice = 0
totalVolumn = 0
for row in text:
    if '百香果' in row['作物名稱']:
        transactionDate = row['交易日期']
        totalPrice = totalPrice + row['平均價'] * row['交易量']
        totalVolumn = totalVolumn + row['交易量']
averagePrice = totalPrice / totalVolumn
ret = send_ifttt(transactionDate, averagePrice, totalVolumn)  
print('IFTTT 的回應訊息:',ret)  

執行結果:

2019年4月15日 星期一

鋪黑網 防雜草 04/11



    實驗場域埔里合成里的百香果不斷長大,果苗週邊的野草也不甘示弱,長成一片綠油油的,生機無限啊。我兀自陶醉在渾然天成的綠意中,卻被果園主人的一番話打醒,他說:以前除草劑一噴就可解決,現在為了配合無毒栽培得人工除草,把自己累得腰酸背痛的,說來實在無力繼續應付這些鋤不盡的草。」令我我不得不立刻回到現實,共同面對這惱人的一片雜草。
果苗邊的雜草部分已經除去

果苗邊的雜草部分已經除去

  此行,我們一群人正是為解決此問題而來。學務長已擬好計畫,決定協助農民鋪設黑網防止雜草生長。野草中竟有多種可食植物,如野莧、龍葵等,想到鋪設黑網他們就不得生長,竟有幾分失落。
龍葵與鳥仔莧

龍葵與鳥仔莧

   鋪設前我們先拔除果苗周邊的雜草,忍不住還是摘取些野菜留存。
採摘下的龍葵

一起努力拔草

野草根系無比壯碩 顯示土壤肥沃

   要在這一大片土地鋪設黑網,還是要花不少時間。中途下起好幾場雨,忙著進進出出躲雨,誤了不少工作。鄭鳳池夫婦一家和學務長及宗平,依然氣定神閒,繼續工作。
開始鋪黑網

鋪好撲滿 阻擋陽光進入

    沒有認真工作,偷偷溜去拍攝周邊風景。油桐樹開花了,紫色藿香薊開得好美,多的不得了的昭和草就不提了。
巧遇油桐花開

紫花藿香薊也挺美


        終於鋪設了一半的土地,晚了,得先回家。明天再來。
隔日終於完工了


2019年4月7日 星期日

超好用的字典,用鍵查值的觀念來查百香果的分級標準

字典的觀念和集合很像,但以鍵查值來存取字典內的元素內容,因此字典內元素以 鍵:值 的形態,存在字典中,在字典內的每個元素的 鍵 不可以重複,但 值 可以
範例一:

passionFruit={
    '特級':{'同一品種', '成熟適度', '果形完整', '成熟適度', '色澤優良','無病蟲害及其他傷害'},
    '優級':{'同一品種','成熟尚適度','果形尚完整','色澤良好','無嚴重病蟲害及其他傷害'},
    '良級':{'品質次於優級品','但有商品價值者'},
    }

print(passionFruit['特級'])
print(passionFruit['優級'])
print(passionFruit['良級'])

執行結果:
{'無病蟲害及其他傷害', '成熟適度', '同一品種', '果形完整', '色澤優良'}
{'成熟尚適度', '色澤良好', '無嚴重病蟲害及其他傷害', '同一品種', '果形尚完整'}
{'品質次於優級品', '但有商品價值者'}

範例二:
passionFruit={
    '特級':{'同一品種', '成熟適度', '果形完整', '成熟適度', '色澤優良','無病蟲害及其他傷害'},
    '優級':{'同一品種','成熟尚適度','果形尚完整','色澤良好','無嚴重病蟲害及其他傷害'},
    '良級':{'品質次於優級品','但有商品價值者'},
    }

print('同一品種' in passionFruit['特級'])
print('同一品種' in passionFruit['優級'])
print('同一品種' in passionFruit['良級'])

執行結果:
True
True
False

一堆不可以重複以及改變值的資料的集合可用來百香果分級判斷

集合中元素具備沒有順序的特性,因此無法像串列(List)一樣可以用索引算符或切片方式來存取,當然不能使用串接算符+和重複算符*,集合常用的算符是in和not in,用來判斷元素是否在集合中。

範例一:集合會過濾掉重複的元素
passionFruit={'同一品種', '成熟適度', '果形完整', '成熟適度', '色澤優良','無病蟲害及其他傷害'}
print(passionFruit)

執行結果:
{'同一品種', '成熟適度', '色澤優良', '果形完整', '無病蟲害及其他傷害'}

範例二:把字串變成集合,單字變成集合內的元素,重複的單字也不見了,而且集合是沒有次序
passionFruit=set('百香果特級品是同一品種,成熟適度,果形完整,色澤優良,無病蟲害及其他傷害')
print(passionFruit)

執行結果:
{'特', '蟲', '澤', '同', '傷', '無', '其', ',', '色', '是', '百', '一', '香', '熟', '果', '及', '形', '適', '成', '病', '他', '良', '級', '優', '完', '品', '種', '害', '整', '度'}

範例三:判斷是否為集合的元素
passionFruit={'同一品種', '成熟適度', '果形完整',  '色澤優良','無病蟲害及其他傷害'}

print('果形完整' in passionFruit)
print('果粒超大' in passionFruit)
print('果汁超甜' not in passionFruit)

執行結果:
True
False
True


2019年4月4日 星期四

百香果分級標準居然可以用不可更改的元組來表示

串列使用中括號[]來當容器,元組(Tuple)則用小括號()來表示。為何有了串列,何需要元組,這是因為在許多場合下,有些資料是不可以改變。

範例一:用小括號()來表示元組(Tuple)

PassionFruit=(('大(L)','80以上'),('中(M)','60~80'),('小(L)','未達60'))

print(PassionFruit)

執行結果:

(('大(L)', '80以上'), ('中(M)', '60~80'), ('小(L)', '未達60'))

範例二:讀取元組(Tuple)使用中括號[],不是使用小括號
PassionFruit=(('大(L)','80以上'),('中(M)','60~80'),('小(L)','未達60'))

print(PassionFruit[0])

執行結果:
('大(L)', '80以上')

範例三:元組(Tuple)不可以更改
PassionFruit=(('大(L)','80以上'),('中(M)','60~80'),('小(L)','未達60'))

PassionFruit[0]=[]

print(PassionFruit)

執行結果:
Traceback (most recent call last):
  File "C:/Users/cheng-min/AppData/Local/Programs/Python/Python311/test6.py", line 3, in <module>
    PassionFruit[0]=[]
TypeError: 'tuple' object does not support item assignment

2019年4月3日 星期三

用Python多層容器來儲存百香果大小規格,並用切片來存取

範例一:多層串列容器

PassionFruit=[['大(L)','80以上'],['中(M)','60~80'],['小(S)','未達60']]

print(PassionFruit)

執行結果:

[['大(L)', '80以上'], ['中(M)', '60~80'], ['小(S)', '未達60']]

範例二:例使用切片取值,要注意第一參數是起始值,第二參數最後值的下一個。因此[0:2]是指0,1沒有2。

PassionFruit=[['大(L)','80以上'],['中(M)','60~80'],['小(S)','未達60']]

print(PassionFruit[0:2])

執行結果:

[['大(L)', '80以上'], ['中(M)', '60~80']]

範例三:

PassionFruit=[['大(L)','80以上'],['中(M)','60~80'],['小(L)','未達60']]

print(PassionFruit[-2:])

執行結果:
[['中(M)', '60~80'], ['小(L)', '未達60']]

範例四:

PassionFruit=[['大(L)','80以上'],['中(M)','60~80'],['小(L)','未達60']]

print(PassionFruit[0:3:2])

執行結果:
[['大(L)', '80以上'], ['小(L)', '未達60']]


範例五:用切片更新串列內容
PassionFruit=[['大(L)','80以上'],['中(M)','60~80'],['小(L)','未達60']]

PassionFruit[0][1]='>80'

print(PassionFruit)

執行結果:
[['大(L)', '>80'], ['中(M)', '60~80'], ['小(L)', '未達60']]

範例六:
PassionFruit=[['大(L)','80以上'],['中(M)','60~80'],['小(L)','未達60']]

PassionFruit[2]=['小(L)','<60']

print(PassionFruit)

輸出結果:
[['大(L)', '80以上'], ['中(M)', '60~80'], ['小(L)', '<60']]

2019年4月1日 星期一

從百香果分級來看Python的List串列資料結構

臺北農產運銷股份有限公司的分級包裝為例,對百香果品種而言,分成百香果(一)百香果(二),百香果(一)是改良種,百香果(二)是蜜糖和滿天星。本文以百香果分級來看Python資料結構

首先來看list,可以儲存一串資料的串列容器。
範例一:用索引值取值,從0起算

PassionFruit=['適用範圍','改良種','統一編碼','2030200000515','品名代碼','51']

print(PassionFruit[0])

PassionFruit是一個list串列容器,使用中括號[]來容納各物件,每個物件中間以逗號隔開,取資料時可以用索引值,從零開始,上述程式執行結果如下:

適用範圍


範例二:取出兩筆

PassionFruit=['適用範圍','改良種','統一編碼','2030200000515','品名代碼','51']

print(PassionFruit[0],PassionFruit[1])


執行結果

適用範圍 改良種

範例三:加入分隔符號,讓顯示資料更好閱讀

PassionFruit=['適用範圍','改良種','統一編碼','2030200000515','品名代碼','51']

print(PassionFruit[0],':', PassionFruit[1])


執行結果

適用範圍 : 改良種


範例四:用負數索引值取值,注意! 索引值可以是負數。

PassionFruit=['適用範圍','改良種','統一編碼','2030200000515','品名代碼','51']

print(PassionFruit[-2],':', PassionFruit[-1])

執行結果:

品名代碼 : 51


範例五:用format使輸出格式化

PassionFruit=['適用範圍','改良種','統一編碼','2030200000515','品名代碼','51']

print('{}:{}'.format(PassionFruit[2], PassionFruit[3]))

執行結果:

統一編碼:2030200000515

範例六:用f使輸出格式化

PassionFruit=['適用範圍','改良種','統一編碼','2030200000515','品名代碼','51']

print(f'{PassionFruit[4]}:{PassionFruit[5]}')

執行結果:

品名代碼:51


範例七:用%使輸出格式化

PassionFruit=['適用範圍','改良種','統一編碼','2030200000515','品名代碼','51']

print('%s:%s' % (PassionFruit[4], PassionFruit[5]))

執行結果:

品名代碼:51


範例八:輸出全部的串列元素,注意輸出時會有中括號[]。

PassionFruit=['大(L)','80以上 ']

print(PassionFruit)

執行結果:

['大(L)', '80以上 ']


範例九:使用append附加新物件


PassionFruit=['大(L)','80以上 ']

PassionFruit.append('60~80')

print(PassionFruit)

執行結果:

['大(L)', '80以上 ', '60~80']

範例十:使用插入方式加入

PassionFruit=['大(L)','80以上 ']

PassionFruit.append('60~80')

PassionFruit.insert(2, '中(M)')

print(PassionFruit)


執行結果:

['大(L)', '80以上 ', '中(M)', '60~80']


範例十一:使用擴充方式加入串列

PassionFruit=['大(L)','80以上 ']

PassionFruit.append('60~80')

PassionFruit.insert(2, '中(M)')

PassionFruit.extend(['小(S)','未達60 '])

print(PassionFruit)


執行結果:

['大(L)', '80以上 ', '中(M)', '60~80', '小(S)', '未達60 ']


範例十二:刪除元素


PassionFruit=['大(L)','80以上 ']

del PassionFruit[1]

print(PassionFruit)


輸出結果:

['大(L)']


範例十三:串接串列


PassionFruit=['大(L)','80以上 ']

SmallFruit=['小(S)','未達60 ']

PassionFruit+=SmallFruit

print(PassionFruit)


輸出結果:

['大(L)', '80以上 ', '小(S)', '未達60 ']


範例十四:重複串列


PassionFruit=['大(L)','80以上 ']

PassionFruit*=3

print(PassionFruit)

輸出結果:
['大(L)', '80以上 ', '大(L)', '80以上 ', '大(L)', '80以上 ']