2025年9月15日 星期一

[水井USR創新教材]Python一下虎科大水井USR助社區設計水井三寶-list

 

(水井USR計畫執行長林正敏教授和水井三寶合影,攝於2025亞太永續博覽會)
相關新聞稿:

  • 國立虎尾科技大學創新社會實踐:融合工藝與創意科技,水井村三寶尋訪啟航
  • 水井三寶正式上架 串起在地產業鏈,喚醒三百年文化記憶

水井三寶文獻資料:水井姻緣花

本文以水井三寶來看Python資料結構,首先來看list,可以儲存一串資料的串列容器。

範例一:用索引值取值,從0起算

水井三寶=['烏龜','白馬','番花']
print(水井三寶[0])

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

烏龜

範例二:取出三筆

水井三寶=['烏龜','白馬','番花']
print(水井三寶[0])
print(水井三寶[1])
print(水井三寶[2])

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

烏龜
白馬
番花

範例三:加入文字說明,讓顯示資料更能傳達水井三寶
水井三寶=['烏龜','白馬','番花']

print('據傳水井村昔日有三寶,分別為',水井三寶[0],'、',水井三寶[1],'、',水井三寶[2],'。')

執行結果:
據傳水井村昔日有三寶,分別為 烏龜 、 白馬 、 番花 。

範例四:用字串格式,讓顯示資料更符合原來文章
水井三寶=['烏龜','白馬','番花']

str='據傳水井村昔日有三寶,分別為%s、%s、%s。'
print(str % (水井三寶[0],水井三寶[1],水井三寶[2]))

執行結果:
據傳水井村昔日有三寶,分別為烏龜、白馬、番花。

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

水井三寶=['烏龜','白馬','番花']

str='據傳水井村昔日有三寶,分別為%s、%s、%s。'
print(str % (水井三寶[-3],水井三寶[-2],水井三寶[-1]))

執行結果:

據傳水井村昔日有三寶,分別為烏龜、白馬、番花。

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

水井三寶=['烏龜','白馬','番花']

print('據傳水井村昔日有三寶,分別為{}、{}、{}。其中,烏龜指水井的風水地理,白馬為李府千歲的座騎塑像(現已不存),番花則指水井的百年雞蛋花樹,約300年歷史,為先人移植而來。'.format(水井三寶[0],水井三寶[1],水井三寶[2]))


執行結果:

據傳水井村昔日有三寶,分別為烏龜、白馬、番花。其中,烏龜指水井的風水地理,白馬為李府千歲的座騎塑像(現已不存),番花則指水井的百年雞蛋花樹,約300年歷史,為先人移植而來。

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

水井三寶=['烏龜','白馬','姻緣花']
烏龜=水井三寶[0]
白馬=水井三寶[1]
番花=水井三寶[2]


str=f'據傳水井村昔日有三寶,分別為{烏龜}、{白馬}、{番花}。其中,{烏龜}指水井的風水地理,{白馬}為李府千歲的座騎塑像(現已不存),{番花}則指水井的百年雞蛋花樹,約300年歷史,為先人移植而來。'
print(str)



執行結果:

據傳水井村昔日有三寶,分別為烏龜、白馬、姻緣花。其中,烏龜指水井的風水地理,白馬為李府千歲的座騎塑像(現已不存),姻緣花則指水井的百年雞蛋花樹,約300年歷史,為先人移植而來。


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

水井三寶=['烏龜','白馬']
水井三寶.append('姻緣花')
烏龜=水井三寶[0]
白馬=水井三寶[1]
番花=水井三寶[2]

str=f'據傳水井村昔日有三寶,分別為{烏龜}、{白馬}、{番花}。其中,{烏龜}指水井的風水地理,{白馬}為李府千歲的座騎塑像(現已不存),{番花}則指水井的百年雞蛋花樹,約300年歷史,為先人移植而來。'
print(str)



執行結果:

據傳水井村昔日有三寶,分別為烏龜、白馬、姻緣花。其中,烏龜指水井的風水地理,白馬為李府千歲的座騎塑像(現已不存),姻緣花則指水井的百年雞蛋花樹,約300年歷史,為先人移植而來。


[水井USR創新教材]Python一下逆境重生-水哥玫瑰番茄


