2013-03-24 106 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 

此打印高达数十亿值,您可以添加更多的在大辞典它完美的作品 注:一定要放在最高值按递减顺序