我的解决方案和算法出了什么问题

时间:2019-08-08 11:44:27

标签: python

num_dict返回所有具有( 值大于或等于min_cutoff

参数

  • num_dict:字典。 num_dict中的所有值都是数字。
  • min_cutoff:浮动。与num_dict值进行比较。返回所有键,其中 它们的值> = min_cutoff。
  • 设置:num_dict中所有键的值均满足截止条件的键。

示例

keys_geq_cutoff({'Alice': 21, 'Brett': 20, 'Carlos': 31}, 21)
{'Alice', 'Carlos'}

我的代码:

def keys_geq_cutoff(num_dict, min_cutoff):
    for k, v in num_dict.items():
        if (v >= min_cutoff):
            return(keys_geq_cutoff(num_dict, min_cutoff))

错误:

test_keys_geq_cutoff (test_methods.TestPython1)
Traceback (most recent call last):
  File "/usr/src/app/test_methods.py", line 13, in test_keys_geq_cutoff
    result1 = main.keys_geq_cutoff(test_d, 0)
  File "/usr/src/app/main.py", line 4, in keys_geq_cutoff
    return(keys_geq_cutoff(num_dict, min_cutoff))
  File "/usr/src/app/main.py", line 4, in keys_geq_cutoff
    return(keys_geq_cutoff(num_dict, min_cutoff))
  File "/usr/src/app/main.py", line 4, in keys_geq_cutoff
    return(keys_geq_cutoff(num_dict, min_cutoff))
  [Previous line repeated 956 more times]
  File "/usr/src/app/main.py", line 3, in keys_geq_cutoff
    if (v >= min_cutoff):
RecursionError: maximum recursion depth exceeded in comparison

3 个答案:

答案 0 :(得分:1)

现在,您将在return语句中再次使用完全相同的参数(因此是RecursionError)调用该函数。您需要将密钥收集到集合中,然后返回该集合:

def keys_geq_cutoff(num_dict, min_cutoff):
    res = set()
    for k, v in num_dict.items():
        if (v >= min_cutoff):
            res.add(k)
    return res

或者,可以使用一种不错的设置理解:

def keys_geq_cutoff(num_dict, min_cutoff):
    return {k for k, v in num_dict.items() if v >= min_cutoff}

答案 1 :(得分:0)

基本上,您遇到了递归错误,这意味着您要在函数主体中调用函数本身而没有提供exit子句,因此该函数将永远继续下去。为了解决这个问题,您必须创建一个exit子句(例如if语句)

但是您可能不想使用该技术

我认为这是您想要做的:

def keys_geq_cutoff(num_dict, min_cutoff):
    l = []
    for k, v in num_dict.items():
        if v >= min_cutoff:
            l.append(k)
    return set(l)

答案 2 :(得分:0)

您真的需要一个功能吗?这个问题看起来非常类似于: Return all the keys (as set) from num_dict that have value greater than or equal to min_cutoff

您可以为此使用一个编码器:

num_dict =  {'Alice': 21, 'Brett': 20, 'Carlos': 31}
min_cutoff = 21
num_dict_keys = [k for k, v in num_dict.items() if v >= min_cutoff ]
print(num_dict_keys)