# IF语句及代码风格

## IF 语句

### IF语句的流程

eg:

def f(x) :
print("A",end="")
if x == 0 :
print("B",end="")
print("C",end="")
#x不等于0时，这两行代码不会执行
print("D")

f(1)


f(0)


ABCD

python内置了一个函数交abs()用于绝对值计算，所以我们将我们的函数命名为abs1、abs2

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


def abs2 :
if n < 0 : n = -n
return n


def abs3(n) :
if n < 0 :
return -n
return n #如果n>0,直接执行此代码


def abs4(n) :
return (n < 0)*(-n) + (n>=0)8(n)


### if-else 语句

x = input("x=")
x = float(x)
print("hello")
if x < 10 :
print("wahool!")
else :
print("ruh roh")
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")


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")


• 当Δ>0时，方程有两个不相等的实数根；

• 当Δ=0时，方程有两个相等的实数根；

• 当Δ<0时，方程无实数根。

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 = 4x**2 + 5x + 1 has 2 root(s).

y = 4x**2 + 4x + 1 has 1 root(s).

y = 4x**2 + 3x + 1 has 0 root(s).

def getGrade(score):
if score >= 90:
elif score >= 80:
elif score >= 70:
elif score >= 60:
else:



### if-else 推导式 if-else expression

def abs7(n):
return n if (n >= 0) else -n
'''

def abs7(n):
if n >=0:
return n
else:
return -n
'''

print("abs7(5) =", abs7(5), "and abs7(-5) =", abs7(-5))


abs7(5) = 5 and abs7(-5) = 5

## match-case 语句

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

def http_error(status):
match status:
case 400:
case 404:
case 418:
return "I'm a teapot"
case _:
return "Something's wrong with the internet"

mystatus=400
print(http_error(400))


## 清晰的代码风格

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


Yes

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


Yes

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


no

# 清晰的:
b = False
if not b:
print('no')
# 这时使用not比较好


no

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


both!

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


both!

# 可能会引入 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

if a:
pass
elif b:
pass
else:
pass

if a:
pass
else:
if b:
pass
else:
pass


# 不清晰的:
x = 42
y = ((x > 0) and 99)
# 这里99会被当成布尔值进行运算
# python中任何大于0的数都是True

# 清晰的:
x = 42
if x > 0:
y = 99


x = 42
x > 0 and 99
# x > 0在pyhton中实际上是1
# 当加上and 99时，会输出99


99

x = 42
x > 0 or 99
# 如果是or 99，会输出布尔值True


True

x = 42
x < 0 or 99
# 如果改成x < 0, 又会输出99


99

## 总结

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

## 优雅代码的编写

### 代码风格

• "修饰"的前提一定是"跑通"代码，也就是说你得先确保你的code没有任何的bug
• 这种"修饰"并不是对每一个人都强制学习内容，他并不影响你快乐学习接下来的所有课程

### 缩进

1. 如果有开始定界符，其余行的缩进需与开始定界符对齐
2. 需要额外的4个空格（长度等于一个Tab键），以区分开传入参数，和其他内容
3. 空格一般用于添加以上这种缩进，Tab键一般用于保持行与行之间的一致性
4. 多行if语句衔接，需要一个额外的缩进，以区分其他内容

### 换行

1. 将所有限制为最多79个字符
2. 一般语句接受”隐式“延续，但是with语句等不支持，需要用反斜杠\来衔接
3. 另一个这样的例子是assert语句
4. 多行if语句的缩进详见上节
5. 通常不鼓励使用复合语句（同一行上的多个语句）

### 导入规范

• import 本地模块\包

1. 当我们需要导入本地自己封装好的一些模块时，需要通过import来导入
2. 如果我们需要在m1.py文件中导入同目录下的m2.py文件，直接导入即可

### 关于空格

1. 紧接在圆括号、方括号或大括号内，不需要多余空格
2. 在逗号、分号或冒号之前，尾随逗号之后均不需要多余空格
3. 在切片中，两个冒号必须应用相同的间距
4. 紧接在开始函数调用的参数列表的左括号之前，不需要多余空格
5. 赋值（或其他）运算符周围需要多个空格以使其与另一个运算符对齐

### 代码注释（单行注释、多行注释）

• 注释就是对代码的解释和说明，其目的是让人们能够更加轻松地了解代码
• 注释是编写程序时，写程序的人给一个语句、程序段、函数等的解释或提示，能提高程序代码的可读性
• 在有处理逻辑的代码中，源程序有效注释必须在20%以上

### 命名规则

• 变量名只能包含字母、数字和下划线。变量名可以字母或下划线大头，但不能以数字打头，例如：可将变量命名为message_1，但不能将其命名为1_message
• 变量名不能包含空格，但可使用下划线来分隔其中的单词。例如：变量名greeting_message可行，但变量名greetingmessage会引发错误

### 命名规范

• 不要将python关键字和函数名用作变量名，即不要使用python保留用于特殊用途的单词，如print。
• 变量名与函数名应既简短又具有描述性。例如：name比n好

posted @ 2023-11-28 21:13  Rahull  阅读(26)  评论(0编辑  收藏  举报