我正在研究一个程序,它使用递归函数来打印英文数字的数字(即456会显示“Four Five Six”。)我注意到其他人最近问了这个问题,但我无法得到任何帮助它。该程序还要求从用户输入多个号码,并且每个号码都应显示相应的英文数字。我尝试在列表中执行此操作但不确定这是否正确。
现在我感到困惑。我已经在这个工作了几个小时了,并没有太多可以展示它。我不是在找任何人为我写这个程序,只是提供一些帮助。从理论上讲,我知道需要做什么,但我很难将其转化为代码。
def main():
List = createList()
print(createList())
def listValue(prompt):
try:
number = eval(input(prompt))
if type(number) == type(0) or type(number) == type(0.0):
return number
else:
print("\nYou did not enter a number. Try again.")
except NameError:
print("\nYou did not enter a number. Try again.")
except SyntaxError:
print("\nYou did not enter a number. Try again.")
except:
print("\nAn exception occured. Try again.")
if number != "":
return number
else:
return None
def createList():
#Create a blank list
newList = []
item = listValue("Enter a list of numbers (<Enter> to quit): ")
while item != None:
#Add user input to the end of the created list
newList.append(item)
item = listValue("Enter a list of numbers (<Enter> to quit): ")
return newList
def displayEnglishDigits(number):
numEnglish = {0: "Zero", 1: "One", 2: "Two", 3: "Three", 4: "Four",
5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"}
digit = Number % 10
main()
这是我的代码的更新版本......有什么想法吗?
def getNumbers():
n = []
xStr = input("Enter first digit of number (negative to quit) >> ")
integer = int(xStr)
while integer >= 0:
while xStr != "":
x = eval(xStr)
n.append(x)
xStr = input("Enter next digit of number (negative to quit) >> ")
return n
def displayEnglishDigits(number):
numEnglish = {0: "Zero", 1: "One", 2: "Two", 3: "Three", 4: "Four",
5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"}
number = getNumbers()
if len(number) == 0:
return None
if len(number) == 1:
return number[0]
else:
value = displayEnglishDigits(number[1:])
return value
def display(values):
print(displayEnglishDigits(number))
def main():
numb = getNumbers()
nums = displayEnglishDigits(numb)
display(nums)
main()
答案 0 :(得分:3)
让我们专注于递归函数,因为那是标题。
你有numEnglish
词典的良好开端。
要完成它,为什么不尝试:将数字转换为字符串(字符列表),并编写一个处理列表的递归函数。
numEnglish = {0: "Zero", 1: "One", 2: "Two", 3: "Three", 4: "Four",
5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"}
def recursiveDisplay(stringOfNumber):
if len(stringOfNumber) == 0: # base case: empty string
return
first = int(stringOfNumber[0]) # otherwise, grab the first element
english = numEnglish[first] # look it up in the dictionary
print english # print it
recursiveDisplay(stringOfNumber[1:]) # and recurse on the rest of the list
递归函数有两种情况:
请注意,字典numEnglish
现在已定义为递归函数的 。
当你致电recursiveDisplay
时,请确保传递一个字符串!
recursiveDisplay(str(myNumber))
免责声明:使用递归进行列表处理不是标准的python!
答案 1 :(得分:2)
我知道您可能需要这个用于学习目的,但无论如何:
不要递归。
有更简单的方法可以做到这一点,你不会受到为Python设置的最大递归限制的限制。只需使用以下解决方案:
>>> def print_number(some_number):
for cipher in str(some_number):
print ['Zero', 'One', 'Two', 'Three', 'Four',
'Five', 'Six', 'Seven', 'Eight', 'Nine'][int(cipher)],
print
>>> print_number(126321)
One Two Six Three Two One
它就像一个魅力:)
答案 2 :(得分:0)
试试这个:
numEnglish = { 0:'zero ', 1:'one ', 2:'two ', 3:'three ', 4:'four ',
5:'five ', 6:'six', 7:'seven ', 8:'eight ', 9:'nine ' }
def displayEnglishDigits(number):
if number == 0:
return ""
digit = numEnglish[number % 10]
return displayEnglishDigits(number / 10) + digit
要考虑两件事:首先,您必须定义num_names
字典,如上所示。其次,有一个特殊情况需要注意 - 如果数字只是0,则打印“零”。否则,请致电displayEnglishDigits
。另请注意,de procedure返回带有数字的字符串,您可以在afterwsws后打印。
答案 3 :(得分:0)
请找到相同的代码,如果可能的话,请进一步减少。
from __future__ import print_function
helper={}
helper = {1:"one",
2:"two",
3:"three",
4:"four",
5:"five",
6:"six",
7:"seven",
8:"eight",
9:"nine",
0:""}
face = {}
face = { 0:"zero",
1:
{0:"",
1:
{0:"ten",
1:"eleven",
2:"twelve",
3:"thirteen",
4:"fourteen",
5:"fifteen",
6:"sixteen",
7:"seventeen",
8:"eighteen",
9:"ninteen"
},
2:"twenty",
3:"thirty",
4:"fourty",
5:"fifty",
6:"sixty",
7:"seventy",
8:"eighty",
9:"ninety"},
2:"hundred",
3:"thousand"}
result = ""
teen = ""
def rec_ntw(number, face_value=0):
global result
global teen
if number <= 0:
if face_value == 0:
result = "Zero"
print (result)
#return result
else:
if face_value == 0:
result = (helper[int(number % 10)])
teen = number % 10
elif face_value == 1:
if number % 10 == 1:
result = (face[1][1][int(teen)]) + " "
else:
result = (face[int(face_value)][int(number % 10)]) + " " + result
teen = 0
elif face_value == 2:
if number % 10 != 0:
result = (helper[int(number % 10)] + " " + str(face[int(face_value)]) + " ") + result
else:
result = (helper[int(number % 10)] + " " + str(face[int(face_value)]) + " ") + result
face_value += 1
rec_ntw(number // 10, face_value)
while True:
try:
user_input = input("Please enter the number: ")
rec_ntw(user_input)
except KeyboardInterrupt:
break