人生難免遇到挫折,有些人出生就在「風頭水尾」之地-水井村,介紹一篇值得看的文章- 水哥玫瑰番茄 充滿故事的美味「紅寶石」。目前在水井村除了水哥玫瑰番茄園,還有首都番茄園、水井屋番茄園、樂天番茄園。

範例一:特級玫瑰番茄每盒150元,購買5盒,總共多少錢?

單價=150   #每盒150元
交易量=5 #購買5盒
print(單價*交易量) #總共多少?

執行結果:
750
Python的變數居然可以用中文,太棒!

範例二:另一種寫法,清楚地輸出完整資訊
單價=150   #每盒150元
交易量=5 #購買5盒
print(單價,'元/盒*',交易量,'盒=',單價*交易量,'元') #總共多少?

執行結果:
150 元/盒* 5 盒= 750 元

範例三:特級玫瑰番茄每盒150元,頂級玫瑰番茄每盒180元,購買特級玫瑰番茄5盒以及頂級玫瑰番茄3盒。
特級玫瑰番茄單價=150   #每盒150元
頂級玫瑰番茄單價=180   #每盒180元
特級玫瑰=5
頂級玫瑰=3
總價=特級玫瑰番茄單價*特級玫瑰+頂級玫瑰番茄單價*頂級玫瑰

print(f"特級玫瑰番茄每盒{特級玫瑰番茄單價}元,頂級玫瑰番茄每盒{頂級玫瑰番茄單價}元,購買特級玫瑰番茄{特級玫瑰}盒以及頂級玫瑰番茄{頂級玫瑰}盒,總共需花{總價}元。")

執行結果:
特級玫瑰番茄每盒150元,頂級玫瑰番茄每盒180元,購買特級玫瑰番茄5盒以及頂級玫瑰番茄3盒,總共需花1290元。

範例四:購買的公斤數由使用者自己輸入

單價=150   #每盒150元
交易量=input('輸入想購買的盒數=') #購買?盒
print(單價,'元/盒*',交易量,'盒=',單價*交易量,'元') #總共多少?

執行結果:
輸入想購買的盒數=5
150 元/盒* 5 盒= 555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 元

哇!才買5盒,為何是天價?於是我們改成只買1盒,試試看
輸入想購買的盒數=1
150 元/盒* 1 盒= 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 元


結果太讓人無法想像,難到是那裏出問題?
因為輸入會是以字串方式處理,於是字串就被複製成150份,就像
print(150*'1')

因此正確程式是
單價=150   #每盒150元
交易量=int(input('輸入想購買的盒數=')) #購買?盒
print(單價,'元/盒*',交易量,'盒=',單價*交易量,'元') #總共多少?

留意上面程式中的int()函式,可以把字串轉換成數值
執行結果是:
輸入想購買的盒數=1
150 元/盒* 1 盒= 150 元

[水井USR創新教材]Python一下位處雲林西南沿海「風頭水尾」之地-水井村



今年(2025)年初敏哥又有新任務,跟著國立虎尾科技大學電機資訊學院許永和院長,一起到位處雲林西南沿海「風頭水尾」之地-水井村。該村落居然有出版一本水井村史(ISBN/ISSN:9789860439168),有興趣不妨跟著虎科大-水井USR團隊一起展開大學與社區共學之路。
今天(2025/9/15)我們就利用水井村文化來學習Python程式語言,首站當然就是輸出指令print()。

1.Python IDE程式下載:https://www.python.org/downloads/,進行安裝。
2.打開Python IDLE程式,在File/New File選單,即可以開始編輯程式。

以下範例有關水井村的資料來自:臺灣農村數位博物館

範例一:輸出指令,print(),把括號內的字串印出來,字串可以放在兩個單引號或兩個雙引號中間。
程式碼:
print('雲林縣口湖鄉水井村為典型「風頭水尾」的鹽分地帶。')

按下F5鍵,儲存成passionfruit.py後,執行結果:
雲林縣口湖鄉水井村為典型「風頭水尾」的鹽分地帶。

範例二:變數,指一個符號可以用來儲存資料,可以是字串,也可以是數字。下例的str即為子串的變數。
程式碼:

str = '水產養殖至今成為水井村的主要經濟產業。'
print(str)

