การส่งผ่านค่าแบบ - assumption...

12
โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ 4/6 โโโโโโโโโโ 2562 Worksheet 7 (7 ส.ส. 2562) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Python โโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโ sum(a,b) โโโโโโโโโโโโโโโโโโโโโโ 2 โโโโโโ โโโโโโโโโ 1 โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโ 7 โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโ sum() โโโโโโโ return โโโโโโโโ โโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโ 2 โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 9 โโโ โโโโโโโโโโโโโโโโโโโโโ result โโโโโโโโโโโโโโโโ return โโโโโโโโโโโโโโโโ sum() โโโโโโโโโโโโโโโ โโโโโโ return โโโโโโโโโโโโโ sum() โโโโโโโโโโโโโ โโโโโโโโโโโ

Upload: others

Post on 27-Jan-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: การส่งผ่านค่าแบบ - Assumption Universityportal.scitech.au.edu/.../08/Samsen_worksheet_7_2019.docx · Web viewจากต วอย างม การสร

โรงเรยนสามเสนวทยาลย ชนมธยมศกษาปท 4/6 ปการศกษา 2562

Worksheet 7 (7 ส.ค. 2562)

สปดาหนนกเรยนจะไดเรยนรเพมเตมเกยวกบการสรางและเรยกใชฟงกชนในภาษา Python จากต วอย างด านล าง เราสามารถเรยกใชฟ งก ช น sum(a,b) จากตวอยางดานลางได 2 รปแบบ

รปแบบท 1 เปนการเรยกใชฟงกชนทเราสรางขนมาในฟงกชนอน เชน การเรยกใชทแสดงในบรรทดท 7 ถานกเรยนสงเกตใหดจะพบวาถงแมฟงกชน sum() จะมการ return คาออกมา ในรปแบบนเราไมจำาเปนตองมตวแปรอนมารบคา

รปแบบท 2 คอการเรยกใชทแสดงบรรทดท 9 คอมการกำาหนดตวแปรชอ result มารบคาทมการ return ออกมาจากฟงกชน sum() ซงในรปแบบนคาท return มาจากฟงกชน sum() จะสามารถนำาไปใชตอไปได

1) ใหนกเรยนเขยนฟงกชนชอ avg_max(a,b,c) เพอรบคาตวเลขทงหมดสามคา คำานวณหาคาเฉลยและคาสงสด และทำาการ return

Page 2: การส่งผ่านค่าแบบ - Assumption Universityportal.scitech.au.edu/.../08/Samsen_worksheet_7_2019.docx · Web viewจากต วอย างม การสร

โรงเรยนสามเสนวทยาลย ชนมธยมศกษาปท 4/6 ปการศกษา 2562

คาทงสองออกมาจากฟงกชน หลงจากนนใหแสดงผลทงสองคาบนหนาจอ

2) ใหนกเรยนเขยนฟงกชนชอ avg_list(num_list) เพอทำาการรบคาตวแปรประเภท list ทมเลขจำานวนเตม (integer) และทำาการคำานวณหาคาเฉลย และสงคาดงกลาวออกมาจากฟงกชน หลงจากนนใหแสดงผลคาเฉลยบนหนาจอ

การสงผานคาแบบ Reference และ Value ในภาษา Python (Pass by reference vs value)

การสงผานคาในภาษาโปรแกรมมสองรปแบบหลกไดแก 1) Pass by Reference และ 2) Pass by Value ในภาษา Python จะเปนรปแบบท 1 (ในภาษาโปรแกรมอนอาจใชรปแบบทตางกน) จากภาพดานลางสำาหรบรปแบบ Pass by Reference หากคาของตวแปรมการเปลยนแปลงในฟงกชน คาทเปลยนไปกจะสะทอนไปยงตวแปรนนทอยนอกฟงกชน เนองจากการผานคาในลกษณะนเปนการสงตำาแหนงทอยในเมมโมรของคาตวแปรเขาไปในฟงกชน ซงจะเกดการแกไขคาทตำาแหนงนนเลย

