Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chuyển Đổi Số Thành Chữ Tiếng Anh (Integer to English Words) trong Python


Giả sử ta có một số. Số đó có thể là bất kỳ giá trị nào từ 0 đến 2^31 - 1. Ta phải chuyển đổi số đó thành chữ. Vì vậy, nếu số là 512, kết quả sẽ là "Five hundred twelve".

Để giải quyết, ta thực hiện các bước sau:

  • Định nghĩa các danh sách như less_than_20, chứa các từ từ one đến nineteen
  • Mảng khác như tens để chứa twenty, thirty... đến ninety
  • Mảng khác cho thousands, chứa thousand, million, billion
  • Định nghĩa hàm helper(), nhận n
    • Nếu n là 0, trả về chuỗi rỗng
    • Ngược lại, nếu n < 20, trả về less_than_20[n] + khoảng trắng
    • Ngược lại, nếu n < 100, trả về tens[n/10] + khoảng trắng + helper(n mod 10)
    • Ngược lại trả về less_than_20[n/100] + "Hundred" + helper(n mod 100)
  • Từ phương thức chính, thực hiện:
    • Nếu num là 0, trả về "Zero"
    • ans := chuỗi rỗng, i := 0
    • Khi num > 0
      • Nếu num mod 1000 khác 0, thì
        • ans := helper(num mod 1000) + thousands[i] + khoảng trắng + ans
      • i += 1
      • num //= 1000
    • Trả về ans.strip()

Hãy xem triển khai sau để hiểu rõ hơn:

Ví dụ

class Solution(object): less_than_20 = ["", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"]    tens = ["","Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"] thousands = ["", "Thousand", "Million", "Billion"]    def numberToWords(self, num):       if num == 0:           return "Zero"       ans = ""       i = 0       while num > 0:           if num % 1000 != 0:             ans = self.helper(num % 1000) + Solution.thousands[i] + " " + ans             i += 1             num //= 1000           return ans.strip()    def helper(self, n):       if n == 0:           return ""       elif n < 20:           return Solution.less_than_20[n] + " "       elif n < 100:           return Solution.tens[n//10] + " " + self.helper(n % 10)       else:           return Solution.less_than_20[n // 100] + " Hundred " + self.helper(n % 100) ob = Solution() print(ob.numberToWords(512)) print(ob.numberToWords(7835271))

Đầu vào

512 7835271

Đầu ra

Five Hundred Twelve Seven Million Eight Hundred Thirty Five Thousand Two Hundred Seventy One