12. มาตามคำขอ แปลงเลขจำนวนเต็ม เป็น คำอ่านภาษาไทย


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

    หลักในการอ่านตัวเลขตามหลักภาษาไทย จะมีคำอ่านของหลักของตัวเลข เป็นคำเฉพาะ ได้แก่ สิบ ร้อย พัน หมื่น แสน ล้าน และมีคำอ่านเฉพาะของเลข 1 คือ ถ้าเป็นหลักหน่วย ให้อ่านว่า"เอ็ด" ถ้าเป็นหลักสิบ จะอ่านว่า"สิบ" ไม่ได้อ่าน"หนึ่งสิบ" ส่วนเลข 2 ถ้าเป็นหลักสิบ ให้อ่านว่า"ยี่" นอกเหนือจากนี้เป็นการอ่านตามชื่อของตัวเลขนั้น ๆ


ขั้นตอนวิธี

    1. รอรับตัวเลขจำนวนเต็มจากผู้ใช้
    2. แปลงตัวเลขดังกล่าวป็นข้อความ
    3. คำนวณหาความยาวของตัวเลขที่รับเข้ามา
    4. วนรอบ เท่ากับความยาวของตัวเลขที่ได้รับ แล้วทำสิ่งต่อไปนี้
        1. ถ้า ความยาวมากกว่า 1 หลัก และ ตัวเลขตัวสุดท้าย เป็น 1
                ให้เพิ่มข้อความ "เอ็ด" เข้าไปในผลลัพธ์
        2. ไม่เช่นนั้น ถ้า ตัวเลขก่อนลำดับสุดท้าย เป็น 2
                
 ให้เพิ่มข้อความ "ยี่" เข้าไปในผลลัพธ์
        3. ไม่เช่นนั้น ถ้า ตัวเลขก่อนลำดับสุดท้าย เป็น 1
                 ไม่ต้องเพิ่มข้อความ ใด ๆ เข้าไปในผลลัพธ์
        4. ไม่เช่นนั้น ให้เพิ่มข้อความ ซึ่งเป็นคำอ่านของตัวเลขนั้น ๆ เช่น คำว่า"หนึ่ง" เข้าไปในผลลัพธ์
                และ เพิ่มข้อความ ซึ่งเป็นคำอ่านของหลักของตัวเลขนั้น ๆ เช่น คำว่า "ร้อย" เข้าไปในผลลัพธ์
    5. เพิ่มข้อความเว้นวรรค เข้าไปคั่นระหว่าคำอ่านแต่ละคำในผลลัพธ์ที่ได้
    6. แสดงผลออกทางจอภาพ 

โค้ดไพธอน

# plakemphet.net

# 28 July 2021

# Convert number to text


# Define list of text

units = ["","Nueng","Song","Saam","Sii","Haa","Hok","Jed","Paed","Kao"]

spower = ["","Sib","Roi","Phun","Muen","Saen","Laan"]


# Get input

num = int(input("number = "))

if (len(str(num)) > 7):  # Check if num > 7

    print ("Number is more than 7 digits")

    num = int(input("number = "))


#Define variable

result = []

numdigit = str(num)  # Convert integer num to string numdigit

digits = len(numdigit)  # Get length of numdigit


for i in range(digits):

    if (numdigit[i]  != "0"):

        if digits !=1 and i == digits-1 and numdigit[-1] == "1":  # Check if last is 1

            result.append("Ed")

        elif i == digits-2 and numdigit[-2] == "2":  # Check if before last is 2

            result.append("Yii")

        elif i == digits-2 and numdigit[-2] == "1":  # Check if before last is 1

            result.append("")

        else:

            result.append(units[int(numdigit[i])])    # Append words into result

        result.append(spower[digits-i-1])   # Append spower words into result


last = ' '.join(result)  # Join space into text

print ("**", last,"**")  # printout result











หมายเหตุ 
        หากต้องการแสดงข้อความภาษาไทย ให้ไปที่เมนูToolt >> Options >> Theme & Font แล้วเปลี่ยน ในช่อง Editor และช่อง IO font ให้เป็นฟอนต์ Tahama เพียงเท่านี้ก็สามารถแสดงผลลัพธ์เป็นภาษาไทยได้แล้ว และกลับไปแก้ไขโค้ด 4 บรรทัด ดังนี้

units = ["","Nueng","Song","Saam","Sii","Haa","Hok","Jed","Paed","Kao"]
spower = ["","Sib","Roi","Phun","Muen","Saen","Laan"]
ให้เป็นภาษาไทย

units = ["","หนึ่ง","สอง","สาม","สี่","ห้า","หก","เจ็ด","แปด","เก้า"]
spower = ["","สิบ","ร้อย","พัน","หมื่น","แสน","ล้าน"]

เปลี่ยน
            result.append("Ed")
ให้เป็นภาษาไทย            
        result.append("เอ็ด")

และเปลี่ยน
            result.append("Yii")

ให้เป็นภาษาไทย
            result.append("ยี่")

******************

โพสต์ยอดนิยมจากบล็อกนี้

14. Wio Terminal EP.01 , เริ่มตันกับ Wio Terminal ด้วย circuitPython

28. Wio Terminal GPS

24. Wio Terminal EP.11, อนาล็อกมิเตอร์ วัดความสว่างของแสง