python 中的 for-else 和 while-else 语句
绝大部分编程语言中都有条件判断语句,比如 if-else。这里的 else 一般与 if 成对使用。不过在 Python 中,else 除了能与 if 配合外,还能和 for、while 配对使用。
我们来看一个例子:
假设有一个列表用来保存学生信息,列表的元素是字典,字典中的键有姓名、年龄等。让用户输入一个名字,然后在列表中查询,如果有这个名字就告诉用户“找到了”,反之告诉用户“没有找到”。
一般情况下,我们可能会这样写:
info = [{"name":"Leslie", "age":30},
{"name":"Karl", "age":20},
{"name":"Tom", "age":25}]
to_find_name = input("please input a name:")
found_flag = False
for person in info:
if person["name"] == to_find_name:
found_flag = True
if found_flag:
print("Found it")
else:
print("Not found")
程序运行结果如下:
please input a name:Tom
Found it
please input a name:Wang
Not found
细心的你肯定发现了:代码在第7行定义了一个标志变量,其默认值是False;在对列表的遍历中,如果找到了,就把这个变量赋值为True;最后根据这个变量的值,打印出查询结果。
如果使用了 for-else 语句,代码可以这样写:
info = [{"name":"Leslie", "age":30},
{"name":"Karl", "age":20},
{"name":"Tom", "age":25}]
to_find_name = input("please input a name:")
for person in info:
if person["name"] == to_find_name:
print("Found it")
break;
else:
print("Not found")
运行结果和前面是一样的。
这里的逻辑是:如果运行了 break,那么就不执行 else 语句;如果没有运行 break,那么就执行 else 语句。
这样写的优点是:节省笔墨,不用再设置一个标志变量。
有的朋友会问,如果 for 的循环体中没有 break 语句,else 语句还会执行吗?答案是:会!
while-else 的用法同理。