【问题标题】:Higher Order Function Python (never ending?)高阶函数 Python(永无止境?)
【发布时间】:2020-06-25 07:44:05
【问题描述】:

我有一个代码可以在输入像“123”这样的递增值时起作用,但在下一个字符小于前一个字符(例如“132”)时不起作用,如果有相同的数字,则递归永远不会停止(例如'122')

请在我的代码中指出问题,我们将不胜感激。

def sum(term, a, next, b):
    if (a > b):
        return 0
    else:
        print (term(a), a, next(a), b)
        return term(a) + sum(term, next(a), next, b)

def knocked_down(game):

    t1 = lambda x:int(game[x])
    t2 = 0
    t3 = lambda x: int(game[x])
    t4 = len(game)-1
    return sum(t1, t2, t3, t4)

results=knocked_down("123")
print('---')
print(results)

【问题讨论】:

  • 它工作时应该做什么?
  • @Sayse 假设执行“1+2+3”,然后打印出 6。
  • 顺便说一句,您应该避免覆盖内置名称。在这种情况下,next 是参数的错误名称。
  • 我认为t3 函数有问题。我认为t3 应该是lambda x: x + 1
  • 那么,您应该为sum 提供正确的输入,所以它的行为就像将1+2+3 加在一起?而且这不是家庭作业或其他一些人为的测试吗?

标签: python loops recursion higher-order-functions


【解决方案1】:

sum函数中,参数可能意味着

  • term: 按索引获取值的函数
  • a:开始索引
  • next: 获取下一个索引的函数
  • b: 最后索引

OP 说:

sum() 函数不是我编写的。我的任务是使用它,我不能更改代码。

所以我没有碰sum函数。
您可以将t3 更改为lambda x: x + 1

def sum(term, a, next, b):
    if (a > b):
        return 0
    else:
        print(term(a), a, next(a), b)
        return term(a) + sum(term, next(a), next, b)


def knocked_down(game):
    t1 = lambda x: int(game[x])
    t2 = 0
    t3 = lambda x: x + 1
    t4 = len(game) - 1
    return sum(t1, t2, t3, t4)


results = knocked_down("132")
print('---')
print(results)

输出:

1 0 1 2
3 1 2 2
2 2 3 2
---
6

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    相关资源
    最近更新 更多