Tag Archives: python

วิทย์ม.ต้น: พยายามโปรแกรมสร้างคำด้วยสัญญลักษณ์ในตารางธาตุ, วาดรูปด้วย Turtle

สัปดาห์นี้เด็กๆม.2-3 พยายามหาวิธีเขียนคำภาษาอังกฤษด้วยสัญญลักษณ์จากตารางธาตุ ส่วนม.1 วาดรูปด้วย Turtle กันต่อจากสัปดาห์ที่แล้วครับ

สืบเนื่องมาจากโพสต์ให้เข้าไปชิงรางวัลใน Facebook นี้ครับ:

ปัญหาอย่างนี้เหมาะกับให้เครื่องจักรหาคำตอบให้มากครับ ผมถามเด็กๆว่าถ้าเราจะแก้ปัญหานี้อย่างไร พอช่วยกันคิดก็ได้คำตอบคร่าวๆว่าควรไปหาสัญญลักษณ์ตารางธาตุมาเก็บไว้ก่อน จากนั้นก็ลองสร้างฟังก์ชั่นที่รับคำภาษาอังกฤษเข้าไปแล้วพยายามแทนตัวอักษรทั้งหมดด้วยสัญญลักษณ์ในตารางธาตุโดยไม่ซ้ำกัน จากนั้นก็ป้อนคำภาษาอังกฤษทั้งหลายใส่ฟังก์ชั่นของเราไปเรื่อยๆดูว่าผลลัพธ์เป็นอย่างไร

เด็กๆหาสัญญลักษณ์มาใช้ได้จากหลายๆเว็บ เช่นอาจจะก๊อปปี้จากหน้า https://www.thoughtco.com/element-list-names-atomic-numbers-606529 แล้วเอามาใส่ในสตริง element_data อย่างนี้:

จากนั้นก็หัดใช้ splitlines() เพื่อจัดการแต่ละบรรทัดในสตริง:

หัดใช้ split เพื่อแบ่งข้อมูลที่ถูกคั่นด้วยตัวแบ่ง ในที่นี้คือ เว้นวรรคขีดเว้นวรรค จึงใช้ …split(” – “):

เก็บสัญญลักษณ์ที่แยกออกมาได้ไว้สักที่ เช่นในที่นี้เก็บไว้ในลิสต์ symbols แล้วใช้ตรวจว่าสัญญลักษณ์อะไรอยู่ในตารางธาตุบ้าง:

จากนั้นก็เริ่มดูได้ว่าคำแต่ละคำมีสัญญลักษณ์ธาตุอะไรบ้าง เช่นคำว่า “bacon” ตรวจได้อย่างนี้:

พอรู้ว่ามีธาตุอะไรบ้าง เราก็ต้องพยายามเรียงธาตุเหล่านั้นเป็นคำที่ต้องการ แต่เราควรตรวจสอบเสียก่อนว่าธาตุต่างๆมีตัวอักษรพอเพียงที่จะเขียนคำได้หรือไม่ ถ้ามีตัวอักษรเพียงพอ ก็ควรดูว่าธาตุแต่ละอันสามารถอยู่ในตำแหน่งไหนได้บ้าง จากนั้นก็เรียงแบบที่เป็นไปได้ดูว่าแบบไหนสะกดเป็นคำที่เราต้องการ ส่วนนี้เป็นส่วนให้เด็กๆกลับไปคิดที่บ้านกันครับ

สำหรับม. 1 เราเล่น Turtle กันต่อ วาดนู่นวาดนี่ตามความสนใจ ตัวอย่างเช่นเต่าหกตัวเดินแบบเมาๆ:

import turtle
import random

turtles = [turtle.Turtle() for i in range(6)]
colors = ["red", "blue", "black", "brown", "orange", "green"]
for t in turtles:
    t.speed("fastest")
    t.shape('classic')

for i in range(10000):
    for t,c  in zip(turtles,colors):
        #step = random.randint(0,30)
        #angle = random.randint(-90,90)
        step = 10
        angle = random.choice([0,180,90,-90])
        t.color(c)
        t.forward(step)
        t.left(angle)

หรือลากเส้นไปมาดูว่าแบบไหนสวย เช่นอันนี้:

import turtle

t = turtle.Turtle()
t.speed("normal")
span = 400
step = 20
t.shape('circle')

for i in range(0,span+step,step):
    t.penup()
    t.goto(0,i)
    t.pendown()
    t.goto(span-i, 0)

    t.penup()
    t.goto(0,i)
    t.pendown()
    t.goto(-span+i, 0)

    t.penup()
    t.goto(0,-i)
    t.pendown()
    t.goto(span-i, 0)

    t.penup()
    t.goto(0,-i)
    t.pendown()
    t.goto(-span+i, 0)

t.hideturtle()

วิทย์ม.ต้น: วาดรูปในไพธอนด้วยเต่า (Turtle)

