为什么一旦我引入 else-语句,代码的执行方式会有所不同



我今天在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 == 2False。下一次迭代检查是否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!")

什么都不会打印!

最新更新