我的参数n
是一个整数的电话号码。
使用递归我想返回整数中的前三个数字。
我已将整数转换为单个数字字符列表,我试图一遍又一遍地删除最后一个数字,直到我离开最后三个,但我&#39 ;我坚持如何重复它。
def areaCodes(n):
n = str(n)
n = list(n)
del n[-1]
#n = reduce(opperator.add, n)
n = ''.join(n)
n = int(n)
return n
我知道我应该以某种方式在回报中重复这个名字,但因为n
不是一个我可以用来重复的整数。我该怎么办?
答案 0 :(得分:3)
这样的事情怎么样?
def areaCodes(n):
# if n is less than 1000, what does it mean about the number of digits?
if n < 1000:
return # fill...
# otherwise, if n is greater than 1000, how can we alter n to remove the last
# digit? (hint: there's an operation similar to division called f...r division)
return areaCodes( # operate on n somehow...)
答案 1 :(得分:2)
我认为这是一个需要递归的练习。如果是这样,试试这个(有更好的方法来实现最终目标,但我尝试尽可能少地修改现有代码):
def areaCodes(n):
n_lst = list(str(n))
del n_lst[-1]
n_str = ''.join(n_lst)
n_int = int(n_str)
if len(n_lst) > 3:
return areaCodes(n_int)
return n_int
如果数字的长度大于3,则会再次调用该函数,否则返回该数字。基本上,您在原始函数中缺少的唯一部分是以下部分,它是递归部分:
if len(n_lst) > 3:
return areaCodes(n_int)
答案 2 :(得分:2)
请记住,对于要递归的函数,它将有两个主要属性:
当你写下你应该使用“返回中的名字”时,你提到了#1,这太棒了!你只需要在你的代码中写下它:
return areaCodes(n)
,其中n
是已移除数字的更新电话号码。
正如您所看到的,每个递归调用应该对解决方案做一些工作,并且应该将其迷你解决方案传递给下一个递归调用。
与上面的#2一起,您需要指定一个基本情况,递归将停止。因此,由于每次调用函数时都会删除一个数字,因此应该进行某种检查以确定当前输入是否是您想要的长度。
如果是正确的长度,你就完成了,你应该返回当前的号码(而不是另一个递归的号码)。
否则,你还没有完成递归。
答案 3 :(得分:1)
import sys
def areaCodes(n):
#Create a list
myList = list(str(n))
#Delete last element
del myList[-1]
#Combine your elements into string list
myListStr = ''.join(myList)
#Type cast to int
myListInt = int(myListSte)
#Check whether your list satisfies your condition
if len(myList) > 3:
#Recusivley call the function again
return areaCodes(myListInt)
#Return your list when recursion completes
return myListInt
n = 12345
print areaCodes(n)