ในขณะทรปแบบท 2 จะเปนการสงเฉพาะคาเขาไปในฟงกชน (ทำาการคดลอกคาไวในตำาแหนงเมมโมรตำาแหนงใหม ดงนนการแกไขคาจะไมสงผลกระทบตอคาตงตน

Page 3: การส่งผ่านค่าแบบ - Assumption Universityportal.scitech.au.edu/.../08/Samsen_worksheet_7_2019.docx · Web viewจากต วอย างม การสร

โรงเรยนสามเสนวทยาลย ชนมธยมศกษาปท 4/6 ปการศกษา 2562

Page 4: การส่งผ่านค่าแบบ - Assumption Universityportal.scitech.au.edu/.../08/Samsen_worksheet_7_2019.docx · Web viewจากต วอย างม การสร

โรงเรยนสามเสนวทยาลย ชนมธยมศกษาปท 4/6 ปการศกษา 2562

จากตวอยางดานลาง

Page 5: การส่งผ่านค่าแบบ - Assumption Universityportal.scitech.au.edu/.../08/Samsen_worksheet_7_2019.docx · Web viewจากต วอย างม การสร

โรงเรยนสามเสนวทยาลย ชนมธยมศกษาปท 4/6 ปการศกษา 2562

จากตวอยางมการสรางฟงกชนทสรางขนมาทงหมดสองฟงกชนไดแก chagelist() และ changelist2() ฟงกชนแรกทำาการเพมเลข 5 เขาไปใน list และฟงกชนทสองทำาการเพมเลข 6 เขาไปใน list

จาก code เรมตนกำาหนดให mylist มเลขจำานวนเตมสตวไดแก 1,2,3 และ 4 ทบรรทด 13 เราทำาการเรยก, print(mylist) เพอแสดงตวเลขทอยใน list ค อ [1,2,3,4] บ น ห น า จ อ ห ล ง จ า ก น น เ ร า เ ร ย ก ฟ ง ก ช น changelist2() ซงเราผานคา mylist เขาไปในฟงกชน (เปน Pass by Reference) ซงหากเราทำาการแกไขหรอเปลยนอะไรใน mylist กจะมผลตอ mylist โดยตรง ในบรรทดท 8 changelist2(mylist) ทำาการเรยกฟงกชน changelist(mylist)

ในฟงกชน chagelist() เราทำาการเพมเลข 5 และพมพคาออกบนหนาจอดวย print(mylist) ผลทไดคอ [1,2,3,4,5] ทแสดงบนหนาจอ หลงจากนนโปรแกรมจะมาทำางานตอทบรรทดท 9 ซงเราเพมเลข 6 เขาไปใน mylist และทำาการพมพ mylist อกครง ทำาใหเราได [1,2,3,4,5,6] หลงจากนนเราทำาการเรยก ll print(mylist) again ทบรรทด 15 ซงแสดงคาใน mylist เปนครงท 4

อยางไรกตามหากเรามการสราง object ใหม (ในทนคอตวแปรใหม) ในฟงกชน ถงแมตวแปรนนจะมชอเหมอนกบตวแปรทเราผานคาเขามา คาทเปลยนแปลงไปในตวแปรใหม จะไมสงผลกบตวแปรทอยนอกฟงกชน ยกตวอยางเชน

Page 6: การส่งผ่านค่าแบบ - Assumption Universityportal.scitech.au.edu/.../08/Samsen_worksheet_7_2019.docx · Web viewจากต วอย างม การสร

โรงเรยนสามเสนวทยาลย ชนมธยมศกษาปท 4/6 ปการศกษา 2562

จะเหนไดวาในบรรทดท 10 เรากำาหนดตวแปร mylist ขนมาโดยมค า [10,20,30] และเราทำาการ print(mylist) ในบรรทด 11 คาทแสดงบนหนาจอ จะเปน [10,20,30] ซงเปนคนละคากบทอยใน mylist (ทไดกำาหนดไวในบรรทดท 1) ทเราสงเขามา

ถาหากเราตองการใหตวแปรใหมทกำาหนดในฟงกชน เมอมการเปลยนแปลงคาในตวแปรนนแลว คาทเปลยนไปใหมผลกบตวแปรทอยนอกฟงกชน ค ำาตอบคอเราตองทำาการสงคากลบดวยคำาสง return จากตวอยางดานลางบรรทดท 12 และในบรรทดท 15 เรากกำาหนดใหตวแปร mylist มารบคาทสงออกมา

Page 7: การส่งผ่านค่าแบบ - Assumption Universityportal.scitech.au.edu/.../08/Samsen_worksheet_7_2019.docx · Web viewจากต วอย างม การสร

โรงเรยนสามเสนวทยาลย ชนมธยมศกษาปท 4/6 ปการศกษา 2562

3) จากตวอยางโปรแกรมดานลาง เราตองการนบจำานวนตวอกษร m ในคำา (myword) ทเราสงเขาไปในฟงกชน และเมอเราทำาการพมพคา count ผลปรากฏวาคาออกมาเปน 0 จงหาสาเหตวาเกดจากปญหาใด และตองแกปญหาอยางไร

คำาตอบ _______________________________________

Page 8: การส่งผ่านค่าแบบ - Assumption Universityportal.scitech.au.edu/.../08/Samsen_worksheet_7_2019.docx · Web viewจากต วอย างม การสร

โรงเรยนสามเสนวทยาลย ชนมธยมศกษาปท 4/6 ปการศกษา 2562

4) จากตวอยาง Python code ดานลาง จงตอบคำาถามตอไปน

- เราสามารถตอบผดไดกครง (การตอบผดคอไมไดใสคา yes หรอ no) ___________________

- argument ใน function ask_ok() ลำาดบทเทาไหรเปนตวกำาหนดจำานวนครงทสามารถตอบผดได ___________

- ในฟงกชนนมจำานวน arguments ทงหมดทตว _________

