[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")
-
当str='python’时:

循环体没有被break 输出None -
当str含a时:str=‘apython’

没有输出 -
当没有进入循环体时: while False:

仍然输出了None
三、总结
综上三种情况:
-
进入了循环体:
1.1 没有break出来 -> 执行else
1.2 break出循环体 -> 跳过else -
没有进入循环体 -> 执行else
一言概之,当循环体被break的时候不会执行else
回到楼主的问题,应该的编译器的原因,3.6.5 下,IDLE无提示,PyCharm内部红线,但可以正常运行;
猜测是因为PyCharm编译器认为m那时候应该被回收了吧…


至于为啥 l 不红线,大概是因为l 在for 里被标黄线了吧…

这种检测策略问题希望懂的老哥说下(:
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
