Python基础入门第十一课--条件、循环和其他语句

    1.前言

    我们熟悉的条件、循环和其他控制语句在c语言里面经常使用,我们有时候也会去嵌套好几个循环,嵌套好几个条件以满足我们的需求,在Python语言里面,我们不容置疑的会用到这些好用的方法或者语句,它们的使用方法会和C语言里面的一样吗?我们可以用它来做什么呢?下面我们就来介绍一些这些语句。

    2.条件和条件语句

    我们前面好多章节讲述程序里面的语句都是一条一条顺序执行的,条件和条件语句这部分会介绍让程序选择是否执行语句块的方法。

  • 条件执行和if语句
#coding:utf-8
name=raw_input('What is your name: ')
if name.endswith('Yang'):
    print 'Hello.Mr.Yang'
/usr/local/bin/python2.7 /Users/yangjiayuan/PycharmProjects/day/day11/use_of_if.py
What is your name: Yang
Hello.Mr.Yang

Process finished with exit code 0
/usr/local/bin/python2.7 /Users/yangjiayuan/PycharmProjects/day/day11/use_of_if.py
What is your name: Sun
You input the wrong name

Process finished with exit code 0

    分析一下上面的程序,我们简单的写了一个判断的程序,用户输入自己的名字,我们对名字做出判断,如果名字是和我们条件设置的一样,我们给出一个问候的语句。如果输入的和我们设置的不一样,那我们也给出一个提示,可以再次运行程序再次输入。这样的简单判断可以使用在简单的用户认知。

    再来看一看if的语法:在语句输入完成后必须要紧跟一个冒号,然后再输入你想执行的语句,当在编译器里面缺失语法中的冒号时候,编译器会报错。这是和C语言里面不一样的地方。还有一点就是,当你在输入冒号完成后按下回车键,光标换到下一行的同时会有一个标准的缩进,这可以很好的区分归属,自己不可随意修改这样的格式。特别是在多层判断或者嵌套的时候要特别注意。

  • elif语句

    如果要检查多个条件,就可以使用elif,它是else if的简写,也就if和else子句的联合使用,也就是具有条件的else子句。

#coding:utf-8
name=raw_input('What is your name: ')
if name.endswith('Yang'):
    print 'Hello.Mr.Yang'
elif name.endswith('Zhao'):
    print 'Hello.Mr.Zhao'
else:
    print 'You input the wrong name'

    是不是看起来很规整,在这里我们也使用了elif,我们得记住它,在C语言里面可从来没有这种语句。程序运行的结果就不在这里展示了,和上面的基本上差不多,可以自己跑跑看。

  • 语句嵌套

    嵌套其实很简单,我们需要注意的就是适当的缩进,来保证嵌套的正确性和合理性。  

#coding:utf-8
name=raw_input('What is your name: ')
if name.endswith('Yang'):
    if name.startswith('Mr'):
        print 'Hello, Mr.Yang'
    elif name.startswith('Mrs'):
        print 'Hello, Mrs.Yang'
    else:
        print 'Hello, Yang'
else:
    print 'Hello, Stranger'

    这里做了多重判断,对用户输入的名字判断它的开始字符,结束字符,分别做出不同的处理。缩进也是很规范的,每一个print语句都与之对应的判断语句相关联,在一个编写程序时候我们也要注意这些,让我们的程序看起来更加整洁和明了。

    当然这里不止简单的这样使用就完成了对if语句的说明,我们可以联系前面说过的一些方法和操作来让程序内容更加丰富起来,比如我们讲过的:比较运算符、相等运算符、in成员资格检查、字符串和序列比较、布尔运算符等,都可以加入到语句中去。

  • 断言

     按照官方的称谓来说,IF语句有个非常有用的“近亲”,它的工作方式多少有点像下面这样的伪代码:

if not condition:

    crash program

    为什么我们需要这样的代码呢?就是因为与其让程序在晚些时候崩溃,不如在错误的条件出现时候直接让它崩溃。语句中使用的关键字是assert。我们来看一看:

