11. วิธีแปลงตัวเลข เป็นคำอ่าน ด้วย ภาษาไพธอน


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

ขั้นตอนวิธี

1. ประกาศตัวแปรประเภท List ไว้เก็บคำอ่าน หลักหน่วย หลักสิบ หลักสิบที่ลงท้ายด้วยแบบพิเศษ และเก็บค่าที่เป็น ร้อย พัน และ ล้าน
2. รอรับตัวเลขจำนวนเต็มจากผู้ใช้
3. ตรวจสอบว่าเลขที่รับมา ถ้ายาวมากกว่า 9 หลัก ให้รอรับค่าอีกครั้ง
4. แยกตัวเลขดังกล่าวออกเป็น 3 กลุ่ม กลุ่มที่ 1 เก็บเลข 1 ล้าน ถึง ไม่เกิน 1 พันล้าน กลุ่มที่ 2 เก็บเลข 1 พัน ถึง ไม่เกินแสน กลุ่มที่ 3 เก็บเลข 0 ถึง ไม่เกินพัน
5. วนรอบการทำงาน 3 รอบ โดยในแต่ละรอบ ทำงานดังนี้
        5.1 ตรวจสอบกลุ่มที่ 1
        5.2  ถ้ามีเลขหลักร้อย ให้ เพิ่มคำอ่านเลขนั้น ตามด้วย "hundred"
        5.3  ถ้ามีเลขหลักสิบ และ เลขนั้น เกินจาก 2 ขึ้นไป ให้ เพิ่มคำอ่านเลขนั้นแบบที่ลงท้ายด้วย "ty" ไม่เช่นนั้น ให้ตรวจสอบหลักหน่วยและหลักสิบ แล้วเพิ่มคำอ่านหลักสิบแบบพิเศษเข้าไป 
        5.4 ถ้ามีเลขหลักหน่วย ให้เพิ่มคำอ่านเลขนั้นเข้าไป
        5.5  ย้อนกลับไป ข้อ 5.1 ทำการตรวจสอบกลุ่มที่ 2 และทำเช่นเดียวกันกับ ตัวเลขกลุ่มที่ 3
        5.6 แสดงผลคำอ่านที่ถูกต้อง

6. ลงมือเขียนโค้ด  

โค้ด ไพธอน

# plakemphet.net
# 26 July 2021
# Convert number to text

# Define list of text

units = ["","one","two","three","four","five","six","seven","eight","nine"]
tens = ["ten","eleven","twelve","thirteen","fourteen", "fifteen","sixteen","seventeen","eighteen","nineteen"]
xty = ["","","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"]
spower = ["","hundred","thousand","million"]

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

if (len(str(num)) > 9):
    print ("Number is more than 9 digits")
    num = int(input("number = "))

# Split number into 3 groups
g1 = int(num/1000000)  # Million
g2 = int((num-g1*1000000)/1000)     # Thousand
g3 = int(num%1000)  # Hundred

#Define variable
result = []

# Conversion loop
for k in range(3):
    if k == 1: 
        g1 = g2
    if k == 2:
        g1 = g3        

    # Convert to text
    if int(g1/100) > 0:  # Hundred
        result.append(units[int(g1/100)])
        result.append(spower[1])
    g1 = int(g1%100)
    if g1 > 9 and g1 < 20:      #tens & xty
        if k != 2:
            result.append(tens[g1-10])
            result.append(spower[3-k])
        else:
            result.append(tens[g1-10])
            result.append(spower[2-k])

    if g1 > 20 and g1 < 100:    # tens & xty
        if k != 2:
            result.append(xty[int(g1/10)])
            result.append(units[int(g1%10)])
            result.append(spower[3-k])
        else:
            result.append(xty[int(g1/10)])
            result.append(units[int(g1%10)])
            result.append(spower[2-k])

    if g1 > 0 and g1 < 10:  # Units
        if k != 2:
            result.append(units[g1])
            result.append(spower[3-k])
        else:
            result.append(units[g1])
            result.append(spower[2-k])

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

print ("number: ",format(num, ','))  # Print number with separator

print ("**", last,"**")







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

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

28. Wio Terminal GPS

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