φυβλαςのβλογ
บล็อกของ phyblas



ภาษา python เบื้องต้น บทที่ ๖: ความเป็นจริงเท็จและการตั้งเงื่อนไข
เขียนเมื่อ 2016/03/04 00:58
แก้ไขล่าสุด 2024/02/22 11:00
 

ในการทำงานกับคอมพิวเตอร์นั้นมักจะต้องมีการแบ่งแยกเงื่อนไขเพื่อที่จะให้คอมทำงานแตกต่างกันไปตามสถานการณ์

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

ในคอมพิวเตอร์เองก็สามารถมีการแบ่งแยก เช่นเวลาคำนวณ เจอจำนวนบวกให้คำนวณอย่างหนึ่ง เจอจำนวนลบให้คำนวนแบบหนึ่ง เป็นต้น

หากมีการตั้งเงื่อนไขก็จะสร้างให้เกิดทางแยกในการทำงาน และทำงานได้ยืดหยุ่นกว้างขวางมากขึ้น

ในภาษาไพธอน (รวมถึงภาษาโปรแกรมอื่นๆส่วนใหญ่) คำสั่งที่ใช้ในการตั้งเงื่อนไขก็คือ if และ else



การใช้ if และ else เพื่อตั้งเงื่อนไข

โครงสร้างของการใช้ if เป็นดังนี้
if เงื่อนไข:
    คำสั่งที่จะให้ทำเมื่อเงื่อนไขเป็นจริง
else เงื่อนไข:
    คำสั่งที่จะให้ทำเมื่อเงื่อนไขเป็นเท็จ

ยกตัวอย่าง
x = int(input('1+1 เท่ากับเท่าไหร่? : '))
if x==2:
    print('ถูกต้องนะคร้าบ')
else:
    print('ไม่น่าเชื่อว่าจะมีคนตอบผิด')

ผลที่ได้ก็คือเริ่มมาโปรแกรมจะถามคำถามว่า "1+1 เท่ากับเท่าไหร่?" แล้วก็ให้พิมพ์คำตอบลงไป

ถ้าพิมพ์ 2 ลงไป ก็คือตอบถูก จะมีข้อความ "ถูกต้องนะคร้าบ" ขึ้นมา

แต่ถ้าพิมพ์ตัวเลขค่าอื่นลงไป จะมีข้อความ "ไม่น่าเชื่อว่าจะมีคนตอบผิด" ขึ้นมา

จากตัวอย่าง สรุปโครงสร้างโดยรวมก็คือ

บรรทัดแรกพิมพ์คำว่า if แล้วก็ตามด้วยเงื่อนไขจากนั้นก็ต้องพิมพ์โคลอน : จากนั้นขึ้นบรรทัดใหม่แล้วก็เขียนคำสั่งที่ต้องการให้ทำเมื่อเงื่อนไขเป็นจริงไว้ โดยที่บรรทัดถัดมานั้นจะต้องมีการเคาะเว้นวรรค

ในส่วนคำสั่งที่จะทำเมื่อเงื่อนไขเป็นจริงนั้นจะมีกี่บรรทัดก็ได้ โดยสิ่งที่เป็นตัวบ่งบอกว่าคำสั่งส่วนไหนเป็นส่วนที่จะให้ทำเมื่อเงื่อนไขเป็นจริงก็คือ การร่น (indent)

ซึ่งหมายถึงการเคาะเครื่องหมายเว้นวรรค (spacebar) ให้ตัวหนังสืออยู่ห่างออกมาทางขวาเมื่อเทียบกับคำว่า if และ else

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

ในภาษาไพธอนการร่นกลายเป็นสิ่งบังคับตายตัว ข้อดีก็คือเราไม่จำเป็นต้องใส่วงเล็บปีกกาหรือใช้สัญลักษณ์ใดๆเพื่อบ่งบอกขอบเขต

การร่นนั้นจะร่นโดยการเคาะกี่ครั้งก็ได้ แต่โดยทั่วไปแล้วมักจะร่นไป ๔ ช่อง อีดิเตอร์ส่วนใหญ่ที่รอบรับการเขียนภาษาไพธอนเวลาที่เราพิมพ์โคลอน : แล้วกด enter เพื่อขึ้นบรรทัดใหม่จะมีการร่นให้ ๔ ช่องโดยอัตโนมัติ



เมื่อจบคำสั่งที่ให้ทำเมื่อเงื่อนไขเป็นจริงแล้ว ขั้นตอนถัดมาก็คือใส่ส่วนของคำสั่งที่จะให้ทำเมื่อเงื่อนไขเป็นเท็จ ซึ่งเขียนได้โดยใช้ else

