python return相关问题
本帖最后由 李万金 于 2020-8-16 18:43 编辑我做leedcode上一道题,给定一个包括n个整数的数组nums;和 一个目标值target。找出nums中的三个整数,使得它们的和与targe最接近。返回这三个数的和。
在打代码的时候,发现如果没有下面标红的一段代码:return res,测试的时候没有结果,按ctrl + c 报错(已截图)
最后一行不是有一个返回吗,为什么还要再加一个return,有大佬知道吗
class Solution:
def threeSumClosest(self, nums: List, target: int) -> int:
n = len(nums)
res = float('inf')
if not nums: return 0
if n < 3:return sum(nums)
nums.sort()
for i in range(n):
L = i + 1
R = n - 1
while L < R:
t = nums + nums + nums
if abs(t - target) < abs(res - target):
res = nums + nums + nums
if t < target:
L += 1
elif t > target:
R -= 1
else:
res = t
return res
return res
本帖最后由 Twilight6 于 2020-8-16 18:57 编辑
最后一行不是有一个返回吗,为什么还要再加一个return?
一个 return 在 while 循环内部,所以前提要符合 while 的循环条件才能进入循环
而且 while 循环中只有 else 设置了 return ,则只有当 else 上面的if 和 elif 条件都不成立才会执行这个 return ,如果没有循环外的 return
那么执行代码时候,如果循环根本没有进入,或者循环过程中 if 和 elif 条件总有一个满足时退出 while 循环,就会导致你没有设置 reuturn ,返回 None 了
而且这个代码可以正常执行,有返回结果:
测试代码:
class Solution:
def threeSumClosest(self, nums, target: int) -> int:
n = len(nums)
res = float('inf')
if not nums: return 0
if n < 3:return sum(nums)
nums.sort()
for i in range(n):
L = i + 1
R = n - 1
while L < R:
t = nums + nums + nums
if abs(t - target) < abs(res - target):
res = nums + nums + nums
if t < target:
L += 1
elif t > target:
R -= 1
else:
res = t
return res
return res
test = Solution()
print(test.threeSumClosest(,3))
Twilight6 发表于 2020-8-16 18:54
一个 return 在 while 循环内部,所以前提要符合 while 的循环条件才能进入循环
而且 while 循环中 ...
我标红的是循环里面的return,没这个return无法执行 李万金 发表于 2020-8-16 19:22
我标红的是循环里面的return,没这个return无法执行
这个不就是循环过程中 前面的 if 和 elif 不满足时候 提前返回结果啊 Twilight6 发表于 2020-8-16 19:34
这个不就是循环过程中 前面的 if 和 elif 不满足时候 提前返回结果啊
大佬,我是萌新。很多都不懂。我不明白的是既然循环里面执行了res = t,res有值,最后一行的return res,不把res返回了吗。倒数第二行的return res不应该可有可无吗?但在测试的时候不能没有。我很奇怪 李万金 发表于 2020-8-16 19:40
大佬,我是萌新。很多都不懂。我不明白的是既然循环里面执行了res = t,res有值,最后一行的return res ...
你 while 循环,是只有在L 不小于 R 的时候才直接 return res
但是你在 while 循环过程中,如果 L 还是 小于 R 的,而且 if 和 elif 条件都不满足时候就提前返回 return res
而不是当你循环到 while 的 L<R 条件不满足时候才返回
具体你找测试时候的值,拿去调试看看就知道了,结果会不一致的 Twilight6 发表于 2020-8-16 19:48
你 while 循环,是只有在L 不小于 R 的时候才直接 return res
但是你在 while 循环过程中,如果 L ...
是代码不能运行,不是结果不一致。我的表达不清楚吗 李万金 发表于 2020-8-16 20:12
是代码不能运行,不是结果不一致。我的表达不清楚吗
结果不一致导致你力扣测试不过就会错误啊,代码是可以运行的 Twilight6 发表于 2020-8-16 20:13
结果不一致导致你力扣测试不过就会错误啊,代码是可以运行的
class Solution:
def threeSumClosest(self, nums, target):
n = len(nums)
res = float('inf')
if not nums: return 0
if n < 3:return sum(nums)
nums.sort()
for i in range(n):
L = i + 1
R = n - 1
while L < R:
t = nums + nums + nums
if abs(t - target) < abs(res - target):
res = t
if t < target:L += 1
elif t > target:
R -= 1
else:
res = t
return res
我在提问中说了没有倒数第二行,标红的代码,输入上面图中的实例不能运行。我奇怪的是这一点, 李万金 发表于 2020-8-16 20:16
class Solution:
def threeSumClosest(self, nums, target):
n = len(nums)
哦哦,确实是我理解错题意了,抱歉
你如果去掉 return ,对于你这里的测试代码,导致 while 第一次进入循环,前面的 if 和elif 条件都不满足,直接只执行了 else
而对 L 、R 的值未进行改变,所以导致下次循环还是原先的 L 和 R 的值,陷入死循环
Twilight6 发表于 2020-8-16 20:26
哦哦,确实是我理解错题意了,抱歉
你如果去掉 return ,对于你这里的测试代码,导致 while 第一次 ...
厉害,大佬一眼就看出来了,我想了半天
页:
[1]