繁体   English   中英

引入else语句后,为什么代码执行的方式不同

[英]Why does the code executes differently once I introduce else-statement

我今天在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!")

什么都不会打印!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM