递归删除整数的元素

2024-09-30 22:18:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我的参数n是一个整数形式的电话号码。在

使用递归,我想返回整数中的前三个数字。在

我已经把整数变成了一个单独的数字字符列表,我试图一次又一次地删除最后一个数字,直到只剩下最后三个,但我还是不知道如何重复它。在

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不是一个可以用来重复的整数。我该怎么办?在


Tags: addreduce列表参数def电话号码数字整数
3条回答

记住,对于递归函数,它将有两个主要属性:

  1. 它会在某个时刻称自己为。(这就是“重复”的原因)
  2. 它将有一些停止条件(或基本情况)。在
当你写了1个字时,你提到了你应该用“名字在返回”,所以太好了!你只需要在代码中写下:

return areaCodes(n),其中n是已删除数字的更新电话号码。在

如您所见,每个递归调用都应该对解决方案做一些工作,并且应该将其小型解决方案传递给下一个递归调用。在

除了上面的#2之外,还需要指定一个基本情况,递归将停止。因此,由于每次调用函数时都要去掉一个数字,所以应该进行某种检查,看看当前输入是否是您想要的长度。在

如果它的长度是正确的,就完成了,应该返回当前的数字(而不是另一个递归调用)。在

否则,你还没有完成递归。在

这样的怎么样?在

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...)

我假设这是一个需要递归的练习。如果是的话,试试这个(有更好的方法来完成你的最终目标,但是我尽量少修改你现有的代码):

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,它将再次调用函数,否则将返回数字。基本上,原始函数中唯一缺少的部分是以下部分,即递归部分:

^{pr2}$

相关问题 更多 >