[Python] for或while循环后面加else的妙用

文章目录

  • 一、背景
  • 二、分析与演示
    • 1. Python里的else
  • 三、总结

for或while循环中加else有什么用?循环后的else有什么作用?

一、背景

逛论坛的时候看到这样一个问题,想起自己刚开始学Python的时候,也是如此一方面惊讶于Python的简洁,一方面遇到了许许多多的低级问题。

循环语句后面加esle就是其中之一;
在这里插入图片描述

二、分析与演示

首先,我们先确定,C++里不能这么写,否则我又要补课了

C++11环境:
在这里插入图片描述
实锤报错:
在这里插入图片描述

1. Python里的else

C++没有应用这个语法,Python可以,下面将用实例讲解:

我们先设定一个需求:
给定一个字符串,按下标寻找指定字母a,没找到就输出None

C++代码需要:
我们实际应用肯定不需要这么写,这里是为了演示需要

#include 
#include 
using namespace std;int main() {string str="apple";int i=0;bool flag=false;for(;i<str.length();++i){if(str[i]=='a'){flag=true;break;}}if(flag){cout<<i<<endl;}else{cout<<"NONE"<<endl;}return 0;
}

简单来说,就是C++需要判断一个标志位,来确定是否是循环是否是break出去的;

如果用python:

str = 'python'
i=0
while i<len(str):if str[i]=='a':breaki+=1
else:print("None")
  1. 当str='python’时:
    在这里插入图片描述
    循环体没有被break 输出None

  2. 当str含a时:str=‘apython’
    在这里插入图片描述
    没有输出

  3. 当没有进入循环体时: while False:
    在这里插入图片描述
    仍然输出了None

三、总结

综上三种情况:

  1. 进入了循环体:
    1.1 没有break出来 -> 执行else
    1.2 break出循环体 -> 跳过else

  2. 没有进入循环体 -> 执行else

一言概之,当循环体被break的时候不会执行else

回到楼主的问题,应该的编译器的原因,3.6.5 下,IDLE无提示,PyCharm内部红线,但可以正常运行;
猜测是因为PyCharm编译器认为m那时候应该被回收了吧…
在这里插入图片描述
在这里插入图片描述
至于为啥 l 不红线,大概是因为l 在for 里被标黄线了吧…
在这里插入图片描述

这种检测策略问题希望懂的老哥说下(:


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部