我今天在CodingBat做练习,遇到了一个有趣的问题:
给定一个整数数组,如果数组在某处的 2 旁边包含一个 2,则返回 True。
这段代码运行了错误的半衰期:
for i in range(len(nums)-1):
if nums[i] == 2 and nums[i+1] == 2:
print(True)
else:
print(False)
对于输入nums = [1, 2, 2]
,它给出输出:False
这段代码给出了True
:
for i in range(len(nums)-1):
if nums[i] == 2 and nums[i+1] == 2:
print (True)
print (False)
我的问题是为什么引入 else 语句会改变代码的工作方式?
你给出一半的输出,因为你的第一个代码打印False
然后True
。这是因为您在每次迭代时都要打印。因此,第一次迭代检查是否打印了1 == 2
和False
。下一次迭代检查是否2 == 2
打印True
。
您应该做的是,仅在找到条件并从循环中break
时打印True
,并且仅在循环耗尽而未中断时才打印False
。这意味着找不到连续的数字,可以使用 for 循环上的else
子句来完成:
nums = [1, 2, 2]
for i in range(len(nums)-1):
if nums[i] == 2 and nums[i+1] == 2:
print(True)
break
else:
print(False)
关于你的问题:
为什么引入 else 语句会改变代码的工作方式?
嗯,这是因为它相当于添加了另一个条件。例如,此程序:
x = 5
if x > 7:
print("BIG!")
else:
print("small...")
相当于:
x = 5
if x > 7:
print("BIG!")
if x <= 7:
print("small...")
因此,通过添加第二个条件,您可以为代码提供另一种操作方式,以防第一个条件失败。如果你省略了else
(第二个条件),代码就别无选择,只是这样做......无
例如,在上面的两段代码中,将打印small...
。但在此代码中:
x = 5
if x > 7:
print("BIG!")
什么都不会打印!