Upload
others
View
18
Download
0
Embed Size (px)
Citation preview
Chapter 2 Python ProgrammingFor Artificial Intelligence
Python
• Python เปนภาษา Dynamic Object-Oriented Programming ทถกพฒนาขนโดย Guido von Rossum ในป ค.ศ. 1990 และปจจบนถกดแลโดย Python Software Foundation (PSF) โดย Version ลาสดตอนนคอ Python 3.7.2
• Official Site ของ python คอ http://www.python.org
Python
• Python เปนทง Cross Platform และม Open Source License หมายความวา
• ถาพฒนาโปรแกรมสกตวดวย Python สามารถทจะเอาไปท างานบน Operating System ไดหลากหลาย ไมวาจะเปน? MS Windows, Linux, หรอ OS/X เปนตน - - > (Cross Platform)
• มอสระในการแกไข Library ตางๆ ท Python ใหมา รวมถงการน า Software ทพฒนาขนจาก Python ไปท าประโยชนทางธรกจไดอยางเตมทโดย ไมเสยเงน - - > (Open Source License)
• นอกจากนตวโครงสรางและ Syntax ของภาษาคอนขางอานงาย เขาใจงาย และม Object ดาน Data Structure รองรบอยหลายแบบแลว ท าให Python เปนของ ฟร และของด ทชวยใหพฒนาโปรแกรมไดเรวขน
Python
ตวอยางท 1: ตวอยางโปรแกรมยอดฮต “Hello world !” ส าหรบ Javapublic class{
public static void main(String[]args){
System.out.println("Hello, world!");}
}ส าหรบ Pythonprint ("Hello, world!")
ขอเสยเมอเทยบกบ C/C++
• ประการแรก Python เปน Scripting Language ซงท างานโดยม Interpreter แปลงค าสงในแตละบรรทดของโปรแกรมใหเปน machine code ในระหวางทโปรแกรมท างาน โดยไมมการ compile ตว source code ทงหมดเปน machine code กอนเรมการท างานของโปรแกรม ดงนนสงทจะพบแน ๆ คอ มนจะท างานชากวา C/C++ (รวมถง Java ดวย )
• ประการทสอง ทเปนผลพวงตามมาจากขอแรกคอ มนไมมการตรวจสอบความถกตองของการเรยกใชตวแปรทงหมดของโปรแกรมกอนเรมท างาน ดงนนแลว ถาผเขยนขาดความระมดระวงในระหวางพฒนาโปรแกรม จะท าใหโอกาสเกด Runtime Error จากการเรยกใชตวแปรทไมไดประกาศหรอใชงานตวแปรผดประเภทไดงาย (สาเหตสวนใหญของกรณพวกนเทาทพบกคอ พมพชอตวแปรผด) ซงความผดพลาดพวกนจะไมถกคนพบจนกวาโปรแกรมจะถกสงใหท างานจนถงบรรทดทมปญหานน
Google Colabเปนโครงการท Google ท างานรวมกบทม Jupyter มาตงแต 2014 แตเพงเปดใหใชสาธารณะ ขอด
ของ clolab กคอ ไมตองลงอะไรทงนน มความสามารถเหมอน Jupyter Notebook แทบทกอยาง ดกวากคอ ไมตองโหลดมาลงบนเครองใหเสยเวลา แถมยงสามารถ colaborate (เขยน code ไปพรอม ๆ กนกบเพอนๆ) กบเพอนๆในเวลาเดยวกน สามารถทง comments แนะน าเพอน ๆ อยางงายดาย เขยนเสรจไฟลก save อยบน Google Drive ของตวเองอตโนมต จะแชรใหคนอน จะโหลดลงมารนโดย Jupyter บนเครองเรากยงได แถมอกอยางส าหรบชาว Data คอม credit ใหใช GPU ฟร ๆ กนอกดวย
ขอเสยของมนอยางหนงทเหนไดชดคออาจจะยงมอาการชาบางเวลาสงรน code อกเรองกคอการ import or read local data นนมขนตอนมากขน เชนตองเอาไฟลไปเกบไวใน Google Drive หรอ Google Cloud Storage กอน แลวถงจะสามารถใช APIs ท Colab เตรยมไวใหไปดงมาขอมลใชได
CPU VS GPU VS TPUในสมยกอนเราจะไดยนค าวา CPU (central processing unit) บอยๆ ซงมนกคอหนวยประมวลผล
ในระบบคอมพวเตอรนนเอง เอาไวสงการตางๆ และประมวลผลการท างานตางๆในคอม ซงตว CPU นนกม core processor แบงการท างานไดหลาย core และกมตงแต 1 core , 2 core , 4 core , 8 core ไปเรอย ๆ
และตอมาเมอววฒนาการของเรอง gaming พฒนาไปเรอยๆ มเกมใหม ๆ ทใชความสามารถของการดจอเพอประมวลผล เรองรปภาพ ใหละเอยดขน เลนเกมทมความละเอยดของภาพมากขน และตว CPU เองกไมไดตอบโจทยในเรองน จงไดมการพฒนาในสวนของ GPU (Graphic processing unit) ขนมาแทนท และใสลงในการดจอแทน เพอใหประมวลผลภาพกราฟฟคไดเรวและละเอยดมากยงขน ซงปกตในหนง GPU สามารถมไดถง 1000 CPU Core
CPU VS GPU VS TPUจนกระทงลาสด ววฒนาการของเทคโนโลยเรอง AI และ Machine Learning next gen ไดเรมถกน ามาใชงาน
มากขน หรอทเราคนหกน ในค าวา Deep learning technology ซงเปนการน าขอมลพวก ภาพ เสยง หรอกระทงพวก รปแบบของการโจมตตางๆ มาสอนระบบเพอสรางเปนระบบโครงสรางประสาท ( Artificial neural network) ใหมการเรยนร ในศาสตรตาง ๆ เพอใหสามารถตดสนใจทถกตอง ในเรองนนๆ ได ซงการใชงาน GPU นนยงมขอจ ากดในเรอง Deep learning จนกระทงทาง TensorFlow (Opensource) ทท าเกยวกบเรอง machine learning ไดพฒนาออกมาเปนตว TPU (Tensorflow Processing unit) เพอใชในการวจย เกบขอมล และสรางระบบโครงสรางประสาทไดดยงขน
ปจจบนทาง Google Engineer เองกมการน า TensorFlow และ TPU มาท า Project แลวเชนกน ยกตวอยางเชน ตว Magenta ซงเปน Project ทท าเกยวกบเรองของ เพลง ท านอง และเครองดนตรตางๆ มาสรางเปนเพลงขน และท าการวเคราะห และสรางสวนประกอบของเพลงไดดยงขน
กจกรรม 1 : พมพขอความออกหนาจอ
ค าสง print
ค าสงพมพขอความในภาษา Python คอ print
เชน print('Hello')
กจะแสดงขอความวา Hello ออกทหนาจอ
แบบฝกหด 1.1
คราวนเรามาลองพมพสตรง 'สวสดจะ' ออกทหนาจอ ลองเตมขอความดงกลาวลงในเครองหมายค าพดเดยวด
print('สวสดจะ')
ลองเปลยนสตรงดตามใจชอบ แลวลองรนด
หมายเหต (comment)
บางครงเราอยากใสหมายเหตลงไปในโคดเพอเปนบนทกชวยจ า เราจะใชสญลกษณ # (แฮช หรอ hash) น าหนาหมายเหต โดยเมอไรกตามทใชเครองหมาย # สงทตามหลงเครองหมายนจะเปนหมายเหตทงหมด เชน
print('Hello') #แสดงขอความ Hello ออกทหนาจอ
หมายเหต (comment)
หากเราตองการหมายเหตทงบรรทด ใหเราใสเครองหมาย `#` ทดานหนาสด เชน
#แสดงขอความ Hello ออกทหนาจอ
print('Hello')
หมายเหต (comment)
เวลาคอมพวเตอรท างาน มนจะกระโดดขามสวนทเปนหมายเหตไป
เชน ในโคดดานลางน คอมพวเตอรจะกระโดดขามบรรทดท 3 ไป เพราะถกมองเปนหมายเหต
print('Please')
print('Mr.')
# print('and Ms.')
print('Postman')
print('Look and See')
แบบฝกหด 1.2
• ลองใสเครองหมาย # หนาบรรทดตางๆ ในโคด แลวสงเกตความเปลยนแปลงของผลลพธ
print('Hello')
print('World')
print('My')
print('name')
print('is')
print('Peter')
กจกรรม 2: การค านวณทางคณตศาสตร
• เราสามารถท าการค านวณทางคณตศาสตรได โดยใชเครองหมายบวก +, ลบ -, คณ *, และหาร /กบตวเลขไดขอสงเกต: เราจะใชเครองหมายดอกจน * แทนการคณ
• เชน ถาเราสงใหคอมพวเตอรค านวณคาของนพจนทางคณตศาสตร 5×2+10 คอมพวเตอรกจะค านวณผลลพธใหทนท
5 * 2 + 10
20
• ถาเราสงใหคอมพวเตอรค านวณคาของนพจน 10 +5
2เราจะไดผลลพธดงน
10 + 5 / 2
12.5
• จะสงเกตไดวา คอมพวเตอรค านวณการหาร 5 / 2 และใสคาทศนยมใหโดยอตโนมต
แบบฝกหด 2.1
เรามาลองค านวณคาของนพจนทางคณตศาสตรตอไปนกนดบาง
1. 3
4+
1
41.0
2. 1 + 6 × 8 − 742
3. 5 × 6 + 7 × 8 −2
585.6
วงเลบในนพจนทางคณตศาสตร
วงเลบในนพจนทางคณตศาสตรทงน เราสามารถใชเครองหมายวงเลบ ( ) ไดเหมอนกบนพจนทางคณตศาสตรปกตเชน เราสามารถค านวณคาของนพจน 4×3+(1+2)/4
ไดดวยค าสงน4 * 3 + (1 + 2) / 4 12.75
วงเลบในนพจนทางคณตศาสตร
• ขอแตกตางคอ ในกรณทมวงเลบซอนวงเลบ เราจะใชเครองหมายวงเลบ ( ) เสมอ หามใช เครองหมายกามป[ ] และเครองหมายปกกา { } โดยเดดขาด
• เชน ถาเราจะค านวณคาของนพจน ([1/{2+3}]×4+5)/6 เราจะตองเปลยนกามปและปกกากลบมาเปนวงเลบกอนเสมอ
ลองเขยนค าสงหาคา ([1/{2+3}]×4+5)/6 ด
((1 / (2 + 3)) * 4 + 5) / 6
0.9666666666666667
วงเลบในนพจนทางคณตศาสตร
หวใจ: เครองหมายวงเลบมหนาทเปลยนล าดบการท างาน โดยจะเรมท าในวงเลบกอนเสมอ โดยล าดบการท างานจะเรมจาก (1) ท าในวงเลบ (2) คณและหาร (3) บวกและลบ
เชน ลองสงเกตผลลพธของนพจนทงสองน :
(1+2)×3 กบ 1+(2×3)
(1 + 2) * 3
9
วงเลบในนพจนทางคณตศาสตร
1 + (2 * 3)
7
ทงนขอใหระมดระวงการใชเครองหมายคณ * และหาร / ดวย เพราะถาหากไมระบวงเลบใหชดเจน ล าดบการค านวณกอาจจะไมเปนไปตามทตองการได
แบบฝกหด 2.2
มาลองค านวณคาของนพจนทางคณตศาสตรตอไปนกน
1. 3 × (4 + 1 − 2 × 5)
-15
2. 1+2+3
4+5+6[หมายเหต: โปรดเลอกการใชเครองหมายวงเลบดวยความระมดระวง]
0.4
3. 7 ×5+6
7+7
8
9.777777777777777
2 ** 5
32
เครองหมายยกก าลงในภาษา Python จะใชเครองหมาย ** (ดอกจนเขยนตดกน 2 ดวง) เชน ถาเราจะค านวณคาของนพจน 25 เราจะใชค าสงวา
เมอเราน าเครองหมายยกก าลงมาใสในนพจนทางคณตศาสตร ล าดบการท างานจะเปลยนไปตามนa) ท าในวงเลบกอนb) ท าเครองหมายยกก าลงc) ท าเครองหมายคณและหารd) ท าเครองหมายบวกและลบ
2 * (5 ** 3)250
2 * 5 ** 3
250
ดงนนเพอความปลอดภย เราจงนยมเขยนเครองหมายยกก าลง ** ตดกบตวเลข เพอใหเปนทรกนวา ถาหากไมมวงเลบ เราจะเรมท าจากเครองหมายยกก าลงกอนเสมอ เชน เราจะเขยนนพจน 2 × 53 ดวยค าสง 2 * 5**3 เปนตน
นอกจากนเรายงสามารถค านวณคาราก (root) ไดโดยการใชสตร:𝑟 𝑎 = 𝑎1/𝑟
เชน เราสามารถค านวณคา 38 (รากท 3 ของ 8) ไดโดยค าสง 8**(1/3)
ลองพมพ
8**(1/3)
2.0
แบบฝกหด 2.3เรามาลองค านวณคาของนพจนดงตอไปนกน
1. 35+3/4
553.920214840011
2. 2 (7 + 3 × 4)4.358898943540674
3. 5+62.5
23.5
+ 32
58.8076767100986
กจกรรม 3 : ตวแปร
• ตวแปรเปรยบเสมอนททดเลข เพอทจะไดน าผลลพธจากการค านวณคาของนพจนททดไว ไปใชตอไดในอนาคต• เนองจากกระดาษในคอมพวเตอรมขนาดใหญมาก เราจงตองจองพนทส าหรบทดเลขและตงชอเอาไว เวลาจะ
หยบสงททดไวกลบมาใชใหมจะไดไมหลงทนนเอง
a = 2**5 # ทดคาไวในตวแปร a
b = 5**(1/2) # ทดคาไวในตวแปร b
a**3 + b**3
32779.1803398875
เชน เราสามารถทดคาของ 25 เกบไวในตวแปร a และทดคาของ25 เกบไวในตวแปร b เพอใชตอในการค านวณ
ตอ ๆ ไปได
ซงในตวอยางนเราจะค านวณคาของ 𝑎3 + 𝑏3 กน
เราสามารถพมพคาตวแปรออกหนาจอไดดวยค าสง print เชนเดยวกบการแสดงขอความ เชน
print(a)print(b)32
2.23606797749979
แตบางครงการตงชอตวแปรดวยตวอกษรเดยว ๆ กจ ายาก เดยวมาอานทหลงกอาจจะลมอก เราเลยนยมตงชอตวแปรใหเปนค าทอานแลวจ าไดงายแทน เชน width (ความกวาง), height (ความสง), และ area (พนท) ดงตวอยางดานลางน
width = 40height = 30area = width * heightprint(area)1200
หากชอตวแปรประกอบดวยหลายค า ใหใชเครองหมาย _ (ขดเสนใต หรอ underscore) คนระหวางค า เพอใหอานงายขน เชน area_of_triangle พนทสามเหลยม เปนตน
width = 40
height = 30
area_of_triangle = 1/2 * width * height
print(area_of_triangle)
600.0
นอกจากนค าสง print ยงสามารถพมพคาออกหนาจอไดหลายๆ อนพรอมกน เชน
width = 40
height = 30
area_of_triangle = 1/2 * width * height
print('width =', width, 'and height =', height)
print('area = 1/2*width * height =',area_of_triangle)
width = 40 and height = 30
area = 1/2*width * height = 600.0
แบบฝกหด 3.1
1.ทดลองก าหนดคาในตวแปร a, b, และ c ในโคดดานลาง แลวสงเกตความเปลยนแปลงของผลลพธ
a = 10b = 20c = 30mean = (a + b + c) / 3print(mean) 20.0
2.จงเขยนโคดลงในชองวางใหสมบรณ เพอค านวณคาเฉลยฮารโมนก (harmonic mean) ของตวแปร a, b, และ c โดยคาเฉลยฮารโมนกมสตรดงน
ℎ𝑚𝑒𝑎𝑛 𝑎, 𝑏, 𝑐 =3
1𝑎+1𝑏+1𝑐
a = 10
b = 20
c = 30
hmean = 3/((1/a)+(1/b)+(1/c))
print(hmean)
16.363636363636363
3.เขยนโคดเพอค านวณปรมาตรของทรงร (ellipsoid) จากตวแปรตอไปนความกวางเกบอยในตวแปร widthความยาวเกบอยในตวแปร lengthความลกเกบอยในตวแปร depth
สตรของปรมาตรทรงรมดงน
𝑣𝑜𝑙𝑢𝑚𝑒 =4
3× 𝜋 × 𝑤𝑖𝑑𝑡ℎ × 𝑙𝑒𝑛𝑔𝑡ℎ × 𝑑𝑒𝑝𝑡ℎ
pi = 3.1415926 # คา 𝜋 (ไพ)ก าหนดความกวางในตวแปร width ใหเทากบ 20 ก าหนดความยาวในตวแปร length ใหเทากบ 30 ก าหนดความลกในตวแปร depth ใหเทากบ 40 ค านวณปรมาตรของทรงรแลวเกบในตวแปร volume และพมพคาในตวแปร volume
pi = 3.1415926
width = 20
length = 30
depth = 40
volume = 4*pi*width*length*depth/3
print (volume)
100530.9632
กจกรรม 4: การเกบรายการขอมล
ลสต (list)
oลสต (list) คอรายการทเราสามารถปรบเปลยนรายการไดตลอดเวลา
oลสตใชสญลกษณ [ ] คนดวยเครองหมายคอมมา ,
ลสต (list)
เชน ลสตของความสงนกเรยนในกลม 5 คน มดงน
[163.5, 150.0, 167.0, 161.25, 170.0]
เราสามารถน าลสตมาเกบในตวแปรได ท าใหตวแปรเดยวสามารถเกบคาไวไดหลายคา เชน
# ลสตความสงของนกเรยนในกลม
student_heights = [163.5, 150.0, 167.0, 161.25, 170.0]
print('student heights =', student_heights)
student heights = [163.5, 150.0, 167.0, 161.25, 170.0]
แบบฝกหด 4.1
ลองสรางลสตจากรายการสมาชกดงตอไปน [10, 20, 30, 40, 50] แลวเกบลงในตวแปร my_list และสงพมพ ตวแปร my_list
my_list = [10, 20, 30, 40, 50]
print(my_list)
[10, 20, 30, 40, 50]
ขนาดของลสต
เราสามารถหาขนาดของลสตไดดวยค าสง len ซงยอมาจากค าวา length เชน
len(student_heights)
แบบฝกหด 4.2
จงหาขนาดของลสตในตวแปร my_list ใสตวแปร my_length แลวพมพคาของตวแปรดงกลาวออกหนาจอ
my_list = [157, 158, 159, 160]
my_length = len(my_list)
print(my_length)
4
การเขาถงสมาชกภายในลสต
• เราสามารถเขาถงสมาชกแตละตวในลสตดวยการระบต าแหนงของสมาชกทเราตองการ
• การนบต าแหนง (index) ของสมาชก จะเรมตนจาก 0 เสมอ
• เชน student_heights[0] จะแทนสมาชกตวแรกของลสตความสงของนกเรยน
ในขณะท student_heights[1] จะแทนสมาชกตวท 2 ของลสต ฯลฯ
เชน
student_heights = [163.5, 150.0, 167.0, 161.25, 170.0]
print(student_heights[0])
print(student_heights[1])
print(student_heights[2])
163.5
150.0
167.0
หากเราระบต าแหนงเกนจากขนาดของลสต คอมพวเตอรจะฟองออกมาดวยค าวา IndexError ซงแปลวาระบคาต าแหนงเกนขนาดของลสต เชน
student_heights = [157, 159, 161, 162, 165] print(student_heights[10]) #ทงๆ ทลสต student_heights มขนาดแค 5 ตว
IndexError: list index out of range
การเปลยนแปลงสมาชกภายในลสต
เราสามารถเปลยนแปลงสมาชกภายในลสต โดยการใชเครองหมาย = เหมอนกบการก าหนดคาในตวแปร
เชน เราสามารถเปลยนสมาชกตวท 2 ของลสต student_heights จากคา 150.0 ใหเปนคา 180.0 ได
student_heights= [163.5, 150.0, 167.0, 161.25, 170.0]
student_heights[1] = 180.0
print(student_heights)
[163.5, 180.0, 167.0, 161.25, 170.0]
การเลอกบางสวนของลสต (slicing)
นอกจากเราจะสามารถเลอกสมาชกบางตวในลสตไดแลว เรายงสามารถเลอกบางสวนของลสตไดดวย
ค าสงเลอกบางสวน (slicing): ลสต[a : b] จะเลอกสมาชกตงแต index ท a จนถง index ท b−1
เชน ถาเราตองการเลอกสมาชกตงแตตวท 2 จนถงตวท 4 ของลสตในตวแปร student_heights เราจะใชค าสง
student_heights[1:4]
การเลอกบางสวนของลสต (slicing)
ค าสงเลอกบางสวนสามารถละจดจบไดดวย ลสต[a:]
เชน เราจะเลอกสมาชกตงแตตวท 2 เปนตนไปในลสต student_heights ดวยค าสง
student_heights[1:]
แบบฝกหด 4.5
เรามลสต my_list ทมสมาชก 10 ตวดงนmy_list = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
จงเลอกสมาชกตวท 3 จนถงตวท 7my_list[2:7][30, 40, 50, 60, 70]
จงเลอกสมาชกตวท 3 จนถงตวท 5my_list[2:5][30, 40, 50]
กจกรรม 5: ขอความ
ขอความ (string) กเปนขอมลรปแบบหนงทเราสามารถประมวลผลไดและทดไวในตวแปรไดเชนเดยวกน
เชน เราสามารถเกบขอความ 'Hello' ไวในตวแปร message ได
message = 'Hello'
print(message)
Hello
การตอขอความ
เราสามารถน าขอความ 2 อนมาตอกนไดดวยเครองหมาย +
เชน เราจะตอขอความในตวแปร message1 และ message2 เขาดวยกนไดดงน
message1 = 'Hello '
message2 = 'World!'
message = message1 + message2
print(message)
Hello World!
การท าซ าขอความ
นอกจากนเรายงสามารถท าซ าขอความไดดวยเครองหมาย *
เชน ถาเราตองการท าซ าขอความ hello 3 รอบ
3 * 'hello'
'hellohellohello'
แบบฝกหด 5.1
จงสรางตวแปร 2 ตวmessage1 เกบขอความ 'Hello'message2 เกบขอความ 'World'หลงจากนนใหท าซ า message1 จ านวน 3 ครง และ message2 จ านวน 5 ครง น าผลลพธทงสองอนมาตอกน แลวน ามาเกบในตวแปร message3 และสงพมพตวแปร message3
message1 = 3*'Hello'message2 = 5*'World'message3 = message1+ message2print(message3)HelloHelloHelloWorldWorldWorldWorldWorld
ขอความในฐานะของลสต
ในภาษา Python ขอความคอลสตของตวอกษรเราสามารถเขาถงตวอกษรสมาชกแตละตวในขอความได
message = 'wow'print(message[0])print(message[1])print(message[2])
wOw
ขอความในฐานะของลสต
นอกจากน เรายงสามารถเลอกบางสวนของขอความมาไดดวย เหมอนอยางทเราเลอกบางสวนของลสต
เชน เราสามารถเลอกตงแตตวอกษร index ท 1 จนถง index ท 3 ไดดวยค าสงน
message = 'flowers'
message[1:4]
'low'
แตทงนเราไมสามารถแกไขสมาชกในขอความได
message[1] = 'E'
TypeError: 'str' object does not support item assignment
แบบฝกหด 5.2
1.จงท าซ าขอความ 'aloha' จ านวน 3 ครงแลวเกบไวในตวแปร my_string และสงพมพตวแปร my_stringmy_string = 3*'aloha’ print(my_string)
alohaalohaaloha
2.จงเลอกบางสวนของขอความ girl='you are cute'เรมจากสมาชกตวท 1 จนถงตวท 3 แลวเกบลงในตวแปร my_love และสงพมพตวแปร my_lovegirl='you are cute'my_love = girl[0:4] print(my_love)
you
กจกรรม 6: การวนซ า
ในกจกรรม 4 และ 5 ตองใชวธ copy-paste แลวแกหมายเลขต าแหนงของสมาชกเอาทละต าแหนง ถาเกดลสตมสมาชกจ านวนมากขนมา เรากคงจะ copy-paste กนเยอะแนนอน เราสามารถใชวธการวนลป (loop) เพอท ากระบวนการเดมซ า ๆ ได
ลปฟอร (for-loop)
ลปฟอร (for-loop) ใชส าหรบท ากระบวนการเดมซ า ๆ กบสมาชกแตละตวในลสต ตามล าดบรปแบบค าสงของลปฟอรคอ
for <ตวแปร> in <ลสต>:
<กระบวนการ>
ค าสงนจะแทนสมาชกแตละตวในลสตดวยตวแปรทก าหนด แลวจงท าซ ากระบวนการนจนกวาจะใชสมาชกครบทกตวตามล าดบ
ลปฟอร (for-loop)
# สมาชกแตละตวของลสต student_heights จะแทนดวยตวแปร heightstudent_heights = [163.5, 150.0, 167.0, 161.25, 170.0]for height in student_heights:
# พมพคาของตวแปร height ออกหนาจอprint(height)
print('That is all')163.5
150.0 167.0161.25170.0That is all
กฎการยอหนาของภาษาไพธอน
1) กระบวนการทเราตองการท าซ าในลปทกชนด จะตองยอหนาถดเขาไปทางขวาเสมอ
2) ขนาดของยอหนาทนยมกนคอ เคาะ spacebar 4 ครง
3) เมอไรกตามทยอหนากลบออกมาทางซาย จะถอวาจบลปแลว
แบบฝกหด 6.1
1.พมพสมาชกแตละตวในลสต my_list ออกหนาจอโดยใชลปฟอรและค าสง printmy_list = ['hello', 'my', 'name', 'is', 'Pug']# ลปฟอรfor mylist in my_list:
print(mylist)
hello my name is Pug
แบบฝกหด 6.12.เพมคาสมาชกแตละตวในลสต my_numbers ตวละ 10 และพมพออกหนาจอmy_numbers = [50, 40, 30, 20, 10]# ลปฟอรfor number in my_numbers:
number=number+10print(number)
6050403020
ชวงจ านวน (range)
บางครงเราจ าเปนตองวนลปฟอรบนเลขต าแหนง index ดวยเราสามารถใชค าสง range(a , b) เพอสรางชวงจ านวนในลปฟอรได โดย a จะเปนคา index เรมตนและ b−1 จะเปนคาสดทาย เชนfor i in range(1, 6):
print('i =', i)i = 1
i = 2 i = 3 i = 4 i = 5
ชวงจ านวน (range)หากเราละคา a ไป เหลอเพยง range( b ) ชวงจ านวนจะเรมตนจาก 0 และสนสดท b−1for i in range(6):
print('i =', i)
i = 0 i = 1 i = 2 i = 3 i = 4 i = 5
นอกจากนเรายงสามารถก าหนดขนาดของกาวในการสรางชวงจ านวนได โดยใชค าสง range(a , b, c) เมอคา c คอขนาดของกาว
# กาวมขนาดเทากบ 2for i in range(0, 10, 2):
print('i =', i)i = 0
i = 2 i = 4 i = 6 i = 8
ขอดของการใชค าสง range ทก าหนดขนาดของกาวได กคอ เราสามารถไล index ยอนหลงไดดวย เชน
# กาวมขนาดตดลบ แปลวาเดนถอยหลงfor i in range(5, 0, -1):
print(i)
54321
แบบฝกหด 6.2
1.จงวนลปคา index i จากคา 1 ถง 5 แลวพมพคาของ 2 * i ออกมาทางหนาจอ# วนลปคา index i จาก 1 ถง 5for i in range(1, 5):
# พมพคา 2 * i ออกทางหนาจอprint(2*i)
2468
แบบฝกหด 6.2
2. จงวนลปคา index i จากคา 20 จนถง 15 แลวพมพคา i /10 ออกมาทางหนาจอ# วนลปคา index i จาก 20 จนถง 15for i in range(20, 15, -1):
# พมพคา i /10 ออกมาทางหนาจอprint(i/10)
2.01.91.81.71.6
แบบฝกหด 6.2
3. จงวนลปเพอแสดงสตรคณแม 3 ไลตงแต 3×1 จนถง 3×12 โดยจะไดผลลพธดงน3 * 1 = 33 * 2 = 63 * 3 = 9:::3 * 12 = 36
for i in range(1, 13):
print('3 *', i ,'=', 3*i)
ลปซอนลป (loop embedding)
เราสามารถเขยนลปซอนลปไดดวย หากวาโปรแกรมของเรามความซบซอนกวาลปเดยวเชน เราสามารถวนลปเพอไลสตรคณแม 3 ถงแม 5 ไดดงน
# วนลป index m เพอไลแมสตรคณจากแม 3 ถงแม 5for m in range(3, 6):
print('Multiplication of', m)# วนลป index i เพอไลตวคณจาก 1 ถง 12for i in range(1, 13):
print(m, '*', i, '=', m * i)# พมพบรรทดใหมคนระหวางแมprint()
Output:
ขอสงเกตจากการวนลปฟอรในการไลแมสตรคณ กคอ1) ในลปนอก เราจะวนลป index ของแมสตรคณกอน เชน แม 3 ถงแม 5 เปนตน2) สวนลปขางใน เราจะวนลป index ของตวคณในแตละแม คอตงแต 1 ถง 12
นนแสดงวา ถาเราจะเขยนโปรแกรมทสลบซบซอนได เราจะตองแยกแยะและถอดลปออกเปนชนนอกและชนในใหออก
แบบฝกหด 6.3
1.จงเขยนโปรแกรมเพอไลแมสตรคณจากแม 11 ถงแม 15 โดยแตละแมจะคณกบตวเลขตงแต 1 จนถง 12
for m in range(11, 16):
print('Multiplication of', m)
for i in range(1, 13):
print(m, '*', i, '=', m * i)
กจกรรม 7: การก าหนดเงอนไข
การก าหนดเงอนไข (branching) ในภาษาไพธอนจะใชค าสง if (แปลวา 'ถา') โดยจะมรปแบบดงน
if <เงอนไข>:
<กระบวนการ>
คอมพวเตอรจะท ากระบวนการทอยในดานใน ถาหากวาเงอนไขทก าหนดนเปนจรง
จะสงเกตวากระบวนการนจะตองยอหนาเหมอนกบค าสงลป for นนเปนเพราะวา การเวนวรรคยอหนาจะเปนการบอกสโคป (scope) ของค าสง วาเปนกระบวนการทอยภายใตค าสงทอยดานนอก การวนลปกจะวนภายใน scope ของตวเอง การก าหนดเงอนไขกจะท างานเฉพาะภายใน scope ของตวเองเทานน
เชน โปรแกรมดานลางนจะพมพขอความ 'Hurray!' ถาหากวาเงนเดอนในตวแปร salary มคามากกวา 10,000 บาท
ทดลองพมพและรนsalary = 5000if salary > 10000:
print('Hurray!') No Outputทดลองเปลยนคาตวเลขของตวแปร salary เปน 12000 แลวรนใหม Hurray!
รปแบบของเงอนไข
เราสามารถใชเครองหมายเปรยบเทยบทางคณตศาสตรไดเหมอนในวชาคณตศาสตร
เครองหมาย ความหมาย ตวอยาง< นอยกวา 3 < 5> มากกวา 5 > 3== เทากบ my_salary == your_salary!= ไมเทากบ my_salary != your_salary>= มากกวาหรอเทากบ my_salary >= your_salary<= นอยกวาหรอเทากบ my_salary <= your_salary
ถาเราลองพมพคาความจรงของเงอนไขออกมา เราจะไดเปนคา True หรอ False ซงคาความจรงกเปนขอมลประเภทหนงเหมอนกน เรยกวา คาตรรกะ (boolean) เชน
ทดลองพมพและรนprint(0.5 > 0.3) # Trueprint(0.25 < -1.0) # Falseprint(1.25 == 1.25) # Trueprint(1.30 != -0.78) # TrueTrue
False True True
ทงนเราสามารถใชเครองหมายเปรยบสามารถใชไดกบขอความได เชน
ทดลองพมพและรน
print('hello' == 'hello') # Trueprint('hello' != 'world') # Trueprint('hello' < 'alphabet') # False – คอมพวเตอรเรยงล าดบขอความตามตวอกษร True
True False
นอกจากนเรายงสามารถใชตวเชอมทางตรรกศาสตรไดดวย
ตวเชอม ความหมาย ตวอยางand และ a == b and x == yor หรอ a != b or c != dnot ไม not (a > b)( ) วงเลบ (a == b) and not (c > d)
ทดลองพมพและรน
v1 = 100v2 = 200v3 = 300print(v1 == v2 and v2 == v3) # False and False = Falseprint(v1 + v2 == v3 or v2 + v3 == v1) # True or False = Trueprint(not(v1 == v2 and v2 == v3) or v1 == v2) # not(False and False) or False = TrueFalse
TrueTrue
แบบฝกหด 7.1
จงตงเงอนไขเพอใหคอมพวเตอรพมพขอความวา 'You are tall.'
ถาหากวาความสงในตวแปร my_height มากกวา 170 ก าหนดใหตวแปร my_height มคาเทากบ 175
my_height = 175
if my_height>170 :
print('You are tall.')
You are tall.
แบบฝกหด 7.2
จงตงเงอนไขเพอใหคอมพวเตอรพมพขอความวา 'You are weathy and tall.' ถาหากวาเงนเดอนในตวแปร my_salary มากกวา 10000 และความสงในตวแปร my_height มากกวา 170
my_salary = 15000
my_height = 175
if (my_salary > 10000) and (my_height > 170) :
print('You are wealthy and tall.')
You are wealthy and tall.
แบบฝกหด 7.3
จงตงเงอนไขเพอควบคมการพมพความสงของนกเรยนแตละคน โดยจะพมพออกมาเฉพาะคนทมความสงมากกวา 160 เซนตเมตรเทานน [หมายเหต: จะสงเกตวาโจทยขอนจะใชทงลปฟอรและการตงเงอนไขประกอบกนไดดวย]student_heights = [163.5, 150.0, 167.0, 161.25, 170.0]for height in student_heights:
if height >160 :print(height)
163.5167.0161.25170.0
Reference
• ธนารกษ ธระมนคง และคณะ. (2562). การโปรแกรมภาษา Python (ไพธอน) เบ องตน. กรงเทพฯ: สมาคมปญญาประดษฐประเทศไทย.
• http://www.ayarafun.com