微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果函数输入在指定范围内,返回 True 或 False 的最有效方法是什么? 效率问题

如何解决如果函数输入在指定范围内,返回 True 或 False 的最有效方法是什么? 效率问题

所以我刚刚完成了 Python 课程的部分考试,给出的挑战之一是编写一个函数,如果函数输入在 100 或 200 的 10 之内,该函​​数将返回 True。

我想出了一个有效的函数,但是,我知道我缺少一些效率。

这是我最初尝试的功能

def numfunc(a):
    range_list = list(range(90,111)) + list(range(190,211))
    for num in range_list:
        if a != num:
            continue
        elif a == num:
            return True
        else:
            return False

上述代码的问题在于,如果数字在范围内,它会返回 True,但如果不在范围内,则不会返回任何内容

我写的最终起作用的函数是这样的:

def numfunc(a):
    range_list = list(range(90,211))
    answer = []
    
    for num in range_list:
        if a == num:
            answer.append(True)
            
    if answer == [True]:
        return True
    
    if answer != [True]:
        return False

请记住,我使用的是我自己在课程中学到的或复习过的功能

所以如果有人能指出为什么第一段代码没有返回 False 和/或可以教我一种更有效的方法来完成同样的事情:我很想向你学习。

解决方法

您可以使用链式比较在一个表达式中完成此操作:

def f(a):
    return 90<=a<=110 or 190<=a<=210

print(f(200))
print(f(90))
print(f(150))

结果:

True
True
False
,

如果你想检查一个数字 n 是否在 2 个数字的范围内,你应该使用 range 来检查它,返回 true 或 false。您正在做的是基于两个列表创建一个列表,这些列表不是创建从 90 到 211 的列表,而是创建一个包含从 90 到 110 和 190 到 210 的数字的列表。

此外,如果您想检查列表中是否存在数字,只需使用:

if n in list:
   return True

这应该有效:

def numFunc(a):
        print(a in range(0,100))
    
numFunc(2)
numFunc(101)
numFunc(20)

输出:

True
False
True
,

原因是如果数字不匹配,if a != num: continue 会阻止其他任何事情发生。循环将结束,函数将返回默认值 None。

简单的解决方法是像这样编写循环:

for num in range_list:
    if == num:
        return True
return False

请注意,最终返回在循环之外。

但从效率的角度来看,通过检查整数元素来测试范围内的包含情况是一个糟糕的主意。改用丰富的比较运算符:

def numfunc(a):
    return abs(a - 100) <= 10 or abs(a - 200) <= 10

不使用 abs 的等效表达式是

def numfunc(a):
    return -10 <= a - 100 <= 10 or -10 <= a - 200 <= 10

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。