将数字转换为文字 - Python

0 投票
1 回答
530 浏览
提问于 2025-04-18 01:16

我正在尝试创建一个程序,把所有小于1亿的数字转换成文字形式。下面的代码能把每个数字都转换成文字,除了千万位的数字,我不太明白为什么会这样。有没有什么想法?

## 
#  This program turns an integer into its English name.
#

def main() :
   value = int(input("Please enter a positive integer < 1000000000: "))
   print(intName(value))

## Turns a number into its English name.
#  @param number a positive integer < 1,000,000,000
#  @return the name of the number (e.g. "two hundred seventy four")
#



def intName(number):
   part = number
   name = ""

   if part >= 100000000:
      name = thousands(part // 10000000) + " million"
      part = part % 1000000

   if part >= 1000:
      name = name + " " + thousands(part // 1000) + " thousand"
      part = part % 1000

   if part > 0:
      name = name + " " + thousands(part)
      part = 0

   if part > 0:
      name = name + " " + thousands(part)
      part = 0

   return name



def thousands(number) :
   part = number   # The part that still needs to be converted.
   name = ""   # The name of the number. 

   if part >= 100 :
      name = digitName(part // 100) + " hundred"
      part = part % 100

   if part >= 20 :
      name = name + " " + tensName(part)
      part = part % 10
   elif part >= 10 :
      name = name + " " + teenName(part)
      part = 0

   if part > 0 :
      name = name + " " + digitName(part)

   return name

## Turns a digit into its English name.
#  @param digit an integer between 1 and 9
#  @return the name of digit ("one" ... "nine")
#
def digitName(digit) :
   if digit == 1 : return "one"
   if digit == 2 : return "two"
   if digit == 3 : return "three"
   if digit == 4 : return "four"
   if digit == 5 : return "five"
   if digit == 6 : return "six"
   if digit == 7 : return "seven"
   if digit == 8 : return "eight"
   if digit == 9 : return "nine"
   return ""

## Turns a number between 10 and 19 into its English name.
#  @param number an integer between 10 and 19
#  @return the name of the given number ("ten" ... "nineteen")
#
def teenName(number) :
   if number == 10 : return "ten"
   if number == 11 : return "eleven"
   if number == 12 : return "twelve"
   if number == 13 : return "thirteen"
   if number == 14 : return "fourteen"
   if number == 15 : return "fifteen"
   if number == 16 : return "sixteen"
   if number == 17 : return "seventeen"
   if number == 18 : return "eighteen"
   if number == 19 : return "nineteen"
   return ""

## Gives the name of the tens part of a number between 20 and 99.
#  @param number an integer between 20 and 99
#  @return the name of the tens part of the number ("twenty" ... "ninety")
#
def tensName(number) :
   if number >= 90 : return "ninety"
   if number >= 80 : return "eighty"
   if number >= 70 : return "seventy"
   if number >= 60 : return "sixty"
   if number >= 50 : return "fifty"
   if number >= 40 : return "forty"
   if number >= 30 : return "thirty"
   if number >= 20 : return "twenty"
   return ""

# Start the program.
main()

1 个回答

2

看起来你第一个判断条件是用来检查百万的,但你写的零太多了。你应该在 part 大于一百万(1000000)的时候加上百万,而你现在却是在检查一亿(100000000)。然后在那个判断的第一行,你应该把数字除以一百万,但你现在是除以一千万。

试着把那部分改成下面这样:

   if part >= 1000000:
      name = thousands(part // 1000000) + " million"
      part = part % 1000000

撰写回答