else นั้นจะต้องยกเลิกการร่นให้อยู่ในตำแหน่งเดียวกับ if จากนั้นก็ตามด้วยโคลอน : แล้วก็ขึ้นบรรทัดใหม่พร้อมกับร่นแล้วก็เขียนคำสั่งที่ต้องการให้ทำเมื่อเงื่อนไขเป็นเท็จไว้ตรงนั้น

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

ลองดูอีกตัวอย่างหนึ่ง เช่น โปรแกรมหาค่าสัมบูรณ์ของค่าที่ป้อนเข้าไป

x = float(input())
if(x<0):
    print("ค่าติดลบ") x = -x
else:
    print("ค่าไม่ติดลบ")
print('ค่าสัมบูณ์คือ', x)

ในกรณีนี้ถ้าป้อนค่ามากกว่าหรือเท่ากับ 0 ลงไปจะทำให้เงื่อนไขเป็นเท็จ แล้วก็จะแสดงผลว่าค่าเป็นบวก

แต่ถ้ามากกว่า 0 เงื่อนไขจะเป็นจริง ก็จะมีการแสดงผลว่าค่าเป็นลบ พร้อมมีการคำนวณติดลบ

แต่ไม่ว่าจะเข้าเงื่อนไขอะไร สุดท้ายแล้วก็จะมีการทำสิ่งที่อยู่บรรทัดถัดไปซึ่งอยู่ในตำแหน่งที่เท่าเทียมกับ if และ else คือไม่มีการร่น นั่นคือคำสั่ง print ที่พิมพ์ค่า x ออกมา

อนึ่ง เงื่อนไขที่อยู่หลัง if อาจใส่วงเล็บครอบก็ได้ ให้ผลไม่ต่างกันกับไม่ใส่ ดังตัวอย่างที่เห็นนี้ และจะเห็นว่าในกรณีมีวงเล็บจะไม่จำเป็นต้องเว้นวรรคหลัง if

แม้ภาษาไพธอนจะไม่จำเป็นต้องใสวงเล็บหลัง if แต่การใส่วงเล็บนั้นจำเป็นในหลายภาษา เช่นภาษาซี, ฟอร์แทรน, จาวาสคริปต์, php, ฯลฯ

เนื่องจากการใส่วงเล็บทำให้การเขียนดูสวยงามมีระเบียบกว่า ดังนั้นในตัวอย่างต่อจากนี้ไปทั้งหมดจะใส่วงเล็บหลัง if เสมอ หากใครจะนำโค้ดไปเขียนตามโดยตัดวงเล็บออกไปก็ทำงานได้ไม่ต่างกัน

กรณีที่โค้ดมีอยู่เพียงบรรทัดเดียวก็สามารถเขียนคำสั่งต่อจาก if ได้เลยโดยไม่ต้องขึ้นบรรทัดใหม่ก็ได้ เช่นตัวอย่างแรกอาจเขียนใหม่เป็น
x = int(input('1+1 เท่ากับเท่าไหร่? : '))
if(x==2): print('ถูกต้องนะคร้าบ')
else: print('ไม่น่าเชื่อว่าจะมีคนตอบผิด')

หากไม่มีสิ่งที่ต้องการให้ทำเมื่อเงื่อนไขเป็นเท็จก็อาจไม่ต้องใส่ else แต่ใส่แค่ if เฉยๆก็ได้ เช่น
x = int(input('โปรดระบุอายุผู้เข้าชม'))
if(x<18): print('คำเตือน: ผู้ชมอายุต่ำกว่า 18 ปีไม่แนะนำให้เข้าชม กรุณาใช้วิจารณญาณ')

ผลลัพธ์
โปรดระบุอายุผู้เข้าชม: 17
คำเตือน: ผู้ชมอายุต่ำกว่า 18 ปีไม่แนะนำให้เข้าชม กรุณาใช้วิจารณญาณ

แต่ถ้าใส่เลข 18 ขึ้นไปจะไม่มีอะไรขึ้นมา



การเขียนผังงาน

เพื่อให้เข้าใจการทำงานของโปรแกรมได้ง่ายอาจต้องมีการเขียนผังงาน (flow chart) เพื่อให้เห็นภาพชัดเจนขึ้น

ตัวอย่างแผนภาพผังงานสำหรับตัวอย่างแรก





การเขียนนิพจน์ทางตรรกศาสตร์

