我的解决方案和算法有什么问题?

2024-06-02 13:25:08 发布

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

返回num_dict中具有 大于或等于min_cutoff的值。你知道吗

参数

  • 字典。num\ u dict中的所有值都是数字。你知道吗
  • 最小截止:浮动。与数值比较。归还所有钥匙,在哪里 它们的值大于等于最小截止值。你知道吗
  • set:来自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

Tags: inpytestsrcappmainusrline
3条回答

基本上,您有一个递归错误,这意味着您在函数体中调用函数本身,而没有提供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)

现在,您在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}

你真的需要一个函数吗?问题看起来很相似: 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)

相关问题 更多 >