วิทย์ม.ต้น: พยายามโปรแกรมสร้างคำด้วยสัญญลักษณ์ในตารางธาตุ, วาดรูปด้วย 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()

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.