執行結果:
水產養殖至今成為水井村的主要經濟產業。

範例三:使用%格式
程式碼:
鑿井方式="關於鑿井方式,早期係以竹子及杉木所製的「%s」為輔助機具,利用人踩踏柴井車輪作為動力,鑿設深井,並放入竹管成為「竹管井」。"
柴井車="柴井車"

print(鑿井方式 % 柴井車)

執行結果:
關於鑿井方式,早期係以竹子及杉木所製的「柴井車」為輔助機具,利用人踩踏柴井車輪作為動力,鑿設深井,並放入竹管成為「竹管井」。

範例四:%格式加上多個參數
程式碼:
鑿井方式="%d年代後,%s漸取代%s,%s則取代竹子為井管,傳統鑿井師傅們亦與時俱進,轉為%s。"
year=1950
鑿井機器='鑿井機器'
柴井車="柴井車"
塑膠管='塑膠管'
str="機器鑿井"

print(鑿井方式 % (year, 鑿井機器,柴井車, 塑膠管, str))

執行結果:
1950年代後,鑿井機器漸取代柴井車,塑膠管則取代竹子為井管,傳統鑿井師傅們亦與時俱進,轉為機器鑿井。

範例五:format格式
程式碼:
鑿井需求="{}、80年代西南沿海養殖業大興而有大量鑿井需求,本村鑿井業者一時有接不完的工作,帶來大量現金收入,村民趨之若鶩,在最盛時期,全村約有八成村民參與鑿井工作。"
year=1970

print(鑿井需求.format(year))

執行結果:
1970、80年代西南沿海養殖業大興而有大量鑿井需求,本村鑿井業者一時有接不完的工作,帶來大量現金收入,村民趨之若鶩,在最盛時期,全村約有八成村民參與鑿井工作。

範例六:%和format格式混搭
程式碼:
鑿井需求="{}、80年代西南沿海養殖業大興而有大量鑿井需求,本村鑿井業者一時有接不完的工作,帶來大量現金收入,村民趨之若鶩,在最盛時期,全村約有%s村民參與鑿井工作。"
year=1970
百分比='八成'

print(鑿井需求.format(year) % 百分比)

執行程果:
1970、80年代西南沿海養殖業大興而有大量鑿井需求,本村鑿井業者一時有接不完的工作,帶來大量現金收入,村民趨之若鶩,在最盛時期,全村約有八成村民參與鑿井工作。

範例七:使用名稱來指定變數就可以變換順序
程式碼:
鑿井需求="鑿井的男人們「{C}」,長期外出工作,村中的女人必須撐起半邊天,形成「{A}」的社會現象。諸如寺廟改建探尋廟地、{扶轎班}等一般村落以{B}為主的工作,在水井村內則落在{G}身上,成為村落的特殊景象。"
A='男主村外、女主村內'
Boy='男性'
C='逐水而居'
Girl='女性'
扶轎班='扶轎班'


print(鑿井需求.format(A=A, B=Boy, C=C, G=Girl,扶轎班=扶轎班))

執行結果:
鑿井的男人們「逐水而居」,長期外出工作,村中的女人必須撐起半邊天,形成「男主村外、女主村內」的社會現象。諸如寺廟改建探尋廟地、扶轎班等一般村落以男性為主的工作,在水井村內則落在女性身上,成為村落的特殊景象。

範例八:格式化字串本文,特別留意字串前要加上f
程式碼:
A="男主村外、女主村內"
Boy='男性'
C='逐水而居'
Girl='女性'

鑿井需求=f"鑿井的男人們「{C}」,長期外出工作,村中的女人必須撐起半邊天,形成「{A}」的社會現象。諸如寺廟改建探尋廟地、%s等一般村落以{Boy}為主的工作,在水井村內則落在{Girl}身上,成為村落的特殊景象。"
扶轎班='扶轎班'

print(鑿井需求 % 扶轎班)


2025年8月5日 星期二

[micro:bit] 剪刀、石頭、布

記錄比賽結果,做出統計圖表,看看 micro:bit 和人類(或另一台 micro:bit)對戰時贏了幾場、輸了幾場、平手幾次



Python程式


 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
