以下代码返回 None
而不是 False
。请帮我理解原因。
def same_first_last(nums):
for i in nums:
if nums[0] == nums[-1] and len(nums) >= 1:
return True
else:
return False
print(same_first_last([]))
感谢任何帮助!!!
答案 0 :(得分:1)
根据您的问题有两种情况:-
nums
的大小 > 0:
如果 nums
列表不为空,那么它要么满足您的 if
条件,即 nums[0] == nums[-1] and len(nums) >= 1
在这种情况下它将返回 True
否则它将返回 { {1}}
False
的大小 == 0
如果是这种情况,那么代码甚至不会进入 nums
循环内部,在这种情况下,它将无法进入 for
块内部,这就是为什么 python 返回 {{1}默认情况下,因此您的代码也返回 None。
为避免这种情况,您可以更改如下代码:-(您甚至不需要进入 for 循环,因为您的 if else
条件是静态的,即不随迭代器 None
从您问题的 if else
循环。
i
在上面的 for
中,它是两个条件 def same_first_last(nums):
return nums and nums[0] == nums[-1]
print(same_first_last([]))
和 return nums and nums[0] == nums[-1]
的连接
a) if nums
正在检查您正在迭代的列表或字符串是否为空。如果为空则返回 if nums[0] == nums[-1]
else if nums
b) False
: - 它正在检查您问题中的条件(检查前面的元素和最后一个元素是否相等)
当以上两个条件都满足时,则只返回True,否则返回False
答案 1 :(得分:0)
由于您使用空列表调用方法,因此您永远不会在方法中进入 for 循环,因此您永远无法到达 return 语句。当您使用空列表调用您的方法时,您的 for 循环将被完全跳过。你可以像这样改变你的方法:
def same_first_last(nums):
for i in nums:
if nums[0] == nums[-1] and len(nums) >= 1:
return True
else:
return False
return <enter default value here>
但您甚至不需要循环,因此您可以进一步简化代码:
def same_first_last(nums):
if len(nums) > 0:
return nums[0] == nums[-1]
else:
return False
答案 2 :(得分:0)
您没有进入循环,因此该函数实际上没有返回值。这可以通过在循环内打印一些东西来验证:
def same_first_last(nums):
for i in nums:
print("in the loop")
if nums[0] == nums[-1] and len(nums) >= 1:
return True
else:
return False
print(same_first_last([]))
您实际上可以通过交换 if() 语句中的条件并删除 for 循环来使此代码工作,如下所示:
def same_first_last(nums):
return len(nums) >= 1 and nums[0] == nums[-1]
print(same_first_last([]))