কম্পিউটার টিউটোরিয়াল

পাইথনে পূর্ণসংখ্যাকে ইংরেজি শব্দে রূপান্তর


ধরুন একটি সংখ্যা আছে। সংখ্যাটি ০ থেকে ২³¹-১ পর্যন্ত যেকোনো হতে পারে। আমাদের সংখ্যাটিকে শব্দে রূপান্তর করতে হবে। যেমন ৫১২ হলে ফলাফল হবে "Five hundred twelve"।

সমাধানের ধাপগুলো −

  • কিছু লিস্ট সংজ্ঞায়িত করুন: less_than_20 (১ থেকে ১৯ পর্যন্ত শব্দ), tens (twenty, thirty... ninety), thousands (thousand, million, billion)
  • helper() ফাংশন সংজ্ঞায়িত করুন যা n নেবে
  • যদি n == 0 হলে খালি স্ট্রিং রিটার্ন করুন
  • যদি n < 20 হলে less_than_20[n] + স্পেস রিটার্ন করুন
  • যদি n < 100 হলে tens[n//10] + স্পেস + helper(n%10) রিটার্ন করুন
  • অন্যথায় less_than_20[n//100] + "Hundred" + helper(n%100) রিটার্ন করুন
  • মূল মেথড থেকে − যদি num == 0 হলে "Zero" রিটার্ন করুন
  • ans := "", i := 0
  • while num > 0 − যদি num%1000 != 0 হলে ans = helper(num%1000) + thousands[i] + " " + ans; num //= 1000; i++
  • ans.strip() রিটার্ন করুন

উদাহরণ

নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালো বোঝার জন্য −

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))

ইনপুট

512 7835271

আউটপুট

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

  1. পাইথনে ইন্টিজার রিভার্স (Reverse Integer)

  2. পাইথনে বাইনারি লিস্টকে ইন্টিজারে রূপান্তর

  3. পাইথনে স্ট্রিং-এর শব্দগুলো উল্টে দেওয়া

  4. পাইথনে bin() ফাংশন