def on_button_pressed_a():
    global win
    basic.show_string("Win")
    if mode == 0:
        basic.show_number(win)
    else:
        win += 1
    basic.show_number(win)
input.on_button_pressed(Button.A, on_button_pressed_a)

def on_gesture_shake():
    global randomnumber
    randomnumber = randint(0, 2)
    if randomnumber == 0:
        basic.show_icon(IconNames.SMALL_SQUARE)
    elif randomnumber == 2:
        basic.show_icon(IconNames.SQUARE)
    else:
        basic.show_icon(IconNames.SCISSORS)
input.on_gesture(Gesture.SHAKE, on_gesture_shake)

def on_logo_pressed():
    global mode
    mode = (mode + 1) % 2
    if mode == 0:
        basic.show_string("View")
    else:
        basic.show_string("Edit")
input.on_logo_event(TouchButtonEvent.PRESSED, on_logo_pressed)

def on_button_pressed_ab():
    global tie
    basic.show_string("Tie")
    if mode == 0:
        basic.show_number(tie)
    else:
        tie += 1
    basic.show_number(tie)
input.on_button_pressed(Button.AB, on_button_pressed_ab)

def on_button_pressed_b():
    global lose
    basic.show_string("Lose")
    if mode == 0:
        basic.show_number(lose)
    else:
        lose += 1
    basic.show_number(lose)
input.on_button_pressed(Button.B, on_button_pressed_b)

randomnumber = 0
tie = 0
lose = 0
win = 0
mode = 0
mode = 0
win = 0
lose = 0
tie = 0

2025年7月24日 星期四

[micro:bit] 鋼鐡之心

 


Python 程式:


 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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
def on_button_pressed_a():
    global Run, Mode
    Run = 0
    Mode = (Mode + 1) % 9
    basic.show_number(Mode)
input.on_button_pressed(Button.A, on_button_pressed_a)

def on_button_pressed_b():
    global Run, Temp
    Run = 1
    basic.show_icon(IconNames.ANGRY)
    Temp = (Temp + 1) % 2
    if Mode != 5:
        ContinuousServo.turn_off_motor(DigitalPin.P2)
    if Mode != 6:
        strip.clear()
        strip.show()
    if Mode == 6 or Mode == 7:
        strip.show_rainbow(1, 360)
        strip.show()
input.on_button_pressed(Button.B, on_button_pressed_b)

Temp = 0
strip: neopixel.Strip = None
Run = 0
Mode = 0
basic.show_icon(IconNames.ANGRY)
Mode = 0
Run = 0
ContinuousServo.spin_one_way(AnalogPin.P2)
ContinuousServo.spin_other_way(AnalogPin.P2)
ContinuousServo.turn_off_motor(DigitalPin.P2)
strip = neopixel.create(DigitalPin.P1, 16, NeoPixelMode.RGB)
strip.show_rainbow(1, 360)
strip.clear()
strip.show()
strip.show_rainbow(1, 360)
mp3Player.mp3_set_serial(SerialPin.P0)
mp3Player.set_volume(25)

def on_forever():
    global Temp, Mode
    if Run == 1:
        if Mode == 1:
            basic.show_icon(IconNames.HEART)
            basic.pause(500)
            basic.show_icon(IconNames.SMALL_HEART)
            basic.pause(500)
        elif Mode == 2:
            if input.light_level() >= 100:
                basic.show_icon(IconNames.HEART)
            else:
                basic.show_icon(IconNames.SMALL_HEART)
        elif Mode == 3:
            if input.compass_heading() >= 100:
                basic.show_icon(IconNames.HEART)
            else:
                basic.show_icon(IconNames.SMALL_HEART)
        elif Mode == 4:
            if input.sound_level() >= 150:
                if Temp == 0:
                    basic.show_icon(IconNames.HEART)
                else:
                    basic.show_icon(IconNames.SMALL_HEART)
                Temp = (Temp + 1) % 2
        elif Mode == 5:
            if Temp == 0:
                ContinuousServo.spin_one_way_with_speed(AnalogPin.P2, 50)
            else:
                ContinuousServo.spin_other_way_with_speed(AnalogPin.P2, 50)
        elif Mode == 6:
            strip.rotate(1)
            strip.show()
            basic.pause(200)
        elif Mode == 7:
            if Temp == 0:
                ContinuousServo.spin_one_way_with_speed(AnalogPin.P2, 50)
                strip.rotate(1)
            else:
                ContinuousServo.spin_other_way_with_speed(AnalogPin.P2, 50)
                strip.rotate(-1)
            strip.show()
            basic.pause(200)
        elif Mode == 8:
            mp3Player.set_tracking(1, mp3Player.repeatList.NO)
            mp3Player.execute(mp3Player.playType.PLAY)
            Mode = 0