จากตัวอย่างที่ผ่านมาจะเห็นเงื่อนไขที่ถูกเขียนอยู่หลัง if นั้นอยู่ในรูปของตัวแปรหรือข้อมูลสองตัวเปรียบเทียบกันแล้วพิจารณาว่าสิ่ง ที่เขียนนั้นเป็นจริงหรือเท็จ การเขียนในลักษณะนี้เรียกว่าเป็น นิพจน์ทางตรรกศาสตร์

เมื่อพิจารณาเงื่อนไขแล้วก็จะส่งค่าบูลออกมา โดยหากเป็นจริงจะให้ค่า True หากเป็นเท็จจะให้ค่า False

การเขียนนิพจน์แสดงเงื่อนไขในการเขียนโปรแกรมนั้นมีความใกล้เคียงกับในทาง คณิตศาสตร์ แต่ก็มีค่าออกไปบ้าง ดังนั้นจำเป็นต้องทำความเข้าใจสักหน่อย

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

ความจริงแล้วเป็นเพราะเครื่องหมายเท่ากับอันเดียว = กับสองอัน == นั้นถือว่ามีความหมายต่างกัน ใช้ในคนละสถานการณ์

หากเขียนเครื่องหมายเท่ากับ = ตัวเดียวจะเป็นการป้อนค่าให้กับตัวแปร ซึ่งในกรณีนี้จะไม่สามารถสลับสิ่งที่อยู่ทางซ้ายและขวาของ = ได้

แต่หากเขียนสองอัน == จะหมายถึงการเปรียบเทียบว่าซ้ายกับขวาว่าเท่ากันหรือเปล่า ถ้าเท่ากันก็คืนค่า True ถ้าไม่เท่ากันก็คืนค่า False สิ่งที่อยู่สองข้างของ == นั้นสามารถสลับกันได้



การเปรียบเทียบระหว่างข้อมูล ๒ ตัว

x < y หมายถึง x น้อยกว่า y
x <= y x น้อยกว่าหรือเท่ากับ y
x > y x มากกว่า y
x >= y x มากกว่าหรือเท่ากับ y
x == y x เท่ากับ y
x != y x ไม่เท่ากับ y



การเปรียบเทียบระหว่างข้อมูลต่างชนิดกัน

ข้อมูลที่เป็นตัวเลขทั้งจำนวนจริงและจำนวนจริงสามารถนำมาเปรียบเทียบกันได้ตามปกติ เช่น
3 > 3.1 # ได้ False
7.0 == 7 # ได้ True

แต่จำนวนจริงหรือจำนวนเต็มไม่สามารถนำไปเปรียบเทียบกับจำนวนเชิงซ้อนได้
3 > (3+0j) # ได้ TypeError: '>' not supported between instances of 'int' and 'complex'

ยกเว้นเครื่องหมาย == สามารถเปรียบเทียบได้
3 == (3+0j) # ได้ True

ข้อมูลตัวเลขไม่สามารถนำไปเปรียบเทียบกับสายอักขระได้
3.1 > '3' # ได้ TypeError: '>' not supported between instances of 'float' and 'str'

สำหรับเครื่องหมาย == สามารถใช้เทียบได้ แต่จะได้เท็จเสมอ
3 == '3' # ได้ False

สำหรับเรื่องของการเปรียบเทียบระหว่างสายอักขระนั้นจะยกไปพูดถึงในบทที่กล่าวถึงสายอักขระอย่างละเอียดอีกที



การรวมหลายนิพจน์เข้าด้วยกัน

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

ให้ A และ B ในที่นี้เป็นข้อมูลชนิดบูลที่ได้มาจากการพิจารณาเงื่อนไข ค่าความจริงที่ได้จาก and กับ or จะเป็นไปตามตารางนี้

A B A and B A or B
จริง จริง จริง จริง
จริง เท็จ เท็จ จริง
เท็จ จริง เท็จ จริง
เท็จ เท็จ เท็จ เท็จ

เช่น
x = 10
x > 0 and x < 5 # ได้ False
x > 0 or x < 5 # ได้ True
x > 0 and x < 15 # ได้ True
x > 15 or x < 5 # ได้ False

หากต้องการให้ผลที่ได้กลับเป็นในทางตรงกันข้ามสามารถทำได้โดยเติม not เช่น
x > 0 and not x < 5 # ได้ True
not x > 0 or x < 5 # ได้ False

สามารถใส่วงเล็บเพื่อให้มีการคิดผลในวงเล็บก่อน ดังนั้นการใส่วงเล็บกับไม่ใส่ให้ผลต่างกัน
not (x > 0 and x < 5) # ได้ True
not x > 0 and x < 5 # ได้ False