Page 9: การส่งผ่านค่าแบบ - Assumption Universityportal.scitech.au.edu/.../08/Samsen_worksheet_7_2019.docx · Web viewจากต วอย างม การสร

โรงเรยนสามเสนวทยาลย ชนมธยมศกษาปท 4/6 ปการศกษา 2562

- ตอนเรยกฟงกชนทำาไมมการสงคาเขาแคเพยงหนงคา ซงนอยกวาจำานวน argument ทเรากำาหนด

ใหนกเรยนลองเรยกฟงกชนตามตวอยางขางลาง และลองใสคาอนทไมใช yes หรอ no และตอบคำาถาม

ask_ok('OK to overwrite the file?', 2)

- จำานวนครงทตอบผดไดคอ _____________________________________________________________

และใหลองask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')

- อะไรทเปลยนไปจากตวอยางทแบบฝกหด 4 ___________________________________________________________

5) ใหเขยนฟงกชนทมช อวา replacevowel(input_str, v) ซงรบคาตวแปรชนด string ชอ input_str และตวแปร v ซงเปนสระทตองการใหถกแทนท ในฟงกชนใหทำาเอาสระทงหมดออกจากตวแปรทสงเขามา สระทเอาออกไปใหแทนทดวยเครองหมาย _ หลงจากนนใหสงคาตวแปรออก

หลงจากนนใหเขยน Python code เพอรบประโยคจากคยบอรดและเกบไวทตวแปร input_str และรบตวอกษรทเปนสระ (a, e, i,

Page 10: การส่งผ่านค่าแบบ - Assumption Universityportal.scitech.au.edu/.../08/Samsen_worksheet_7_2019.docx · Web viewจากต วอย างม การสร

โรงเรยนสามเสนวทยาลย ชนมธยมศกษาปท 4/6 ปการศกษา 2562

o ห ร อ u) แ ล ะ เ ก บ ไ ว ท ต ว แ ป ร v ท ำา ก า ร เ ร ย ก ฟ ง ก ช น replacevowel(input_str, v) และพมพผลลพธทได

Hint: ฟงกชนในตวอยางดานลางทำาการแทนทอกษร a และ b ดวยเครองหมาย =

Note: ในภาษา Python เราสามารถกำาหนด syntax ในรปแบบ list เชน [“a”, “b”] หรอในรปแบบ '''ab''' เพอระบถงกลมตวอกษรทเราตองการใชงาน

6) ใหทำาการปรบปรงฟงกชนในแบบฝกหดท 5 นอกเหนอจากการแทนทสระดวยเครองหมาย _ ใหทำาการแทนทตวเลขทงหมดรวมถงเครองหมายทางคณตศาสตรดวยเครองหมาย _ ยกตวอยางเชน

7) ใหทำาการปรบปรงฟงกชนกอนหนา โดยใหทำาการa.แทนทสระ a และ e ดวยเครองหมาย * b.แทนทสระ i, o และ u ดวยเครองหมาย %

Page 11: การส่งผ่านค่าแบบ - Assumption Universityportal.scitech.au.edu/.../08/Samsen_worksheet_7_2019.docx · Web viewจากต วอย างม การสร

โรงเรยนสามเสนวทยาลย ชนมธยมศกษาปท 4/6 ปการศกษา 2562

c. แทนทตวเลขดวยเครองหมาย $ และd.แทนทอกษรตวใหญ (Capital letter) ดวยเครองหมาย +

8) ใหนกเรยนเขยนฟงกชน reflect_string(str1, str2) โดยฟงกทำาหนาทเปรยบเทยบวาคำาทงสองคำา str1 และ str2 เปนคำาทมตวอกษรเรยงสลบจากหนาไปหลงซงกนและกนหรอไม (อาจารยขอใชคำาศพทวาคำากระจก) เชน superman และ namrepus ถอวาเปนคำากระจก ถาใชใหพมพวาคำาทงสองเปนคำากระจก เชน “str1” and “str2” are reflected words ถาไมใชให พมพประโยค They are not reflected words.

9) ใหนกเรยนเขยนฟงกชน AddOnlyMatch(numlist1, numlist2) ทรบตวแปรประเภท list สองตวโดย list ทงสองมขนาดเทากน หนาทของฟงกชนคอใหเปรยบตวเลขของทงสอง list ทตำาแหนงเดยวกน ถาเปนเลขคหรอเลขคเหมอนกน ใหทำาการบวกเลขทงสองแลวใสไวใน list ใหม ถาเปนเลขตางกน เชน เลขคกบเลขค ในใสคา 0 ลงใน list แลวทำาการสงคา list ใหม (อาจจะตงชอเปน outlist) ออกนอกฟงกชนเพอทำาการแสดงคาบนหนาจอ

เชนnumlist1 = [1, 3, 5, 6, 7]numlist2 = [2, 1, 2, 1, 3]outlist ควรจะมคา [0, 4, 0, 0, 10]