basic.forever(on_forever)

2025年7月4日 星期五

用樹藝AI說雲林溪故事

材料:種子、玉米籜、micro:bit、Smart AI Lens、MP3 Player、LED

積木程式:


Python程式:

# 0:介紹、1測驗
def RightWrong(num: number, ans: str):
    global Number2, mode
    if answer[num] == ans:
        mp3Player.set_tracking(18, mp3Player.repeatList.NO)
        basic.show_icon(IconNames.YES)
    else:
        mp3Player.set_tracking(19, mp3Player.repeatList.NO)
        basic.show_icon(IconNames.NO)
    basic.pause(5000)
    Number2 = (Number2 + 1) % 20
    if Number2 == 15:
        mp3Player.set_tracking(20, mp3Player.repeatList.NO)
        mode = 0
        basic.show_leds("""
            . . # # #
            . . . # #
            . . . . #
            # # . . .
            # # . . .
            """)
    else:
        mp3Player.set_tracking(Number2 + 6, mp3Player.repeatList.NO)
        basic.pause(2000)
        basic.show_icon(IconNames.SQUARE)
def doLight():
    if Run == 0 or Run == 5:
        pins.digital_write_pin(DigitalPin.P2, 1)
        pins.digital_write_pin(DigitalPin.P9, 0)
        pins.digital_write_pin(DigitalPin.P13, 0)
        pins.digital_write_pin(DigitalPin.P14, 0)
        pins.digital_write_pin(DigitalPin.P15, 0)
    elif Run == 1 or Run == 6:
        pins.digital_write_pin(DigitalPin.P2, 0)
        pins.digital_write_pin(DigitalPin.P9, 1)
        pins.digital_write_pin(DigitalPin.P13, 0)
        pins.digital_write_pin(DigitalPin.P14, 0)
        pins.digital_write_pin(DigitalPin.P15, 0)
    elif Run == 2 or Run == 7:
        pins.digital_write_pin(DigitalPin.P2, 0)
        pins.digital_write_pin(DigitalPin.P9, 0)
        pins.digital_write_pin(DigitalPin.P13, 1)
        pins.digital_write_pin(DigitalPin.P14, 0)
        pins.digital_write_pin(DigitalPin.P15, 0)
    elif Run == 3 or Run == 8:
        pins.digital_write_pin(DigitalPin.P2, 0)
        pins.digital_write_pin(DigitalPin.P9, 0)
        pins.digital_write_pin(DigitalPin.P13, 0)
        pins.digital_write_pin(DigitalPin.P14, 1)
        pins.digital_write_pin(DigitalPin.P15, 0)
    elif Run == 4 or Run == 9:
        pins.digital_write_pin(DigitalPin.P2, 0)
        pins.digital_write_pin(DigitalPin.P9, 0)
        pins.digital_write_pin(DigitalPin.P13, 0)
        pins.digital_write_pin(DigitalPin.P14, 0)
        pins.digital_write_pin(DigitalPin.P15, 1)
LED_status = 0
count = 0
oldRun = 0
Run = 0
mode = 0
Number2 = 0
answer: List[str] = []
basic.show_leds("""
    # # . . .
    # # . . .
    . # # . .
    . # # # #
    . . # # #
    """)
basic.pause(500)
mp3Player.mp3_set_serial(SerialPin.P1)
mp3Player.set_volume(25)
mp3Player.set_tracking(20, mp3Player.repeatList.NO)
PlanetX_AILens.init_module()
PlanetX_AILens.switchfunc(PlanetX_AILens.FuncList.CARD)
basic.show_leds("""
    . . # # #
    . . . # #
    . . . . #
    # # . . .
    # # . . .
    """)
