2016-03-29 16 views
0

Ondalık ve çıktı metni dahil olmak üzere herhangi bir sayıyı girmek için bu programı genişletmek üzere. yani) 45.23 Kırk beş nokta yirmiüçpython: herhangi bir sayı girin ve metne dönüştürün

num1 = str(input("enter a dollar amt:")) 

numToString = {'1.00':'one dollar', '1.50':'one dollar and fifty cents',\ 
'2.00':'two dollars', '3.00': 'three dollars', '4.00':'four dollars', \ 
'5.00':'five dollars', '6.00':'six dollars', '7.00':'seven dollars', \ 
'8.00':'eight dollars', '9.00':'nine dollars'} ; 

for char in num1: 
    print(numToString[char]) 
+0

değişim sözlüğünü için '{ "1": "bir", "2": "" "iki",: "point"} 'çünkü' for döngüsünde 'num1' dizgisini, yani bir karakteri bir seferde yineliyoruz. –

cevap

1

Deneyin:

import math 

# Tokens from 1000 and up 
_PRONOUNCE = [ 
    'vigintillion', 
    'novemdecillion', 
    'octodecillion', 
    'septendecillion', 
    'sexdecillion', 
    'quindecillion', 
    'quattuordecillion', 
    'tredecillion', 
    'duodecillion', 
    'undecillion', 
    'decillion', 
    'nonillion', 
    'octillion', 
    'septillion', 
    'sextillion', 
    'quintillion', 
    'quadrillion', 
    'trillion', 
    'billion', 
    'million', 
    'thousand', 
    '' 
] 

# Tokens up to 90 
_SMALL = { 
    '0' : '', 
    '1' : 'one', 
    '2' : 'two', 
    '3' : 'three', 
    '4' : 'four', 
    '5' : 'five', 
    '6' : 'six', 
    '7' : 'seven', 
    '8' : 'eight', 
    '9' : 'nine', 
    '10' : 'ten', 
    '11' : 'eleven', 
    '12' : 'twelve', 
    '13' : 'thirteen', 
    '14' : 'fourteen', 
    '15' : 'fifteen', 
    '16' : 'sixteen', 
    '17' : 'seventeen', 
    '18' : 'eighteen', 
    '19' : 'nineteen', 
    '20' : 'twenty', 
    '30' : 'thirty', 
    '40' : 'forty', 
    '50' : 'fifty', 
    '60' : 'sixty', 
    '70' : 'seventy', 
    '80' : 'eighty', 
    '90' : 'ninety' 
} 

def get_num(num): 
    '''Get token <= 90, return '' if not matched''' 
    return _SMALL.get(num, '') 

def triplets(l): 
    '''Split list to triplets. Pad last one with '' if needed''' 
    res = [] 
    for i in range(int(math.ceil(len(l)/3.0))): 
     sect = l[i * 3 : (i + 1) * 3] 
     if len(sect) < 3: # Pad last section 
      sect += [''] * (3 - len(sect)) 
     res.append(sect) 
    return res 

def norm_num(num): 
    """Normelize number (remove 0's prefix). Return number and string""" 
    n = int(num) 
    return n, str(n) 

def small2eng(num): 
    '''English representation of a number <= 999''' 
    n, num = norm_num(num) 
    hundred = '' 
    ten = '' 
    if len(num) == 3: # Got hundreds 
     hundred = get_num(num[0]) + ' hundred' 
     num = num[1:] 
     n, num = norm_num(num) 
    if (n > 20) and (n != (n/10 * 10)): # Got ones 
     tens = get_num(num[0] + '0') 
     ones = get_num(num[1]) 
     ten = tens + ' ' + ones 
    else: 
     ten = get_num(num) 
    if hundred and ten: 
     return hundred + ' ' + ten 
     #return hundred + ' and ' + ten 
    else: # One of the below is empty 
     return hundred + ten 

def num2eng(num): 
    '''English representation of a number''' 
    num = str(long(num)) # Convert to string, throw if bad number 
    if (len(num)/3 >= len(_PRONOUNCE)): # Sanity check 
     raise ValueError('Number too big') 

    if num == '0': # Zero is a special case 
     return 'zero ' 

    # Create reversed list 
    x = list(num) 
    x.reverse() 
    pron = [] # Result accumolator 
    ct = len(_PRONOUNCE) - 1 # Current index 
    for a, b, c in triplets(x): # Work on triplets 
     p = small2eng(c + b + a) 
     if p: 
      pron.append(p + ' ' + _PRONOUNCE[ct]) 
     ct -= 1 
    # Create result 
    pron.reverse() 
    return ', '.join(pron) 

if __name__ == '__main__': 

    numbers = [1.37, 0.07, 123456.00, 987654.33] 
    for number in numbers: 
     dollars, cents = [int(num) for num in str(number).split(".")] 

     dollars = num2eng(dollars) 
     if dollars.strip() == "one": 
      dollars = dollars + "dollar and " 
     else: 
      dollars = dollars + "dollars and " 

     cents = num2eng(cents) + "cents" 
     print dollars + cents 
İlgili konular