• python学习笔记之四:条件,循环和其他语句


    前面已经介绍过几种基本语句(print,import,赋值语句),下面我们来介绍条件语句,循环语句。

    一. print和import的更多信息

    1.1 使用逗号输出

    A.打印多个表达式,用逗号隔开,会在每个参数之间插入一个空格符:

    >>> print 'age:',42
    age: 42

    B.同时输出文本和变量值,却又不希望使用字符串格式化:

    >>> name = 'Peter'
    >>> greeting = 'Hello'
    >>> print greeting,',',name
    Hello , Peter

    上面的例子中会在逗号前加入一个空格,我们可以这样优化:

    >>> print greeting + ',',name
    Hello, Peter

    注意,如果在结尾处加上逗号,那么接下来的语句会与前一句在同一行打印:

    >>> print 'Hello,',
        print 'world'
    
    Hello,world

    1.2 把某件事作为另一件事导入

    从模块导入函数时,可以使用:

    整个模块导入:import somemodule

    导入其中一个函数:from somemodule import somefunction

    导入其中几个函数:from somemodule import somefunction,anotherfunction,yetanotherfunction

    导入全部函数:from somemodule import *

    如果某2个模块都有相同名字的函数,比如叫open函数,那么可以这样给函数或者模块提供别名:

    >>> import math
    >>> import math as foobar
    >>> foobar.sqrt(4)
    2.0
    >>> from math import sqrt as foobar2
    >>> foobar2(4)
    2.0

    二. 赋值魔法

    就算是不起眼的赋值语句也有一些特殊的技巧。

    2.1 序列解包

    序列解包就是将多个值的序列解开,然后放到变量的序列中。

    >>> #'多个赋值操作同时进行'
    >>> x,y,z = 1,2,3
    >>> print x,y,z
    1 2 3
    >>> #'交换2个或多个变量'
    >>> x,y = y,x
    >>> print x,y
    2 1
    >>> #'当函数或方法返回元组时'
    >>> s = {'a':1,'b':2,'c':3}
    >>> key,value =  s.popitem()
    >>> print key,value
    a 1

    最后一个例子可以看出,它允许函数返回一个以上的值并打包成元组,然后通过一个复制语句很容易进行访问。

    注意:解包的序列中元素数量必须和放置在赋值符合=左边的变量数量完全一致,否则会引发异常。

    2.2 链式赋值

    链式赋值是将同一个值赋给多个变量的捷径。

    >>> x = y = 'sss'

    2.3 增量赋值

    增量赋值可以让代码更紧凑简练。

    对于+,-,*,/,%等标准运算符都适用:

    >>> x = 2
    >>> x += 1
    >>> x *= 2
    >>> x
    6
    >>> #对其他数据类型也适用
    >>> f = 'foo'
    >>> f += 'bar'
    >>> f
    'foobar'

    三. 语句块:缩排的乐趣

     语句块是条件为真时执行一次或多次的一组语句。在python中,冒号(:)用来标识语句块的开始,块中的每一个语句都是缩进的。当回退到和已经闭合的块一样的缩进量时,就表示当前块已经结束了。

    四. 条件和条件语句

    4.1 这就是布尔变量的作用

    下面的值在作为布尔表达式的时候,会被解释器看作假(False):

    False None 0 “” () [] {}

    其他的一切值都被解释为真,包括特殊值True。

    4.2 条件执行和if语句

    如果条件判断为真,那么后面的语句块就会被执行,也可以加入elif进行多个条件检查。作为if的一部分,还有else子句。

    当然,我们可以在if语句里面嵌套使用if语句。

    num = input ('enter a number? ')
    if num > 0:
        if num > 50:
            print"num > 50"
        elif num > 10:
            print "num > 10"
        else:
            print "num > 0"
    else:
        print "num <= 0"

    4.3 更复杂的条件

    下面我们回到条件本身,因为它们才是条件执行真正有趣的部分。

    4.3.1. 比较运算符

     x == y;     x < y;     x > y;      x >= y;      x <= y;

     x != y;      x is y;     x is not y;   x in y;     x not in y;

    4.3.2.  is:同一性运算符

    >>> x = y = [1,2,3]
    >>> z = [1,2,3]
    >>> x is y
    True
    >>> x is z
    False
    >>> x == z
    True

    由此看出,使用==运算符来判定两个对象是否相等,使用is判定两者是否同一个对象。

    4.3.3. in:成员资格运算符

    name = raw_input("what is your name?")
    if 's' in name:
        print 'your name contains the letter s'
    else:
        print 'your name does not contain the letter s'

    4.3.4.字符串和序列比较

    字符串可以按照字符顺序排列进行比较。

    >>> 'alpha' < 'beta'
    True

    字符是按照本身的顺序值排列的,一个字母的顺序值可以用ord函数查到。

    其他的序列也可以用同样的方式进行比较,不过比较的是元素的其他类型。

    >>> [1,2] > [2,1]
    False
    >>> [1,[2,3]] < [1,[3,2]]
    True

    4.3.5. 布尔运算符

    and运算符是所谓的布尔运算符,它连接2个布尔值,并且在两者都为真时返回真,否则返回假。与它同类的还有2个运算符,or和not。

    number = raw_input("enter a number?")
    if number <=10 and number >= 1:
        print "great!"

    4.3.6. 断言

    if语句有个近亲,工作方式类似于:

    if not condition:

          crash program

    这是因为与其让程序在晚些时候崩溃,不如在错误条件出现时直接让它崩溃。语句中使用的关键字是assert。它确保程序中的某个条件为真时才能让程序正常工作。

    >>> age = -1
    >>> assert 0 < age < 100
    Traceback (most recent call last):
      File "<pyshell#52>", line 1, in <module>
        assert 0 < age < 100
    AssertionError

     五. 循环

     5.1 while循环

    while语句非常灵活,可以在任何条件为真的情况下重复执行一个代码块。

    name = ''
    while not name:
        name = raw_input('please enter your name: ')
    print 'hello,%s!' % name

     5.2 for循环

    当要为一个集合(序列和其他可迭代对象)的每个元素都执行一个代码块时,我们就需要for循环了。

    5.2.1.循环遍历字典元素

    一个简单的for语句就能循环字典的所有键,就像处理序列一样:

    d = {'x':1,'y':2,'z':3}
    for key in d:
        print key,'corrensponds to ',d[key]

    5.2.2.一些迭代工具

    A.并行迭代

    names = ['a','b','c','d']
    ages = [12,23,45,32]
    #循环索引迭代
    for i in range(len(names)):
        print names[i],'is',ages[i],'years old.'
    
    #内建zip函数迭代
    for name,age in zip(names,ages):
        print name,'is',age,'years old.'

    B.编号迭代

    有时候迭代序列中的对象时,同时要获取当前对象的索引。

    #index计数
    index = 0
    for string in strings:
        if 'xxx' in string:
            string[index] = 'sss'
        index += 1
        
    #内建enumerate函数迭代
    for index,string in enumerate(strings):
        if 'xxx' in string:
            string[index] = 'sss'

    C.翻转和排序迭代

    函数reversed和sorted,作用于任何序列或可迭代对象上,不是原地修改对象,而是返回翻转或排序后的版本:

    >>> sorted([2,6,3,7])
    [2, 3, 6, 7]
    >>> list(reversed('hello'))
    ['o', 'l', 'l', 'e', 'h']

     5.3 跳出循环

    一般情况下循环会一直执行到条件为假,或者到序列元素用完时。但是有时候需要提前中断一个循环。

    5.3.1.break

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

    for i in range(0,10):
        if i == 5:
            print 'quit'
            break
        print i

    5.3.2.continue

    continue语句会让当前迭代结束,跳到下一轮循环的开始。

    for i in range(0,10):
        if i % 2 == 0:
            continue
        print i

    5.3.3.while True/break

    比如当用户在提示符下输入单词时做一些事情,并在用户不输入单词后结束循环。

    while True:
        word = raw_input('enter a word: ')
        if not word:
            break
        print 'The word is '+ word

    六. 列表推导式--轻量级循环

    列表推导式是利用其他列表创建新列表的一种方法,工作方式类似于for循环:

    >>> [x**2 for x in range(10) if x % 3 == 0]
    [0, 9, 36, 81]
    >>> [(x,y) for x in range(3) for y in range(3)]
    [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)

     七. 三人行

    作为最后的结束,我们来看3个语句:pass,del和exec

    pass:什么都不做,用来在代码中做占位符使用,方便调试代码。

    if a == 'a':
        print 'yes'
    elif a == 'b':
        pass
    else:
        print 'no'

    del:删除不再使用的对象,也就是用作垃圾收集。

    >>> x = [1,2]
    >>> y = x
    >>> del x
    >>> x
    Traceback (most recent call last):
      File "<pyshell#62>", line 1, in <module>
        x
    NameError: name 'x' is not defined
    >>> y
    [1, 2]

    del删除的只是名称,而不是列表本身,所以上面的例子中,删除x不会影响到y。

    exec:动态创造python代码,然后将其作为语句执行或作为表达式计算。但是这样做是会有很严重的潜在安全漏洞,如果程序将用户提供的一段内容中的一部分字符串作为代码执行,程序可能会失去对代码执行的控制。

    >>> exec "print 'hello,world'" 
    hello,world

  • 相关阅读:
    win10 下安装mysql8.0 zip
    CentOS7 安装mysql8
    linux 下 oracle 安装
    springboot restful jsonp 跨域请求
    Springboot mybatis generate 自动生成实体类和Mapper
    Spring MVC — @RequestMapping原理讲解二
    Spring MVC — @RequestMapping原理讲解一
    Android--LinearLayout中的属性baselineAligned的使用[转]
    Android--CountDownTimer倒计时工具类
    Android UI--SwipeDismissListView_直接删除
  • 原文地址:https://www.cnblogs.com/bangbangjiang/p/3398893.html
Copyright © 2020-2023  润新知