การใช้ if elif else

บางครั้งเราอาจไม่ได้พิจารณาเงื่อนไขที่แบ่งสถานการณ์ออกเป็นแค่ ๒ กรณี แต่อาจแบ่งย่อยมากกว่านั้น ในกรณีนั้นใช้แค่ if else ไม่เพียงพอ ต้องใช้ if elif else

ตัวอย่าง โปรแกรมคำนวณเกรดโดยการป้อนคะแนนเข้าไปแล้วให้พิจารณาว่าควรจะได้เท่าไหร่โดยดูจากช่วงคะแนน
khanaen = float(input('จงป้อนคะแนนของคุณ: '))
if(khanaen<50): print('คุณได้ F เสียใจด้วย พบกันใหม่ปีหน้า')
elif(khanaen<60): print('คุณได้ D')
elif(khanaen<70): print('คุณได้ C')
elif(khanaen<80): print('คุณได้ B')
elif(khanaen<=100): print('คุณได้ A ยินดีด้วย ทำได้ดีมาก')
else: print('คะแนนไม่ควรเกิน 100')

ตัวอย่างผล
ครั้งที่ ๑
จงป้อนคะแนนของคุณ: 49
คุณได้ F เสียใจด้วย พบกันใหม่ปีหน้า  
ครั้งที่ ๒
จงป้อนคะแนนของคุณ: 81
คุณได้ A ยินดีด้วย ทำได้ดีมาก
ครั้งที่ ๓
จงป้อนคะแนนของคุณ: 555
คะแนนไม่ควรเกิน 100





เงื่อนไขซ้อนกันหลายชั้น

บางครั้งเงื่อนไขก็ไม่ได้แยกเป็นหลายทางพร้อมๆกัน แต่บางครั้งต้องผ่านเงื่อนไขหนึ่งจึงจะมีการทำอะไรต่อแล้วจึงเจอกับเงื่อนไขต่อไปอีก

ในสถานการณ์แบบนี้จะเกิดเป็นเงื่อนไขซ้อนเงื่อนไข คือภายในส่วนคำสั่งหลัง if มี if ซ้อนอยู่อีกอัน ซึ่งกรณีนี้คำสั่งที่อยู่ภายใต้เงื่อนไขของ if ตัวในก็จะต้องมีการร่นไปอีก

ยิ่งมีการซ้อนก็จะยิ่งมีการร่น เกิดเป็นโครงสร้างเป็นชั้นๆ
if(เงื่อนไข):
    คำสั่ง
    if(เงื่อนไข):
        คำสั่ง
    else:
        คำสั่ง
    คำสั่ง
else:
    คำสั่ง
    if(เงื่อนไข):
        คำสั่ง
    else:
        คำสั่ง
    คำสั่ง

ตัวอย่าง สมมุติว่ากำลังเล่นเกมอยู่ เกมนี้มีระบบคำนวณโอกาสที่เราจะเอาชนะศัตรูได้โดยการให้ป้อนเลเวลของตัวเรา และศัตรูลงไป สูตรคำนวณโอกาสชนะเป็น % คือ 50 + เลเวลเรา - เลเวลศัตรู

เพียงแต่ว่าขอบเขตเลเวลของผู้เล่นต้องเป็นจำนวนเต็มบวก ไม่เกิน 100 ส่วนศัตรูต้องไม่เกิน 500 ถ้าหากป้อนตัวเลขที่ไม่ได้อยู่ในขอบเขตนี้ก็จะขึ้นเตือนมาแล้วหยุดทำงานไป ทันที
lv_rao = int(input('คุณเลเวล: '))
if(lv_rao<1 or lv_rao>100):
    print('เลเวลผู้เล่นต้องอยู่ระหว่าง 1 ถึง 100')
else:
    lv_sattru = int(input('ศัตรูเลเวล: '))
    if(lv_sattru<1 or lv_sattru>500):
        print('เลเวลศัตรูต้องอยู่ระหว่าง 1 ถึง 500')
    else:
        if(lv_rao+50<=lv_sattru):
            print('ศัตรูเมพเกินไป')
        elif(lv_rao-50>=lv_sattru):
            print('ศัตรูกากเกินไป')
        else:
            print('คุณมีโอกาสชนะ', 50+lv_rao-lv_sattru,'%')

ตัวอย่างผล
ครั้งที่ ๑
คุณเลเวล: 101
เลเวลผู้เล่นต้องอยู่ระหว่าง 1 ถึง 100

