需求场景
现有以下字符串:
string = "liu de hua"
请打印该string字符串中的每个字母,并判断string中是否存在字母“e”,如果存在,停止打印;否则,输出:“字符串中不存在字符e”。
解析
- 使用for-in循环,遍历string;
- 输出当前字母;
- 使用if-else,如果存在字母“e”,结果循环,否则,输出:“字符串中不存在字符e”。
编写代码
string = "liu de hua"
for i in string:
print("当前字母为:"+ i)
if i == 'e':
print("字符串中包含字母e")
break
else:
print("字符串中不存在字母e")
竟然如此简单了!
本人预想目标结果如下:
当前字母为:l
当前字母为:i
当前字母为:u
当前字母为:
当前字母为:d
当前字母为:e
字符串中包含字母e
运行,结果如下:
这是什么啊?为啥输出这么多次“字符串中不存在字母e”这句话呢?
重新梳理代码,for-in、if-else格式都没没发现任何错误。
超乎你的想象
大家都知道python对空格有非常严谨的要求,大家分析如下代码,if-else的格式是不是存在问题?
string = "liu de hua"
for i in string:
print("当前字母为:"+ i)
if i == 'e':
print("字符串中包含字母e")
break
else:
print("字符串中不存在字母e")
if语句中else却与for对齐了,这是什么操作?
先看看运行结果:
竟然是我们理想的结果,那么又是为什么for与else必须对齐呢?
我们将string中字母“e”删除,查看else中的内容是否正常输出呢?
string = "liu d hua"
for i in string:
print("当前字母为:"+ i)
if i == 'e':
print("字符串中包含字母e")
break
else:
print("字符串中不存在字母e")
运行结果:
结果是正确的!
原因分析
首先我们梳理下需求:
请打印该string字符串中的每个字母,并 判断string中是否存在字母“e”,如果存在,停止打印;否则,输出:“字符串中不存在字符e”。
1. 首先,需要判断整个string中是否存在字母“e”;也就是说要for遍历完,将整个string中的每个字母进行对比,若果存在,就退出循环,不再执行else后面的内容 。
2. 其次,如果对比完整个string,不存在字母“e”,那么就再else后的内容。
再看一下第一次我写的代码:
string = "liu de hua"
for i in string:
print("当前字母为:"+ i)
if i == 'e':
print("字符串中包含字母e")
break
else:
print("字符串中不存在字母e")
我们将else放在了for循环里面,当对比第一个字母时,若果不是“e”,就执行了else后面的内容;依次循环,对比一次,执行一次else。
我们想要的是对比完整个string,如果没有字母“e”,再执行else。
所以,else在格式要与for对齐!!!