zoukankan      html  css  js  c++  java
  • 第3章 选择与循环

    3.1 条件表达式

    • 算术运算符:+、-、*、/、//、%、**
    • 关系运算符:>、<、==、<=、>=、!=,且可连续使用,如
    >>> 1<2<3
    True
    >>> 1<2>3
    False
    >>> 1<3>2
    True
    • 测试运算符:in、not in、is、is not
    • 逻辑运算符:and、or、not,注意短路求值
    • 位运算符:~、&、|、 ^、 <<、>>    (前述文章有涉及)
    • 矩阵乘法运算符:@
    • 条件表达式的值只要不是 False、0(或0.0、0j等)、空值None、空列表、空元组、空集合、空字典、空字符串、空 range 对象或其他空迭代对象,解释器均认为与 True 等价。
    >>> if 3:              #使用整数作为条件表达式
            print(5)
    5
    >>> a = [1, 2, 3]
    >>> if a:              #使用列表作为条件表达式
            print(a)    
    [1, 2, 3]
    >>> a = []
    >>> if a:
            print(a)
    else:
        print('empty')
    
    empty
    >>> i = s = 0
    >>> while i <= 10:              #使用关系表达式作为条件表达式
        s += i
        i += 1
    >>> print(s)
    55
    >>> i = s = 0
    >>> while True:                    #使用常量True作为条件表达式
        s += i
        i += 1
        if i > 10:
            break
    >>> print(s)
    55
    >>> s = 0
    >>> for i in range(0, 11, 1):   #遍历迭代对象中的所有元素
        s += i
    >>> print(s)
    • 条件表达式中不允许使用赋值运算符“=”。
    >>> if a=3:
    SyntaxError: invalid syntax
    >>> if (a=3) and (b=4):    
    SyntaxError: invalid syntax

    3.2.1 单分支选择结构

    语法:

    if 表达式:

      语句块

    x = input('Input two number:')
    a, b = map(int, x.split())
    if a > b:
       a, b = b, a               #序列解包,交换两个变量的值
    print(a, b)

    3.2.2 双分支结构

    if 表达式:

      语句块1

    else:

      语句块2

    >>> chTest = ['1', '2', '3', '4', '5']
    >>> if chTest:
          print(chTest)
    else:
          print('Empty')
    
    ['1', '2', '3', '4', '5']
    • 双分支简洁形式:

    value1 if condition else value2

      当条件表达式condition的值与 True 等价时,表达式的值为 value1,否则表达式的值为 value2。另外,在 value1 和 value2 中还可以使用复杂表达式,包括函数调用和基本输出语句。这个结构的表达式也具有惰性求值的特点。

    >>> a = 5
    >>> print(6) if a>3 else print(5)
    6
    >>> print(6 if a>3 else 5)
    6
    >>> b = 6 if a>13 else 9
    >>> b
    9
    x = math.sqrt(9) if 2>3 else random.randint(1, 100)
    x

    86

    3.2.3 多分支结构

    if 表达式1:

      语句块1

    elif 表达式2:

      语句块2

    elif 表达式3:

      语句块3

    else:

      语句块4

      其中,关键字 elif 是 else if 的缩写。

    例子:

    def func(score):
        if score > 100:
            return 'wrong score.must <= 100.'
        elif score >= 90:
            return 'A'
        elif score >= 80:
            return 'B'
        elif score >= 70:
            return 'C'
        elif score >= 60:
            return 'D'
        elif score >= 0:
            return 'E'
        else:
            return 'wrong score.must >0'    

    3.2.4 选择结构的嵌套

    if 表达式1:

      语句块1

      if 表达式2:

        语句块2

      else: 语句块3

    else:

      if 表达式4:

        语句块4

    例子:

    >>> def func(score):
            degree = 'DCBAAE'
            if score > 100 or score < 0:
            return 'wrong score.must between 0 and 100.'
        else:
            index = (score - 60)//10
            if index >= 0:
                return degree[index]
            else:
                 return degree[-1]

    3.2.5 构建跳转表实现多分支选择结构

    • 使用列表、元组字典可以很容易构建跳转表,在某些场合下可以更快速地实现类似于多分支选择结构的功能。
    funcDict = {'1':lambda:print('You input 1'),
                '2':lambda:print('You input 2'),
                '3':lambda:print('You input 3')}
    x = input('Input an integer to call different function:')
    func = funcDict.get(x, None)
    if func:
        func()
    else:
        print('Wrong integer.')

    3.3.1 for 循环与 while 循环

      Python提供了两种基本的循环结构语句——while语句for语句

    • while 循环一般用于循环次数难以提前确定的情况,也可以用于循环次数确定的情况。
    • for 循环一般用于循环次数可以提前确定的情况,尤其是用于枚举序列或迭代对象中的元素。

    while 循环:

    while 条件表达式:

      循环体

    [else:

      else子句代码块]

    for 循环:

    for 取值 in 序列或迭代对象:

      循环体

    [else:

      else子句代码块]

    •  在编写循环语句时,应尽量减少循环内部不必要的计算,将与循环变量无关的代码尽可能地提取到循环之外。

    优化前的代码:

    digits = (1, 2, 3, 4)
    
    for i in range(1000):
        result = []
        for i in digits:
            for j in digits:
                for k in digits:
                    result.append(i*100+j*10+k)

    优化后的代码:

    for i in range(1000):
        result = []
        for i in digits:
            i = i*100
            for j in digits:
                j = j*10
                for k in digits:
                    result.append(i+j+k)

    3.4 break 和 continue 语句

    • break 语句在 while 循环和 for 循环中都可以使用,一般放在 if 选择结构中,一旦 break 语句被执行,将使得整个循环提前结束。
    • continue 语句的作用是终止当前循环,并忽略 continue 之后的语句,然后回到循环的顶端,提前进入下一次循环。
    • 除非 break 语句让代码更简单或更清晰,否则不要轻易使用。

      下面的代码用来计算小于100的最大素数,注意break语句和else子句的用法。

    for n in range(96, 1, -1):
        for i in range(2, n):
            if n%i == 0:
                break
        else:
            print(n)
            break

    97

    • 删除上面代码中最后一个 break 语句,则可以用来输出 100 以内的所有素数。
    for n in range(100, 1, -1):
        for i in range(2, n):
            if n%i == 0:
                break
        else:
            print(n)
    • 每次进入循环时的 i 已经不再是上一次的 i,所以修改其值并不会影响循环的执行。
    >>> for i in range(7):    
          print(id(i),':',i)
    10416692 : 0
    10416680 : 1
    10416668 : 2
    10416656 : 3
    10416644 : 4
    10416632 : 5
    10416620 : 6

    例:输出序列中的元素。

    a_list=['a', 'b', 'mpilgrim', 'z', 'example']
    for i,v in enumerate(a_list):
        print('列表的第', i+1, '个元素是:', v)
    
    (0, 'a')
    (1, 'b')
    (2, 'mpilgrim')
    (3, 'z')
    (4, 'example')

    例:判断一个数是否为素数。

    import math
    n = input('Input an inter:')
    n = int(n)
    m = math.ceil(math.sqrt(n)+1)
    for i in range(2, m):
        if n%i == 0 and i<n:
            print('No')
            break
    else:
        print('Yes')

    因上求缘,果上努力~~~~ 作者:希望每天涨粉,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/15431708.html

  • 相关阅读:
    A. Maze
    A. Ice Skating (联通块)
    A. DZY Loves Chessboard (找到一个涂一个)
    C. Kefa and Park
    A. Party
    N皇后问题
    八皇后问题
    A. DZY Loves Sequences
    A. Reorder the Array (二分变形)
    BZOJ1681 [Usaco2005 Mar]Checking an Alibi 不在场的证明
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/15431708.html
Copyright © 2011-2022 走看看