pins.digital_write_pin(DigitalPin.P2, 0)
pins.digital_write_pin(DigitalPin.P9, 0)
pins.digital_write_pin(DigitalPin.P13, 0)
pins.digital_write_pin(DigitalPin.P14, 0)
pins.digital_write_pin(DigitalPin.P15, 0)
answer = ["B", "C", "C", "B", "D", "C", "B", "B", "C", "C"]

def on_every_interval():
    global LED_status, count, oldRun
    cardMode = 0
    if cardMode == 0:
        if oldRun == Run:
            if count > 10:
                if LED_status == 0:
                    LED_status = 1
                    pins.digital_write_pin(DigitalPin.P2, 1)
                    pins.digital_write_pin(DigitalPin.P9, 1)
                    pins.digital_write_pin(DigitalPin.P13, 1)
                    pins.digital_write_pin(DigitalPin.P14, 1)
                    pins.digital_write_pin(DigitalPin.P15, 1)
                else:
                    LED_status = 0
                    pins.digital_write_pin(DigitalPin.P2, 0)
                    pins.digital_write_pin(DigitalPin.P9, 0)
                    pins.digital_write_pin(DigitalPin.P13, 0)
                    pins.digital_write_pin(DigitalPin.P14, 0)
                    pins.digital_write_pin(DigitalPin.P15, 0)
            else:
                count = count + 1
        else:
            oldRun = Run
            count = 0
loops.every_interval(500, on_every_interval)

def on_forever():
    global Run, mode, Number2
    PlanetX_AILens.camera_image()
    if mode == 0 and PlanetX_AILens.number_card(PlanetX_AILens.numberCards.ONE):
        Run = 0
        mp3Player.set_tracking(1, mp3Player.repeatList.NO)
    elif mode == 0 and PlanetX_AILens.number_card(PlanetX_AILens.numberCards.TWO):
        Run = 1
        mp3Player.set_tracking(2, mp3Player.repeatList.NO)
    elif mode == 0 and PlanetX_AILens.number_card(PlanetX_AILens.numberCards.THREE):
        Run = 2
        mp3Player.set_tracking(3, mp3Player.repeatList.NO)
    elif mode == 0 and PlanetX_AILens.number_card(PlanetX_AILens.numberCards.FOUR):
        Run = 3
        mp3Player.set_tracking(4, mp3Player.repeatList.NO)
    elif mode == 0 and PlanetX_AILens.number_card(PlanetX_AILens.numberCards.FIVE):
        Run = 4
        mp3Player.set_tracking(5, mp3Player.repeatList.NO)
    elif mode == 0 and PlanetX_AILens.number_card(PlanetX_AILens.numberCards.SIX):
        mp3Player.set_tracking(16, mp3Player.repeatList.NO)
        mode = 1
        Number2 = 0
        basic.pause(5000)
        basic.show_icon(IconNames.SQUARE)
        mp3Player.set_tracking(Number2 + 6, mp3Player.repeatList.NO)
    elif mode == 1 and PlanetX_AILens.letter_card(PlanetX_AILens.letterCards.A):
        mp3Player.set_tracking(Number2 + 6, mp3Player.repeatList.NO)
        RightWrong(Number2, "A")
    elif mode == 1 and PlanetX_AILens.letter_card(PlanetX_AILens.letterCards.B):
        mp3Player.set_tracking(Number2 + 6, mp3Player.repeatList.NO)
        RightWrong(Number2, "B")
    elif mode == 1 and PlanetX_AILens.letter_card(PlanetX_AILens.letterCards.C):
        mp3Player.set_tracking(Number2 + 6, mp3Player.repeatList.NO)
        RightWrong(Number2, "C")
    elif mode == 1 and PlanetX_AILens.letter_card(PlanetX_AILens.letterCards.D):
        mp3Player.set_tracking(Number2 + 6, mp3Player.repeatList.NO)
        RightWrong(Number2, "D")
    elif mode == 1 and PlanetX_AILens.letter_card(PlanetX_AILens.letterCards.E):
        mp3Player.set_tracking(20, mp3Player.repeatList.NO)
        mode = 0
        basic.show_leds("""
            . . # # #
            . . . # #
            . . . . #
            # # . . .
            # # . . .
            """)
    basic.pause(2500)
basic.forever(on_forever)


 