ครั้งที่ ๒
คุณเลเวล: 50
ศัตรูเลเวล: 600
เลเวลศัตรูต้องอยู่ระหว่าง 1 ถึง 500

ครั้งที่ ๓
คุณเลเวล: 80
ศัตรูเลเวล: 200
ศัตรูเมพเกินไป

ครั้งที่ ๔
คุณเลเวล: 90
ศัตรูเลเวล: 110
คุณมีโอกาสชนะ 30 %



การใช้ข้อมูลชนิดต่างๆแทนค่าความจริงเท็จ

ปกติเวลาตั้งเงื่อนไขโดยเปรียบเทียบข้อมูลผลที่ได้จะออกมาเป็นตัวแปรชนิดบูลซึ่งมีค่าได้แค่ True หรือ False

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

โดยปกติแล้วเราสามารถแปลงข้อมูลจากชนิดใดๆเป็นชนิดบูลได้ โดยถ้าเป็นจำนวนตัวเลข ค่า 0 จะได้ False นอกนั้นจะได้ True ถ้าเป็นสายอักขระ ค่าว่างเปล่าจะได้ False นอกนั้นจะได้ True
bool(1) # ได้ True
bool(0.1) # ได้ True
bool(0) # ได้ False
bool(0.0) # ได้ False
bool('0') # ได้ True
bool('') # ได้ False

ลองนำค่าไปใช้กับ if
if(10): print('จริง')
else: print('เท็จ')

ผลจะได้ว่าเป็นจริงดังนั้นจึงแสดงผล จริง



สรุปเนื้อหา
  • ในโปรแกรมจะต้องมีการตัดสินจริงเท็จเพื่อกำหนดเงื่อนไขให้เกิดทางแยก
  • คำสั่งสำหรับสร้างเงื่อนไขคือ if elif else
  • เงื่อนไขตัดสินจากนิพจน์ทางตรรกศาสตร์ ซึ่งประกอบไปด้วย == > < >= <= and or not เป็นต้น ซึ่งให้ผลลัพธ์เป็นข้อมูลชนิดบูล True หรือ False
  • โครงสร้าง if elif else สามารถซ้อนกันกี่ชั้นก็ได้
  • ข้อมูลชนิดอื่นก็สามารถนำมาใช้แทนค่าบูลเพื่อพิจารณาค่าความจริงเท็จได้เช่นกัน



อ้างอิง




-----------------------------------------

囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧

ดูสถิติของหน้านี้

หมวดหมู่

-- คอมพิวเตอร์ >> เขียนโปรแกรม >> python

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

สารบัญ

รวมคำแปลวลีเด็ดจากญี่ปุ่น
มอดูลต่างๆ
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pyqt
-- pytorch
การเรียนรู้ของเครื่อง
-- โครงข่าย
     ประสาทเทียม
ภาษา javascript
ภาษา mongol
ภาษาศาสตร์
maya
ความน่าจะเป็น
บันทึกในญี่ปุ่น
บันทึกในจีน
-- บันทึกในปักกิ่ง
-- บันทึกในฮ่องกง
-- บันทึกในมาเก๊า
บันทึกในไต้หวัน
บันทึกในยุโรปเหนือ
บันทึกในประเทศอื่นๆ
qiita
บทความอื่นๆ

บทความแบ่งตามหมวด



ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ

  ค้นหาบทความ

  บทความแนะนำ

ตัวอักษรกรีกและเปรียบเทียบการใช้งานในภาษากรีกโบราณและกรีกสมัยใหม่
ที่มาของอักษรไทยและความเกี่ยวพันกับอักษรอื่นๆในตระกูลอักษรพราหมี
การสร้างแบบจำลองสามมิติเป็นไฟล์ .obj วิธีการอย่างง่ายที่ไม่ว่าใครก็ลองทำได้ทันที
รวมรายชื่อนักร้องเพลงกวางตุ้ง
ภาษาจีนแบ่งเป็นสำเนียงอะไรบ้าง มีความแตกต่างกันมากแค่ไหน
ทำความเข้าใจระบอบประชาธิปไตยจากประวัติศาสตร์ความเป็นมา
เรียนรู้วิธีการใช้ regular expression (regex)
การใช้ unix shell เบื้องต้น ใน linux และ mac
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ทำความรู้จักกับปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ

บทความแต่ละเดือน

2024年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2023年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2022年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2021年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2020年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

ค้นบทความเก่ากว่านั้น

ไทย

日本語

中文