条件语句(聪明办法学python)

条件语句

if 语句

img

实现一个函数,返回输入数字的绝对值,abs( ):

[^共7个,if语句4个,if-else语句2个,if-else 推导式1个]:

  • 常规

    def abs1(n):
        if n < 0:
            n = -n
        return n
    
  • 写在一行(除非有特殊原因,否则强烈建议不要这样写)

    def abs1(n):
        if n < 0:
            n = -n
        return n
    
  • 多个返回语句

    def abs3(n):
        if n < 0:
            return -n
        return n
    
  • 使用布尔表达式(不要这样写!)

    def abs4(n):
        return (n < 0)*(-n) + (n>=0)*(n) # 这家伙长得太奇怪了
    

if-else语句

img

x=input("x=")
x=float(x)
print("hallo")
if x<10:
    print("wahoo")
else :
    print("ruh roh")
print("goodbye")

重新设计abs( ):

  • def abs5(n):
        if n >= 0:
            return n
        else:
            return -n
    
  • def abs6(n):
        if n >= 0:
            sign = +1
        else:
            sign = -1
        return sign * n
    

if-elif-else语句

img

def getGrade(score):
    if score >= 90:
        grade = "A"
    elif score >= 80:
        grade = "B"
    elif score >= 70:
        grade = "C"
    elif score >= 60:
        grade = "D"
    else:
        grade = "F"
    return grade

if-else推导式

def abs7(n):
    return n if (n >= 0) else -n
print("abs7(5) =", abs7(5), "and abs7(-5) =", abs7(-5))
#  abs7(5) = 5 and abs7(-5) = 5

match-case 语句

[^match 后的对象会依次与 case 后的内容进行匹配,如果匹配成功,则执行匹配到的表达式,否则直接跳过,_ 可以匹配一切。]:

match subject:
    case <pattern_1>:
        <action_1>
    case <pattern_2>:
        <action_2>
    case <pattern_3>:
        <action_3>
    case _:   #类似于 C 和 Java 中的 default:,当其他 case 都无法匹配时,匹配这条,保证永远会匹配成功。
        <action_wildcard>   

例:

  • def http_error(status):
        match status:
            case 400:
                return "Bad request"
            case 404:
                return "Not found"
            case 418:
                return "I'm a teapot"
            case _:
                return "Something's wrong with the internet"
    
    mystatus=404
    print(http_error(404))
     
    # 输出:Not found
    '''
    如果不返回(把return换成print)结果会是:
        Not found
        I'm a teapot
        Something's wrong with the internet
    '''
    
  • 一个 case 也可以设置多个匹配条件,条件使用 隔开,例如:

    match status:
        case 401|403|404:
            return "Not allowed"
    

清晰的代码风格

  • 否定条件(带有 else 部分)

    # 可能不清晰的:
    b = True
    if not b:
        print('no')
    else:
        print('yes')
    
    # 清晰的:
    b = True
    if b:
        print('yes')
    else:
        print('no')
    
  • 空白的 if 部分,不推荐

    # 不清晰的:
    b = False
    if b:
        pass
    else:
        print('no')
    
    # 清晰的:
    b = False
    if not b:
        print('no')
    
  • and 而不是嵌套的 if来判断

    # 混乱的:
    b1 = True
    b2 = True
    if b1:
        if b2:
            print('both!')
    
    # 清晰的:
    b1 = True
    b2 = True
    if b1 and b2:
        print('both!')
    
  • 使用 else 而不是 if 来控制

    # 可能会引入 bug:
    b = True
    if b:
        print('yes')
    if not b:
        print('no')
    
    # 更好的做法:
    b = True
    if b:
        print('yes')
    else:
        print('no')
    
posted @ 2023-11-29 08:34  always-1007  阅读(12)  评论(0)    收藏  举报