while循环

来源:互联网 发布:centos yum wget 编辑:程序博客网 时间:2024/05/19 04:52

在Python中,while循环就是所谓的“条件控制的”循环,因为循环的任务会一直执行直到达到期望的条件。一旦达到条件,循环就停止了。例如,你可能想要循环的任务会一直执行,直到某个条件不再为真。在这种情况下,可以在Python中使用while循环。
在Python中while循环的语法如下所示:

while condition_test_statement:    set_of_Python_statements

就像for循环一样,while循环使用缩进来表明与它相关的语句(代码块)。condition_test_statement检查一个条件,并且当这个条件被判断为真时,在循环代码块中的语句会被执行。在每一次的迭代中,都会检查条件。如果检查条件后判断为假,迭代停止。

1、使用数字条件来进行迭代

在while循环的条件测试语句中,可以使用一个数字或者一个数学表达式。例如,下列代码就展示了在while循环中使用的一个数学条件。

#一个while循环the_number = 1while the_number <= 5:    print(the_number)    the_number = the_number + 1

在上述代码中,while语句的测试条件检查变量the_number的值。只要该变量的值比5小或者等于5,接下来的Python语句都会执行。在第四行,while循环中的最后一条语句将变量的值增加 1.因此,当变量 the_number 等于6时,while循环的测试语句会返回false。这时迭代就停止啦!
注意:while循环时先验循环,这意味着测试语句先于代码块中的语句执行。这也是为什么需要在执行while循环的测试条件之前,必须先给变量the_number赋值。这类循环称为先验循环,或者叫做进入控制循环。

2、使用字符串作为判断条件进行遍历

字符串可以被用作while循环条件测试语句的一部分。在下列代码中,while测试语句检查变量the_number,然后看它是否不等于( != )一个空字符串。while循环只需要名字不为空即可构成列表,也就是说,只要脚本用户没有直接按下回车键而输入名字。
这里写图片描述
注意:在上述代码中,当按下回车键时,会把一个空字符串或空值赋给变量the_name,这会导致while循环终止。这种空字串或空值叫做标记值。标记值可以是用来表示循环结束的任何一个预定值。因此,标记值可以用来终止while循环。

在上述代码中,可以做出一个改进,在第5行,可以使用一个更加高效的快捷运算符来替换这段非常长的代码,这个快捷运算符是叫做增量赋值运算符,使用这个快捷运算符之后,代码如下所示:

list_of_names= ""the_name ="Start"while the_name != "":    the_name=input("Enter name:")    list_of_names += the_name

另外一种改进方式就是在while循环中添加一条else语句,将会变成下列代码所示:

#while循环中的一个else语句list_of_names= ""the_name ="Start"while the_name != "":    the_name=input("Enter name:")    list_of_names += the_nameelse:    print(list_of_names)

在上述代码中,变量 list_of_names在while循环终止后打印出来。然而,应该知道,else从句可能在while测试语句返回false的任何时候执行,这可能是在第一次循环中就发生的事情!下列的代码就是对上述的问题进行了进一步的改进,来演示出这个问题:

#因为先验循环导致的else从句问题list_of_names= ""the_name ="Start"while the_name != "Start":    the_name=input("Enter name:")    list_of_names += the_nameelse:    print(list_of_names)

在循环语句被执行前,测试语句就返回了false。然而,else部分仍然执行了,并且由于 list_of_names 当前设置为空,这在第9行上打印了一个空行。可以看到else子句在while循环中的运作方式与在 if/else 中非常不同。

3、使用while True

你可以使用while语句创建一个无限循环。一个无限循环是一个不会结束的循环。为这种类型的循环添加一个break语句可以让其变得可用。在下列代码中,第3行上的while测试语句修改为 while True:;这使得循环变成是无限的,这意味着循环会被无限迭代。因此,第5行对一个新加的标记值进行测试。如果没有键入名字而直接按下了回车键,if语句会返回 true,然后会执行break。因此,无限循环停止。

list_of_names= ""the_name ="Start"while True:    the_name=input("Enter name:")    if the_name == ""        break    list_of_names += the_nameelse:    print(list_of_names)

需要值得注意的是,在上述代码中else子句没有执行。这是因为,当在循环中进行break时,任何 else 子句中的语句都会被跳过,你直接“跳”出了while循环。为了让名称打印出来,可以删除else子句,并把print语句移动到 if 中的break之前,如下代码所示:

list_of_names= ""the_name ="Start"while True:    the_name=input("Enter name:")    if the_name == "":        print(list_of_names)        break    list_of_names += the_nameelse:    print(list_of_names)