• python: 流程控制


    比较、相等和真值

    • == 操作符测试值的相等性
    • is 表达式测试对象的一致性
    S1 = 'spam'
    S2 = 'spam'
    
    S1 == S2, S1 is S2
    
    (True, True)
    
    L1 = [1, ('a', 3)]           # Same value, unique objects 
    L2 = [1, ('a', 3)]
    
    L1 == L2, L1 is L2, L1 < L2, L1 > L2
    
    (True, False, False, False)
    
    bool('')
    
    False
    
    2 and 4
    
    4
    
    2 or 4
    
    2
    

    Python 语句就是告诉你的程序应该做什么的句子。

    • 程序由模块构成。
    • 模块包含语句。
    • 语句包含表达式。
    • 表达式建立并处理对象。

    真值测试

    • All objects have an inherent Boolean true or false value.
    • Any nonzero number or nonempty object is true.
    • Zero numbers, empty objects, and the special object None are considered false.
    • Comparisons and equality tests are applied recursively to data structures.
    • Comparisons and equality tests return True or False (custom versions of 1 and 0).
    • Boolean and and or operators return a true or false operand object.
    • Boolean operators stop evaluating (“short circuit”) as soon as a result is known
    真值判定 结果
    X and Y Is true if both X and Y are true
    X or Y Is true if either X or Y is true
    not X Is true if X is false (the expression returns True or False)

    短路计算

    • or: 从左到右求算操作对象,然后返回第一个为真的操作对象。
    • and: 从左到右求算操作对象,然后返回第一个为假的操作对象。
    2 or 3, 3 or 2
    
    (2, 3)
    
    [] or 3
    
    3
    
    [] or {}
    
    {}
    
    2 and 3, 3 and 2
    
    (3, 2)
    
    [] and {}
    
    []
    
    3 and []
    
    []
    

    断言(assert)

    num = -1
    assert num > 0, 'num should be positive!'
    
    ---------------------------------------------------------------------------
    
    AssertionError                            Traceback (most recent call last)
    
    <ipython-input-13-68d5a766c1dc> in <module>()
          1 num = -1
    ----> 2 assert num > 0, 'num should be positive!'
    
    
    AssertionError: num should be positive!
    
    num = 5
    assert num > 0, 'num should be positive!'
    

    if 条件

    year = int(input('请输入年份:'))
    if year % 4 == 0:
        if year % 400 == 0:
            print('闰年')
        elif year % 100 == 0:
            print('平年')
        else:
            print('闰年')
    else:
        print('平年')
    
    请输入年份:1990
    平年
    

    使用 andor 的短路逻辑:

    year = int(input('请输入年份:'))
    if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
        print('闰年')
    else:
        print('平年')
    
    请输入年份:1990
    平年
    

    if 的短路(short-ciecuit)计算:A = Y if X else Z

    year = int(input('请输入年份:'))
    print('闰年') if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0 else print('平年')
    
    请输入年份:1990
    平年
    
    't' if 'spam' else 'f'
    
    't'
    

    A = [Z, Y][bol(X)] 从列表中挑选真假值 (不推荐使用):

    ['f', 't'][bool('')]
    
    'f'
    
    ['f', 't'][bool('spam')]
    
    't'
    
    a = 'w' 'd' 'de'
    a
    
    'wdde'
    

    while 循环

    通用循环结构:

    while test:  # Loop test
        statements  # Loop body
    else:  # Optional else 只有当循环正常离开时才会执行 (也就是没有碰到 `break` 语句)
        statements  # Run if didn't exit loop with break, 
    
    • continue:跳到最近所在循环的开头处 (来到循环的首行)
    • break:跳出最近所在的循环 (跳过整个循环语句)
    • pass...:空占位语句
    x = 'spam'
    while x:
        print(x, end=' ')
        x = x[1:]
    
    spam pam am m 
    
    X = ...
    X
    
    Ellipsis
    
    x = 1  # 初值条件
    while x <= 100:  # 终止条件
        print(x)
        x += 27
    
    1
    28
    55
    82
    
    # 拉兹猜想
    num = int(eval(input('请输入初始值:')))
    while num != 1:
        if num % 2 == 0:
            num /= 2
        else:
            num = num*3+1
        print(num)
    
    请输入初始值:5
    16
    8.0
    4.0
    2.0
    1.0
    
    x = 10
    while x:
        x -= 1
        if x % 2 != 0:
            continue  # 跳过打印
        print(x, end=' ')
    
    8 6 4 2 0 
    
    while True:
        name = input('Enter name: ')
        if name == 'stop': break
        age = input('Enter age: ')
        print('Hello ', name, '=>', int(age)**2)
    
    Enter name: H
    Enter age: 25
    Hello  H => 625
    Enter name: stop
    

    和循环 else 子句结合,break 语句通常可以忽略其他语言中所需要的搜索状态标志位。

    y = int(input('输入数字:'))
    x = y // 2
    while x > 1:
        if y % x == 0:
            print(y, '有因子', x)
            break
        x -= 1
    else:  # 没有碰到 break 才会执行
        print(y, '是质数!')
    
    输入数字:6
    6 有因子 3
    

    循环 else 分句是 Python 特有的,它提供了常见的编写代码的明确语法:这是编写代码的结构,让你捕捉循环的“另一条”出路,而不通过设定和检查标志位或条件。

    例如,假设你要写一个循环搜索列表的值,而且需要知道在离开循环后该值是否已经找到,可能会用下面的方式编写该任务:

    found = False
    while x and not found:
        if match(x[0]):
            print('Ni')
            found = True
        else:
            x = x[1:]
    if not found:
        print('not found')
    

    我们亦可使用循环 else 分句来简化上述代码:

    while x:
        if match(x[0]):
            print('Ni')
            break
        x = x[1:]
    else:
        print('not found')
    

    for 循环

    遍历序列对象:

    for target in object:                 # Assign object items to target    
        statements                        # Repeated loop body: use target 
    else:                                 # Optional else part    
        statements                        # If we didn't hit a 'break'
    
    for i in range(5):
        ...  # 等价于 pass
    
    nums=[1,2,3,4,5]
    for i in nums:
        print(i)
    
    1
    2
    3
    4
    5
    
    list(range(1,10,6))
    
    [1, 7]
    
    # 阶乘
    x=1
    for i in range(1,11):
        x*=i
    print('10!=',x)
    
    10!= 3628800
    
    b = [[9, 7, 3, 6, 5], [10, 2, 4, 6, 7], [0, 5, 3, 2, 9], [7, 3, 5, 6, 1]]
    s = 0
    for i in range(len(b)):
        for j in range(len(b[i])):
            s += b[i][j]
    print(s)
    
    100
    
    for x in range(1, 10):
        for y in range(1, x + 1):
            print(end='|')
            print('%d*%d=%2d' % (x, y, x * y), end='|')
        print()
    
    |1*1= 1|
    |2*1= 2||2*2= 4|
    |3*1= 3||3*2= 6||3*3= 9|
    |4*1= 4||4*2= 8||4*3=12||4*4=16|
    |5*1= 5||5*2=10||5*3=15||5*4=20||5*5=25|
    |6*1= 6||6*2=12||6*3=18||6*4=24||6*5=30||6*6=36|
    |7*1= 7||7*2=14||7*3=21||7*4=28||7*5=35||7*6=42||7*7=49|
    |8*1= 8||8*2=16||8*3=24||8*4=32||8*5=40||8*6=48||8*7=56||8*8=64|
    |9*1= 9||9*2=18||9*3=27||9*4=36||9*5=45||9*6=54||9*7=63||9*8=72||9*9=81|
    
    d = {'k1': 1, 'k2': 2, 'k3': 3}
    for i in d:
        print(i, ':', d[i])
    
    k1 : 1
    k2 : 2
    k3 : 3
    
    d = {'k1': 1, 'k2': 2, 'k3': 3}
    for key, value in d.items():
        print(key, ':', value)
    
    k1 : 1
    k2 : 2
    k3 : 3
    
    a, *b, c = 1, 2, 3, 4, 5
    a, b, c
    
    (1, [2, 3, 4], 5)
  • 相关阅读:
    幂等性
    merge效率
    云化
    流量、带宽、速度、码率
    缓存一致性与可见性
    kernel32.dll 这个系统模块
    C#ModBus Tcp
    Spring MVC-集成(Integration)-集成LOG4J示例(转载实践)
    Spring MVC-集成(Integration)-生成PDF示例(转载实践)
    Spring MVC-集成(Integration)-生成Excel示例(转载实践)
  • 原文地址:https://www.cnblogs.com/q735613050/p/9863562.html
Copyright © 2020-2023  润新知