首页 > 其他分享 >IF语句及代码风格

IF语句及代码风格

时间:2023-11-28 21:23:49浏览次数:39  
标签:语句 return 代码 else 风格 print end def

Chap 4 条件

IF 语句

IF语句的流程

image-20231127121037497

eg:

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

AD

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)

实现机制 :False == 0; True == 1

不建议!!!

if-else 语句

image-20231127171431049

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

重新设计刚才的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 语句

image-20231127172302351

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

可以有和多个elif,但是只能有一个ifelse

另一个更有意思的例子:

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

提示:一元二次方程 ax²+bx+c=0 (a≠0)的根与根的判别式 有如下关系:Δ=b²−4ac

  • 当Δ>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:
        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))

if-else 推导式 if-else expression

推导式本质是python语法糖。语法糖就是让代码更具有简洁性、可读性、易用性。

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:
            return "Bad request"
        case 404:
            return "Not found"
        case 418:
            return "I'm a teapot"
        case _:
            return "Something's wrong with the internet"

mystatus=400
print(http_error(400))

Bad request

清晰的代码风格

谨慎使用否定条件 not

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

Yes

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

Yes

宁愿不要else,也不要if 空白

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

no

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

no

用and 来判断,代替嵌套的 if

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

both!

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

both!

使用 else 而非 if 来控制

# 可能会引入 bug:
b = True
if b:
    print('yes')
if not b:
    print('no')

yes

# 更好的做法:
b = True
if b:
    print('yes')
else:
    print('no')

yes

善用 elif

# 又混乱又有产生 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

在Python语法中,下面两段代码是等价的。

但由于下面一段有很多缩进,管理起来很麻烦,所以我们通常选择上面这样的写法,避免缩进带来的麻烦。

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

不要使用一些离谱的trick(如用算数逻辑来代替布尔逻辑)

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

上面的trick是啥玩意儿?(Python的一个特性)

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
  • 这种"修饰"并不是对每一个人都强制学习内容,他并不影响你快乐学习接下来的所有课程

image-20231128125907489

缩进

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

换行

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

导入规范

  • import 本地模块\包

image-20231128131333005

  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好

image-20231128133012618

代码规范的网站:PEP8

标签:语句,return,代码,else,风格,print,end,def
From: https://www.cnblogs.com/tyut-Ruhall/p/17863095.html

相关文章

  • 纯菜鸟求帮忙看看这代码为什么只能输入两行
    停车场管理[问题描述]设停车场内只有一个的停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦......
  • 条件语句和清晰代码风格
    if语句deff(x): print("A",end="") ifx==0:   print("B",end="")   print("C",end="") print("D")f(1)AD//defabs1(n): ifn<0:   n=-n returnn写在......
  • 4. Shell 循环语句
     重点:条件测试。read。Shell环境配置。case。for。find。xargs。gzip,bzip2,xz。tar。sed。1)循环1.1)循环执行介绍将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件。 重复运行次数循环次数事先已知循环次数事先未知 常见的循环的命令for......
  • 【Python爬虫】第11篇:Mongodb数据库进阶使用。从0到scrapy高手笔记(附代码,可自取)
    本文主要学习一下关于爬虫的相关前置知识和一些理论性的知识,通过本文我们能够知道什么是爬虫,都有那些分类,爬虫能干什么等,同时还会站在爬虫的角度复习一下http协议。全套笔记和代码自取地址:请移步这里感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~共8章,37子模块Mongodb数......
  • 【Python进阶】第7篇:TCP和socket客户端程序开发。总结md文档集合(已分享,附代码)
    本文从14大模块展示了python高级用的应用。分别有Linux命令,多任务编程、网络编程、Http协议和静态Web编程、html+css、JavaScript、jQuery、MySql数据库的各种用法、python的闭包和装饰器、mini-web框架、正则表达式等相关文章的详细讲述。全套笔记和代码自取地址:请移步这里感......
  • emscripten 中c 代码引用外部js 函数
    主要是一个简单的学习,webassebly支持通过import调用环境的函数(比如调用浏览器或者nodejs中的一些方法)简单说明方法很多,包含了emscripten提供的调用js的宏,但是以下使用了一个emscripten提供的--js-library功能--js-library简单说明--js-library主要是实现emcc在编......
  • 一行代码——计算PI后15,000位
    先上代码a[52514],b,c=52514,d,e,f=1e4,g,h;main(){for(;b=c-=14;h=printf("%04d",e+d/f))for(e=d%=f;g=--b*2;d/=g)d=d*b+f*(h?a[b]:f/5),a[b]=d%--g;}运行的时候可能会有警告,像这样。但是不用管,直接运行就行了注意,一定要用\(C\)语言,不能用\(C++\)语言然后是优化版#inc......
  • 程序员如何做点属于自己的东西?做一个自己认为有价值的小项目?分享我的一个个人项目:代
     工作中经常会遇到很多小的知识点,或者突然有点想法,想记下来方面以后查找。网上搜索问题遇到好的回答希望保存下来,或做下修改成为自己知识。突然想写一点代码验证一点想法,这时不想开启电脑上的软件新建文本,就希望直接可以写代码,然后运行看效果。以上这些需求就是我想自己开发......
  • TruFor笔记和代码复现
    title:TruFor笔记和代码复现banner_img:https://cdn.studyinglover.com/pic/2023/11/35a3ffa0a81b1791e692c591a92b9256.pngdate:2023-11-2817:38:00tags:-图像伪造检测和定位TruFor笔记和代码复现最近有个新闻很火,说谷歌AI技术曾判定美国登月任务的照片存在虚假内......
  • Vite4+Typescript+Vue3+Pinia 从零搭建(4) - 代码规范
    项目代码同步至码云weiz-vue3-template要求代码规范,主要是为了提高多人协同和代码维护效率,结合到此项目,具体工作就是为项目配置eslint和prettier。editorconfig安装EditorConfigforVSCode插件,根目录下新建.editorconfig文件,增加以下配置[*.{js,jsx,ts,tsx,vue}]......