2014-04-03 63 views
0

我正在嘗試創建一個將小於100,000,000的所有數字轉換爲單詞形式的程序。下面的代碼轉換每個數字,除了數千萬的數字,我不知道爲什麼。有任何想法嗎? 提前謝謝!將數字轉換爲單詞 - Python

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

回答

2

它看起來像你的第一個,如果塊,檢查數百萬有太多的零,您要添加上百萬,如果part大於一百萬(1000000),而是要檢查對億(100000000) 。然後在第一行,如果你想劃分一百萬塊,而你除以一千萬。

嘗試改變的那件爲以下:

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