如何解决如果函数输入在指定范围内,返回 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 举报,一经查实,本站将立刻删除。