2025年9月21日 星期日

[水井USR創新教材]Python一下水井村有四家溫室小番茄園-tuple



雲林縣口湖鄉因土壤含鹽量高,水井村民多年來投入番茄品種研究,並與專業學術單位攜手研發改良,終於成功培育出甜度極高的「玫瑰番茄」。目前,全村已有四家業者專注於溫室小番茄的栽培,分別是:水哥玫瑰番茄園、首都番茄園、水井屋番茄園、樂天番茄園。

資料來源:開放博物館、水井社區發展協會

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

範例一:使用()來建立tuple

番茄園=()

print(番茄園)

執行結果:

()

 範例二:使用","來串接資料後會形成tuple

番茄園="水哥玫瑰番茄園", "首都番茄園", "水井屋番茄園","樂天番茄園"

print(番茄園)

執行結果:

('水哥玫瑰番茄園', '首都番茄園', '水井屋番茄園', '樂天番茄園')

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

番茄園=("水哥玫瑰番茄園", "首都番茄園", "水井屋番茄園","樂天番茄園")

print("在水井村的番茄園有", 番茄園)

執行結果:

在水井村的番茄園有 ('水哥玫瑰番茄園', '首都番茄園', '水井屋番茄園', '樂天番茄園')

範例四:讀取元組(Tuple)使用中括號[],不是使用小括號

番茄園=("水哥玫瑰番茄園", "首都番茄園", "水井屋番茄園","樂天番茄園")

print(番茄園[0])
print(番茄園[1])
print(番茄園[2])
print(番茄園[3])


執行結果:
水哥玫瑰番茄園
首都番茄園
水井屋番茄園
樂天番茄園

範例五:元組(Tuple)不可以更改
番茄園=("水哥玫瑰番茄園", "首都番茄園", "水井屋番茄園","樂天番茄園")

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

範例六:使用變數取出tuple中的元素,稱作開箱(unpacking)
番茄園="水哥玫瑰番茄園", "首都番茄園", "水井屋番茄園","樂天番茄園"

a,b,c,d=番茄園

print(a,b,c,d)
執行結果:
水哥玫瑰番茄園 首都番茄園 水井屋番茄園 樂天番茄園

範例七:tuple內的變數交換
番茄園="水哥玫瑰番茄園", "首都番茄園", "水井屋番茄園","樂天番茄園"

a,b,c,d=番茄園

print("交換前", a,b,c,d)

a,b,c,d=d,c,b,a

print("交換後", a,b,c,d)

執行結果:
交換前 水哥玫瑰番茄園 首都番茄園 水井屋番茄園 樂天番茄園
交換後 樂天番茄園 水井屋番茄園 首都番茄園 水哥玫瑰番茄園

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)