聪明办法学Python Task05 & 选学01

发布时间 2023-11-29 21:52:08作者: 大程序猿

聪明办法学 Python 学习笔记

Chapter 4 条件 Conditionals

if 语句 if statement

Conditionals Make Decisions

  • if 语句流程

一个例子

def f(x):
    print("A", end="")
    if x == 0:
        print("B", end="")
        print("C", end="")
    print("D")
f(1)
AD

一个更有意思的例子:

任务:实现一个函数,返回输入数字的绝对值

Python 内置了一个函数叫 abs() 用于绝对值计算,所以我们将函数命名成 abs1abs2……

def abs1(n):
    if n < 0:
        n = -n
    return n

写在一行

def abs2(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) # 这家伙长得太奇怪了

不要这样写!

验证结果正确性

print("abs1(5) =", abs1(5), "and abs1(-5) =", abs1(-5))
print("abs2(5) =", abs2(5), "and abs2(-5) =", abs2(-5))
print("abs3(5) =", abs3(5), "and abs3(-5) =", abs3(-5))
print("abs4(5) =", abs4(5), "and abs4(-5) =", abs4(-5))
abs1(5) = 5 and abs1(-5) = 5
abs2(5) = 5 and abs2(-5) = 5
abs3(5) = 5 and abs3(-5) = 5
abs4(5) = 5 and abs4(-5) = 5

if-else 语句 if-else statement

x = input("x=")
x = float(x)
print("hello")
if x < 10:
    print("wahoo!")
print("goodbye")
x=9
hello
wahoo!
goodbye
def f(x):
    print("A", end="")
    if x == 0: 
        print("B", end="")
        print("C", end="")
    else:
        print("D", end="")
        if x == 1:
            print("E", end="")
        else:
            print("F", end="")
    print("G")

重新设计 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
print("abs5(5) =", abs5(5), "and abs5(-5) =", abs5(-5))
print("abs6(5) =", abs6(5), "and abs6(-5) =", abs6(-5))
abs5(5) = 5 and abs5(-5) = 5
abs6(5) = 5 and abs6(-5) = 5

if-elif-else 语句

def f(x):
    print("A", end="")
    if x == 0:
        print("B", end="")
        print("C", end="")
    elif x == 1:
        print("D", end="")
    else:
        print("E", end="")
        if x == 2:
            print("F", end="")
        else:
            print("G", end="")
    print("H")

另一个更有意思的例子:

任务:实现一个函数,输入一元二次函数的各项系数,返回其解的个数。

def numberOfRoots(a, b, c):
    # 返回 y 的实数根(零点)数量: y = a*x**2 + b*x + c
    d = b**2 - 4*a*c
    if d > 0:
        return 2
    elif d == 0:
        return 1
    else:
        return 0

print("y = 4*x**2 + 5*x + 1 has", numberOfRoots(4,5,1), "root(s).")
print("y = 4*x**2 + 4*x + 1 has", numberOfRoots(4,4,1), "root(s).")
print("y = 4*x**2 + 3*x + 1 has", numberOfRoots(4,3,1), "root(s).")
y = 4*x**2 + 5*x + 1 has 2 root(s).
y = 4*x**2 + 4*x + 1 has 1 root(s).
y = 4*x**2 + 3*x + 1 has 0 root(s).

再来一个例子:

实现传说中的“学生分数登记管理系统”

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

print("103 -->", getGrade(103))
print(" 88 -->", getGrade(88))
print(" 70 -->", getGrade(70))
print(" 61 -->", getGrade(61))
print(" 22 -->", getGrade(22))
103 --> A
 88 --> B
 70 --> C
 61 --> D
 22 --> F

if-else 推导式 if-else expression

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 语句

菜鸟教程示例

HTTP 响应状态码

清晰的代码风格 Clarity and style

请注意: 本节讨论的内容主要针对样式而非正确性,这里的所有例子都“正确的”,但有些例子比其他例子更巧妙,我们希望大家形成一个好的代码习惯。

否定条件(带有 else 部分)

# 可能不清晰的:
b = True
if not b:
    print('no')
else:
    print('yes')
yes
# 清晰的:
b = True
if b:
    print('yes')
else:
    print('no')
yes

空白的 if 部分

# 不清晰的:
b = False
if b:
    pass
else:
    print('no')
no
# 清晰的:
b = False
if not b:
    print('no')

no

用嵌套的 if 而不是 and 来判断

# 混乱的:
b1 = True
b2 = True
if b1:
    if b2:
        print('both!')
both!
# 清晰的:
b1 = True
b2 = True
if b1 and b2:
    print('both!')
both!

使用 if 而不是 else 来控制

# 可能会引入 bug:
b = True
if b:
    print('yes')
if not b:
    print('no')
yes
# 更好的做法:
b = True
if b:
    print('yes')
else:
    print('no')
yes

另外一个例子

# 又混乱又有产生 bug 的风险:
x = 10
if x < 5:
    print('small')
if (x >= 5) and (x < 10):
    print('medium')
if (x >= 10) and (x < 15):
    print('large')
if x >= 15:
    print('extra large')
large
# 更好的做法:
x = 10
if x < 5:
    print('small')
elif x < 10:
    print('medium')
elif x < 15:
    print('large')
else:
    print('extra large')
large

再来一个例子

# 又混乱又有产生 bug 的风险:
c = 'a'
if (c >= 'A') and (c <= 'Z'):
    print('Uppercase!')
if (c >= 'a') and (c <= 'z'):
    print('lowercase!')
if (c < 'A') or ((c > 'Z') and (c < 'a')) or (c > 'z'):
    print ('not a letter!')
lowercase!
# 更好的做法:
c = 'a'
if (c >= 'A') and (c <= 'Z'):
    print('Uppercase!')
elif (c >= 'a') and (c <= 'z'):
    print('lowercase!')
else:
    print('not a letter!')

使用一些 trick(如用算数逻辑来代替布尔逻辑)

# 不清晰的:
x = 42
y = ((x > 0) and 99)
# 清晰的:
x = 42
if x > 0:
    y = 99

总结

  • Conditionals Make Decisions.
  • if-else 结构构成了 Python 分支控制,if 还能嵌套使用。
  • 合理的编写风格会让代码更易读,还能尽可能避免引入 bug。