สัปดาห์นี้เด็กๆม.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()