2025年6月18日 星期三

 國立虎尾科技大學電機資訊學院

113學年度第二學期電腦軟體應用教學成果

教學目標:
教學目標主要在於訓練學生撰寫Python程式,培養學生對Python基本語法和軟體自動化應用的深入理解與應用能力。通過學習程序流程圖、演算法和代碼,學生能經由基確到應用。教學方式包括講解、實作和案例分析,以促進學生自主學習與問題解決能力。

15+3教學目標:
為提升學生的跨領域學習能力,推動教師探索多元教學模式,本課程提出「15+3週跨領域學習課程」計劃。該計劃能夠通過課程模式的調整,充分利用學期中的彈性學習週,將跨領域學習內容藉由充實到課程中。學習目標包括推動學生應用AI技術,提高跨領域問題解決能力,以及學生能利用相關工具開發應用。本課程將特別引入大語言模型(LLM)作為工具,幫助學生理解自然語言處理的應用,並透過代理人模組實現自動化解決方案。

業師教學:
  • 2025/03/20 -「整合 OpenAI 與 Phidata」,黃俊毓/小鎮智能
  • 2025/05/08 -「整合 OpenAI 與 Excel試算表」,黃俊毓/小鎮智能
  • 2025/05/29 -「實作智慧成績助教系統」,黃俊毓/小鎮智能



創新教材:
  1. 夠Python,Python的變數是標籤名稱而不是容器本身
  2. Python一下百香果故鄉在南投埔里
  3. 夠Python,利用集合持性來開發新版的XAXB小遊戲
  4. 夠Python,一行指令輸出大心
  5. 夠Python,一行指令找質數
  6. 用Python求最大公因收和最小公倍數
  7. Python迴圈的美(ChatGPT協助說明程式)
  8. 打好Python程式基礎
  9. 雙迴圈5*5實心方塊
  10. Python雙迴圈基礎教材
  11. 百香果含有超過130種以上的芳香物質,130是整數還是字串?
  12. 從百香果分級來看Python的List串列資料結構
  13. 百香果分級標準居然可以用不可更改的元組來表示
  14. 一堆不可以重複以及改變值的資料的集合可用來百香果分級判斷
  15. 超好用的字典,用鍵查值的觀念來查百香果的分級標準
  16. Python的生成式(Comprehensive)和產生器(Generator)有何不同呢?
  17. 用Python來計算中文英文的字數以及字元數
  18. 檔案的簡易操作
  19. 用繪圖來學習Python物件導向設計以及意外處理
  20. 用圖形排列來訓練雙迴圈以及函式的技巧
  21. 用繪圖來學習Python物件導向設計以及意外處理
  22. 用Python實現隨機座位表
  23. 利用AI生成圖片用PIL套件批次在圖檔加上浮水印
  24. 將圖片剪裁成8*8的小圖
  25. 自動化下載網路圖檔
  26. 用Python來撰寫顯示吳郭魚在斗南市場交易情形的程式
  27. 使用 Yahoo Finance API 的 yfinance 函式庫進行各種金融數據查詢
  28. 把JSON格式的線上火車時刻表儲存到Excel檔案中
  29. 把近日的漁產品交易行情儲存到Excel檔案中
  30. 利用Python來操作Excel計算總交易量和總平均
  31. 用Python實現隨機安排考試順序
  32. 條件過濾漁產品交易的資料儲存到EXCEL檔案中
  33. 讓ChatGPT產生漁貨交易的加上總交易量和總平均價的程式
  34. 讓ChatGPT利用Excel函式來計算漁貨交易總交易量和總平均值
  35. 讓ChatGPT利用Excel函式來計算各漁貨的交易量
  36. 用ChatGPT來產生田蛙在斗南交易情形並以EXCEL資料和圖表儲存
  37. 用Python把最近漁產品交易行情資料並儲存成Word檔案
  38. 用Python自動生成最近吳郭魚在斗南市場的交易圖的簡報檔
  39. 讀取EXCEL檔案計算後儲存到PDF檔
  40. Ollama和ChatGPT有何不同呢?
  41. 本地大語言模型-Ollama的初體驗
  42. Ollama的工具(Tools)使用
  43. Ollama的代理功能(Agent)
  44. Ollama+llama3.2完成智慧成績助教系統