>>> age=10
>>> assert 0<age<100
>>> age=-1
>>> assert 0<age<100
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
>>> age=-1
>>> assert 0<age<100, 'The age must be realistic'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError: The age must be realistic

    在我们第二次处理的时候,我们在assert语句后面加上我们要告诉用户的东西,也就是我们来解释一下断言到底是什么,在错误条件出现的时候直接让它崩溃,这会省掉很多不必要的麻烦。提高我们程序的可靠性。

    3.循环

    现在我们已经知道当条件为真或者假时候语句应该如何执行了,那么该如何让程序执行多次呢?难道我们要在程序里面多写几次么?你应该不会用这样的办法,Python为我们提供了循环。

  • while循环

    为了避免笨重的代码,我们可以像下面这样做:

#coding:utf-8
x=1

while x<=10:
    print x
    x+=1
/usr/local/bin/python2.7 /Users/yangjiayuan/PycharmProjects/day/day11/use_of_while.py
1
2
3
4
5
6
7
8
9
10

Process finished with exit code 0
  • for循环

    while语句很灵活。它可以用来在任何条件为真的情况下来执行一个代码块。一般情况下就够用了,但是有的时候还是的量身定做。比如给集合里面 每个元素都执行一个代码块。

>>> for i in numbers: print i
... 
1
2
3
4
5
6
7
8
9
10

    因为迭代某个范围的数字是很常见的,所以有个内建的范围函数提供使用:range

>>> range(0,10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    Range函数的工作方式类似于分片。还记得前面说过的含上不含下嘛,Range函数也是这样的。

  • 循环遍历字典元素

    一个简单的for循环就可以遍历字典所有的键,就像我们在前面处理序列一样,很方便。

#coding:utf-8
d={'x':'1','y':'2','z':'3'}
for key in d:
    print key, 'corresponds to', d[key]
/usr/local/bin/python2.7 /Users/yangjiayuan/PycharmProjects/day/day11/use_of_for.py
y corresponds to 2
x corresponds to 1
z corresponds to 3

Process finished with exit code 0

    我们创建一个字典,里面有三个键-值对,利用for循环我们可以将其一个一个打印出来显示到屏幕上。上面部分是程序内容,下面部分是程序运行的代码。我们也可以将上面程序的部分改写成下面这样的,同样可以得到相同的结果:

#coding:utf-8
d={'x':'1','y':'2','z':'3'}
for key,value in d.items():
    print key, 'corresponds to' ,value

    其中的items方法将字典里面所有的项以列表的方式返回,没有特定的顺序。字典元素的顺序通常是没有定义的,换句话说,迭代的时候,字典中的键和值都能保证被处理,但是处理顺序不确定。如果顺序很重要的话,可以将键值保存在单独的列表中。在迭代以前进行排序。

    4.跳出循环

    一般来说,循环会一直执行到条件为假,或者到序列元素用完的时候。但是有时候可能会提前终止一个循环,进行新的迭代,或者就是仅仅想结束循环。常见的跳出循环的方式有如下的方式:

  • break

结束循环可以使用break语句:

#coding:utf-8
from math import sqrt
for n in range(99,0,-1):
    root=sqrt(n)
    if root ==int(root):
        print n
        break
    这个程序会打印出100以内最大的平方数,当找到一个平方数以后就不在循环了,也就是找到81以后就会跳出循环。


  • continue

    相比break来说,continue语句要用的很少。它会让当前的迭代结束,“跳”到下一轮循环的开始。它的基本意思是:跳过剩余的循环体,但是不结束循环。可以像下面这样来处理:

#coding:utf-8
for x in seq:
    if condition1: continue
    if condition2: continue
    if condition3: continue
    
    do_something()
    do_somethingelse()
    do_another_thing()
    etc()

    上面的代码不能执行,我只是给出了处理的模式,并没有将具体的操作放入进去。大家知道这个框架就好了,不用去纠结具体的操作,你可以加入任何你想执行的操作。

    好咯,语句的知识就先讲解到这里,下一章节会稍微缓冲一下,说一些零碎的但是很重要的小知识。为我们后面抽象的概念进一步奠定基础。

猜你喜欢

转载自blog.csdn.net/qq_34454366/article/details/80222057
今日推荐