Python条件语句和循环语句
条件和条件语句
1. 有条件地执行和 if 语句
真值可合并,至于如何合并稍后再讲,先来看看真值可用来做什么。请尝试运行下面的脚本:
name = input('What is your name? ')
if name.endswith('Gumby'):
print('Hello, Mr. Gumby')
这就是if语句,让你能够有条件地执行代码。这意味着如果条件(if和冒号之间的表达式)
为前面定义的真,就执行后续代码块(这里是一条print语句);如果条件为假,就不执行。
2. elif 子句
要检查多个条件,可使用elif。elif是else if的缩写,由一个if子句和一个else子句组合而
成,也就是包含条件的else子句。
3. if-else 语句
经常需要在条件测试通过了时执行一个操作,并在没有通过时执行另一个操作;在这种情况下,可使用Python提供的if-else语句。if-else语 句块类似于简单的if语句,但其中的else语句让你能够指定条件测试未通过时要执行的操作。
下面的代码在一个 人够投票的年龄时显示与前面相同的消息,同时在这个人不够投票的年龄时也显示一条消息:
age = 17
1.ifage>=18:
print("You are old enough to vote!")
print("Have you registered to vote yet? )
2.else:
print("Sorry, you are too young to vote.' )
print("Please register to vote as soon as you turn 18!")
如果1处的条件测试通过了,就执行第一个缩进的print语 句块;如果测试结果为False, 就执行2处的else代码块。这次age小于18. 条件测试未通过,因此执行else代码块中的代码:Sorry, you are too young to vote.
Please register to vote as soon as you turn 18!
上述代码之所以可行,是因为只存在两种情形:要么够投票的年龄,要么不够。if-else结构非常适合用于要i让Python执行两种操作之一的情形 。在这种简单的if-else结构中,总是会执行两个操作中的一个。
4. 代码块嵌套
下面穿插点额外的内容。你可将if语句放在其他if语句块中,如下所示:
name = input('What is your name? ')
if name.endswith('Gumby'):
if name.startswith('Mr.'):
print('Hello, Mr. Gumby')
elif name.startswith('Mrs.'):
print('Hello, Mrs. Gumby')
else:
print('Hello, Gumby')
else:
print('Hello, stranger')
在这里,如果名字以Gumby结尾,就同时检查名字开头,这是在第一个代码块中使用一条独立的if语句完成的。请注意,这里还使用了elif。最后一个分支(else子句)没有指定条件——如果没有选择其他分支,就选择最后一个分支。如果需要,这里的两个else子句都可省略。如果省略里面的else子句,将忽略并非以Mr.或Mrs.打头的名字(假设名字为Gumby)。如果省略外面的else子句,将忽略陌生人。
循环语句
1.while循环
while循环。当条件为真的时候,永远循环下去,如果条件为假,跳出循环或不循环。语法:
while条件:
执行体
当你执行下面代码,程序会一直打印 hello world。那是因为 a < b 这个条件是成立的
a = 1
b = 3
while a<b:
print("hello world")
如果你想停止这个死循环,有 3 种办法:
第一种,把条件弄成不成立的,这样程序就只会循环一次
a = 1
b = 3
while a < b:
print("hello world")
a = 10
第二种,在循环体里加上 break 关键词,break 会帮你跳出循环
a = 1
b = 3
while a < b
print("hello world")
break
第三种(最简单的一种),按下 ctrl + c,但这样会报出 KeyboardInterrupt 的错误。
2.for 循环
while语句非常灵活,可用于在条件为真时反复执行代码块。这在通常情况下很好,但有时候你可能想根据需要进行定制。一种这样的需求是为序列(或其他可迭代对象)中每个元素执行代码块。
注意 :基本上,可迭代对象是可使用for循环进行遍历的对象。就目前而言,只需将可迭代对象视为序列即可。
为此,可使用for语句:
words = ['this', 'is', 'an', 'ex', 'parrot']
for word in words:
print(word)
或
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for number in numbers:
print(number)
鉴于迭代(也就是遍历)特定范围内的数是一种常见的任务,Python提供了一个创建范围的内置函数。
>>> range(0, 10)
range(0, 10)
>>> list(range(0, 10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
范围类似于切片。它们包含起始位置(这里为0),但不包含结束位置(这里为10)。在很多情况下,你都希望范围的起始位置为0。实际上,如果只提供了一个位置,将把这个位置视为结束位置,并假定起始位置为0。
>>> range(10)
range(0, 10)
下面的程序打印数1~100:
for number in range(1,101):
print(number)
注意,相比前面使用的while循环,这些代码要紧凑得多。
提示:只要能够使用for循环,就不要使用while循环。
3.while循环与for循环的差异
while循环与for循环的最大区别在于,while循环是基于条件判断的循环,而for循环则是基于容器的循环。对于while循环来说,当条件满足时,将一直处于循环状态,除非碰见break关键词;对于for循环来说,当容器内的元素没有迭代结束,则一直处于循环状态,同样碰见break关键词时也会退出循环。
所以,在做循环问题时,首先自问循环过程中有没有明确的迭代对象(即容器),然后再根据判断结果,选择优先方案,即如果有迭代对象,则优先使用for循环,否则优先使用while循环。
4.range()
range()是一个内置函数,这意味着Python是预先打包了它的。这个函数可以创建一个数字序列(称为range对象)并返回它。当然,您可以将这组数字用于各种目的: 如下所示,range()实际上能很好地与循环一起使用。
下面是Python help()模块提供的一个更专业的解释:
"返回一个对象,该对象会从开始数字(包括)到停止数字(不包括)按步长生成一个整数序列。range(i, j)会产生i, i+1, i+2,…,j-1。开始数字默认为0,停止数字被省略!range(4)会产生0,1,2,3。这些正是一个4元素列表的有效索引。当给定一个步长时,它指定了递增数(或递减数)。
5.continue
语句continue没有break用得多。它结束当前迭代,并跳到下一次迭代开头。这基本上意味着跳过循环体中余下的语句,但不结束循环。这在循环体庞大而复杂,且存在多个要跳过它的原因时很有用。在这种情况下,可使用continue,如下所示:
for x in seq:
if condition1: continue
if condition2: continue
if condition3: continue
do_something()
do_something_else()
do_another_thing()
etc()
然而,在很多情况下,使用一条if语句就足够了。
for x in seq:
if not (condition1 or condition2 or condition3):
do_something()
do_something_else()
do_another_thing()
etc()
continue虽然是一个很有用的工具,但并非不可或缺的。
6.使用break退出循环
要立即退出while循环,不再运行循环中余下的代码,也不管条件测试的结果如何,可使用break语句。break语句用于控制程序流程,可使用它来控制哪些代码行将执行,哪些代码行不执行,从而让程序按你的要求执行你要执行的代码。
例如,来看一个让用户指出他到过哪些地方的程序。在这个程序中,我们可以在用户输入'quit'后使用break语句立即退出while循环:
while True: