如何递归地对列表进行切片并比较相邻值

2024-09-29 19:25:49 发布

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

enter code here如果不给出解决方案,有人可以帮助我理解如何表示此模式。我认为您需要检查N+1>;递归计算第n个值。因为这不是一个列表,我想我需要使用模和层划分来遍历列表。然而,由于只有两个return语句,我不知道如何递归调用函数并返回True和False

问题陈述: 孔号是一个数字,其中每一个其他数字都位于紧邻它的数字下方。例如,编号968将被视为孔编号,因为编号6小于其周围的两个数字。假设我们只传入具有奇数位数的数字。定义以下函数,以便正确标识孔号

def check_hole_number(n):
    """
    >>> check_hole_number(123)
    False
    >>> check_hole_number(3241968)
    True
    >>> check_hole_number(3245968)
    False
    """
    if _________________________________________________________:
        return _________________________________________________________
    return ______________________________________________________________

我的解决方案:

def check_hole_number(n):
    if n // 10 == 0:
        return True
    return (n % 10) > (n // 10 % 10) and (n // 10 % 10) < (n // 100 % 10) \
    and check_hole_number(n // 100)

Tags: andfalsetruenumber列表returnifdef
2条回答

我已经实现了下面的一个示例,欢迎您查看以寻求帮助。如果您不想这样做,请遵循以下提示:

作为提示:

  1. 如果使用递归,则始终需要一个终止条件,否则,函数将无休止地调用自身,因此请考虑哪些输入不应用于再次调用函数。如果使用此输入调用函数(通过递归调用),只需返回一个值,一个布尔值,不要再次调用该函数

  2. 您已经找到了定义递归新函数调用的正确方法,但是作为新输入的真的是n[1:]吗?再想一想,并用一个例子手动完成该函数

  3. 什么时候需要另一个函数调用?或者换句话说:什么时候可以确定输入n不是孔号?设置此条件并根据条件是真还是假设置函数调用

  4. 一般提示:int类型的变量在Python中是不可下标的,因此您必须始终将数字转换为str,即字符串表示形式

!!扰流板;-)! 示例实现(仅在以下假设下有效:inputNumber mod 2 != 0) 可以在这里找到: https://www.codepile.net/raw/NpoRbalV.py

模式将类似于:

您必须在每个步骤中检查当前编号的前3位数字:

  • 检查(在if语句中)前3个数字是否符合hole number条件
  • 如果前3位符合hole number条件,则检查当前步骤中是否有最后3位:

    • 如果您有最后3位数字,那么您应该返回True(您已经检查了所有剩余的数字,现在您确定数字是hole number
    • 如果没有最后3位数字,则必须再次调用函数检查下一位数字(必须跳过前2位)
  • 如果当前前3位不是hole number,则应返回False

def check_hole_number(n):
    """
    >>> check_hole_number(123)
    False
    >>> check_hole_number(3241968)
    True
    >>> check_hole_number(3245968)
    False
    """
    if str(n)[1] < str(n)[0] and str(n)[1] < str(n)[2]:
        return True if len(str(n)) == 3 else check_hole_number(str(n)[2:])

    return False

此外,您还可以检查当前步骤的最后3位数字:

def check_hole_number(n):
    """
    >>> check_hole_number(123)
    False
    >>> check_hole_number(3241968)
    True
    >>> check_hole_number(3245968)
    False
    """
    if n // 10 % 10 < n % 10 and  n // 10 % 10 <  n % 1000 // 100:
        return True if n < 1000 else check_hole_number(n // 100)

    return False

相关问题 更多 >

    热门问题