สัปดาห์นี้เด็กๆหัดใช้ Turtle ในไพธอนกันครับ เราค้นหาในเว็บเพื่อดูคำสั่งต่างและตัวอย่างที่เราเอามาทดลองใช้และแก้ไขกัน เด็กๆพยายามดัดแปลงให้เป็นภาพสวยๆหรือเขียนเป็นชื่อตัวเองกัน

ข้อมูลอ้างอิงว่า Turtle มีคำสั่งอะไรให้ใช้บ้าง

ตัวอย่างวิธีใช้ที่ Tutorial Points

ตัวอย่างวิธีใช้ที่ Simplified Python

คลิปวิธีใช้:

วิทย์ม.ต้น: เขียนโปรแกรมสร้างโจทย์ตัวอักษร

สัปดาห์นี้เด็กๆม.1-3 หัดเขียนโปรแกรมไพธอนเพื่อสร้างโจทย์ตัวอักษร (ต่อเนื่องมาจากสัปดาห์ที่แล้วที่เขียนโปรแกรมไล่แทนค่าตัวอักษรเพื่อแก้โจทย์ทำนองนี้)

(โค้ดต่างๆแบบ Jupyter notebookโหลดได้ที่นี่ หรือดูออนไลน์ได้ที่นี่นะครับ)

เด็กๆพยายามแทนค่าตัวเลขแต่ละตัวด้วยตัวอักษร บางคนใช้ดิกชันนารี บางคนใช้สตริง วิธีที่ตรงไปตรงมาที่สุดอาจเป็นประมาณนี้สำหรับเด็กๆที่รู้จัก list comprehension แล้ว (ถ้าอยากรู้เรื่องไปดูที่ Comprehending Python’s Comprehensions หรือดูที่ส่วน “การสร้างลิสต์จาก for” ที่หน้านี้ นะครับ)

ถ้าไม่รู้จัก list-comprehension ก็ใช้ for loop ได้ประมาณนี้:

พอแปลงเลขเป็นตัวอักษรได้ ก็ใส่ตัวตั้งสองตัว x, y แล้วให้คอมพิวเตอร์คำนวณค่า x+y, x-y, x*y, x/y แล้วแปลงทั้งหมดเป็นตัวอักษร A-J แทนเลข 0-1 โดยระวังว่าถ้าผลลัพธ์มีตัวเลขที่ไม่มีอยู่ในพวกตัวตั้ง x, y เราจะต้องไม่แทนค่าตัวเลขด้วยตัวอักษร

เพื่อไม่ให้เดาคำตอบได้ง่ายเกินไป เราไม่ควรแทน 0 ด้วย A, 1 ด้วย B, …, 9 ด้วย J เสมอ เราจึงอาจสลับอักษร A-J ให้เป็นลำดับอื่นก่อนแทนค่า เราสามารถทำได้ด้วย random.shuffle( ) แล้วแทนค่าด้วย translate( ) ประมาณนี้:

หน้าตาฟังก์ชั่นสร้างโจทย์ตัวอักษรก็อาจมีหน้าตาประมาณนี้:

หน้าตาโจทย์ที่ได้ก็จะเป็นประมาณนี้:

สำหรับเด็กม. 1 ผมเอาภาพคอมพิวเตอร์ยุคแรกๆเช่น ENIAC ว่าเมื่อก่อนเขาโปรแกรมกันอย่างไร, ภาพเครื่องคำนวณสมัยกรีกโบราณ และภาพคุณ Katherine Johnson ที่เป็นนักคณิตศาสตร์ทำงานให้ NASA ที่เด็กๆรู้จักจากภาพยนต์เรื่อง Hidden Figures มาให้ดูด้วยครับ

คอมพิวเตอร์อิเล็กทรอนิกส์เครื่องแรกๆของโลกชื่อ ENIAC ครับ ใหญ่เต็มห้องเลย
ENIAC in Philadelphia, Pennsylvania. Glen Beck (background) and Betty Snyder (foreground) program the ENIAC in building 328 at the Ballistic Research Laboratory ภาพจาก U.S. Army Photo [Public domain]
เครื่องจักรคำนวณสมัยกรีกโบราณ เรียกว่า Antikythera mechanism เป็นฟันเฟืองต่อกันอยู่ พอหมุนๆแล้วคำนวณตำแหน่งดวงดาว เทศกาลโอลิมปิก สุริยุปราคา ฯลฯ ได้ครับ อายุประมาณ 2,000 ปี
คุณ Katherine Johnson ครับ
Katherine G. Johnson Computational Research Facility ribbon-cutting ceremony in the Reid Conference Center. Honored guests include Katherine G. Johnson and members of her family, Mayor Donnie Tuck, Senator Warner and Governor McAuliffe. Margot Lee Shetterly, author of “Hidden Figures,”