2013-03-24 164 views
0

大家好我正在嘗試生成一個代碼,用於將數字轉換爲給定字典中的單詞。但它似乎根本不打印任何東西。沒有錯誤或任何東西。我嘗試了很多方法來找到問題,但仍然沒有任何結果。Python:將數字轉換爲單詞

當我進入6程序踢倒沒什麼。它應該輸出[six]

我認爲這是一個間距問題,但我不認爲是這樣。

這裏就是我有

import string 


value = input("Enter a number 1 - 9 separted by commas: ") 

def user_input(value): 
    numbers = {} 
    user_list = value.split(',') 
    numbers = [(x.strip()) for x in user_list] 
    return numbers 
    print(numbers) 

user_input(value) 

numbers = user_input() 

unit_number = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 
      5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine'} 

def convert_n_to_w(numbers): 
    i = len(str(numbers)) 

    if i == 0: 
     return 

    if i == 1: 
     return unit_number[numbers] 

    print(unit_number[numbers]) 

convert_n_to_w(數字)

誰能請告訴我什麼,我沒做錯了嗎?

更新!!!!!!!

我加入convert_n_to_w(numbers),告訴我

line 38, in <module> convert_n_to_w(numbers)

NameError: name 'numbers' is not defined

當我以爲我定義它。

回答

2

您的代碼有幾個問題。我想修改你的代碼。下面的代碼可以很好地工作,但不是pythonic。

value = input("Enter a number 1 - 9 separted by commas: ") 

def user_input(value): 
    if isinstance(value, tuple): 
     return list(value) 
    else: 
     user_list = value.split(',') 
     numbers = [(x.strip()) for x in user_list] 
     return numbers 


unit_number = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 
      5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine'} 

def convert_n_to_w(numbers): 
    for n in numbers: 
     print(unit_number[int(n)]) 

numbers = user_input(value) 

convert_n_to_w(numbers) 
+0

好的。謝謝 – 2013-03-24 12:08:05

+0

哇!非常感謝你!!!我現在看到我以錯誤的方式去解決問題,並且問題真的開始於我的第一個功能。 – 2013-03-24 12:14:22

3

print語句,print(unit_number[numbers]),是convert_n_to_w功能。您不會在任何時候調用該函數,因此print語句不會運行。

要麼調用函數,要麼將print語句帶出函數。

+0

改成了對不起它踢回了'名稱錯誤'我已經記得我不知道爲什麼。 'convert_n_to_w(數字) NameError:名稱'數字'未定義' – 2013-03-24 12:11:16

+0

非常感謝Thankyou! – 2013-03-27 05:22:26

1

returnuser_input打印號碼前。該函數中的print聲明永遠不會到達。

更新:

而作爲@Joni表明你是不是調用該函數convert_n_to_w可言。

因此,沒有print語句永遠執行。

+0

感謝您的輸入! – 2013-03-27 05:22:47

1
#Dictionaries for reference 
ones = {"1":"One","2":"Two","3":"Three","4":"Four","5":"Five","6":"Six", "7":"Seven","8":"Eight","9":"Nine"} 
afterones = {"10":"Ten","11":"Eleven","12":"Twelve","13":"Thirteen","14":"Fourteen","15":"Fifteen","16":"Sixteen", "17":"Seventeen","18":"Eighteen","19":"Nineteen"} 
tens = {"2":"Twenty","3":"Thirty","4":"Fourty","5":"Fifty","6":"Sixty", "7":"Seventy","8":"Eighty","9":"Ninety"} 
grand={0:" Billion, ",1:" Million, ",2:" Thousand, ",3:""} 

#Function converting number to words of 3 digit 
def num_to_wrds(val): 
    if val != "000": 
     ans = "" 
     if val[0] in ones: 
      x = val 
      ans = ans + ones[val[0]] + " Hundered and " 
     if val[1:] in afterones: 
      ans = ans + afterones[val[1:]] + " " 
     elif val[1] in tens: 
      ans = ans + tens[val[1]] + " " 
     if val[2] in ones: 
      ans = ans + ones[val[2]] 
     return ans 


num = input("Enter the number: ") 

# Paddiing with zeros 
pad = 12-len(str(num)) 
numinwrds = "0"*pad + str(num) 

final ="" 
numlis = [numinwrds[0:3],numinwrds[3:6],numinwrds[6:9],numinwrds[9:12]] 

for key,grp in enumerate(numlis): 

    if grp!="000": 
     final = final + num_to_wrds(grp) + grand[key] 

print final 

此打印高達數十億值,您可以添加更多的在大辭典它完美的作品 注:一定要放在最高值按遞減順序