【问题标题】:Python: Convert numbers to wordsPython:将数字转换为单词
【发布时间】:2013-03-13 22:43:51
【问题描述】:

大家好,我正在尝试生成将数字转换为给定字典中的单词的代码。但它似乎根本不打印任何东西。没有错误或任何东西。我尝试了很多东西来找到问题,但仍然没有。

当我输入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

当我认为我定义了它时。

【问题讨论】:

    标签: python dictionary numbers converter words


    【解决方案1】:

    打印语句print(unit_number[numbers]) 在convert_n_to_w 函数中。您在任何时候都不会调用该函数,因此不会运行 print 语句。

    要么调用函数,要么从函数中取出打印语句。

    【讨论】:

    • 改了很抱歉,它退回了name error 我已经记得我不知道为什么。 convert_n_to_w(numbers) NameError: name 'numbers' is not defined
    【解决方案2】:

    您在打印数字之前来自user_input 的return。永远不会到达该函数中的print 语句。

    更新:

    正如@Joni 所指出的,您根本没有调用函数convert_n_to_w。

    所以不会执行任何print 语句。

    【讨论】:

      【解决方案3】:

      您的代码存在几个问题。我想修改你的代码。下面的代码可以很好地工作,但不是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)
      

      【讨论】:

      • 哇!非常感谢!!!我现在发现我的做法是错误的,问题真的从我的第一个函数开始。
      【解决方案4】:
      #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
      

      这可以打印出数十亿的值,您可以在大字典中添加更多,它非常完美 注意:请务必将最高值按降序排列

      【讨论】:

        【解决方案5】:
        def n2w(num):
            unit_number = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 
            5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine'}
            st=""
            while num>0 :
                a=num%10
                for i,j in unit_number.items():
                    if i==a:
                        st=unit_number[i]+" "+st
                num=num//10
                st=st.rstrip()
            return (st)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-02-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多