Python之控制结构、函数与代码复用1

python 的控制结构分为分支结构,循环结构,异常处理。分支结构就是判断语句,包括 if,if-else,if-elif-else,if 多条件这几种。
if 后面跟着的条件语句,它们是可以被转换为 True 或者是 False 的语句。除了 0 和 空集为 False 外,其余都是 True 。而条件语句一般都是使用关系操作符来进行判断。共有 6 个操作符:<,>,<=,>=,==,!=。而在使用取反时一般使用 not ,而不是 ! 。

0.1+0.2
Out[24]: 0.30000000000000004

abs(0.1+0.2-0.3)<0.00001
Out[25]: True

import math

math.isclose(0.1+0.2,0.3)
Out[27]: True

当进行浮点数比较的时候,由于十进制在转换为二进制时会使用乘 2 取整法,导致产生了精度问题。所以可以使用绝对值的方式人为规定一个精度,或者使用 math 的内置方法 isclose 来进行判断,它的精度是 10 的 -9 次幂。

from decimal import Decimal

a = Decimal('0.1')
b = Decimal('0.2')

c = a+b
print(c)

c
Out[33]: Decimal('0.3')

float(c)
Out[34]: 0.3

还可以将它们全都转换为十进制,得到的结果也是十进制的。这样就不会产生精度的问题。

b1=True

b2=False

b1 and b2
Out[40]: False

b1 or b2
Out[41]: True

not b2
Out[43]: True

多条件语句使用逻辑与,逻辑或,逻辑非,python 中使用 and ,or ,not 。

Temp = eval(input("请输入你的体温:"))
print("体温{}异常!".format("存在" if Temp >= 37.2 else "没有"))

这是一种更简洁的代码表示,类似于三目运算符。通过 True 和 False 来进行特定的返回值,这样可以进行单行表示。

count=3

count if count !=0 else "不存在"
Out[52]: 3

count =0

count if count !=0 else "不存在"
Out[54]: '不存在'

可以在执行的语句中写入不同的类型。

BMI = eval(input("请输入你的BMI数值:"))
if 0 <= BMI < 15:
    print("你太瘦了,多吃点!")
elif 15 <= BMI < 25:
    print("你的身材很好,继续保持!")
else:
    print("你有点超重,要减肥了!")

这是多分支结构,else 表示当所有情况都不满足时,执行最后一种情况,可以不写 else 。并且可以添加多个 elif 。实际上,当我们设计程序和用户产生交互时,会发生很多意想不到的情况,所以需要进行很多次测试来避免出现各种 debug 。
for 循环代表执行确定的循环次数,一种是有明显的循环次数,一种是循环次数是由遍历结构决定的。python 中只有 for in 这种结构形式,没有其他语言中的 for 循环结构。for 循环变量 in 遍历结构,循环变量是一个临时变量,for循环结束后销毁。
当我们使用 while 循环时,多数是因为循环次数不确定,并可能导致出现死循环。
在数据科学中面对大数据时,反而会采用矢量编程的方式进行去循环,当循环次数确定的时候,因为循环会耗费更多的资源。这是处理高维数据的一种方法。
for 循环还有一种扩展模式,在 for 循环的最后加上一个 else ,表示如果循环全部完成之后最后执行 else 。以前的 else 只在 if 后面使用。这种遍历结构可以是字符串,组合数据类型,range() 函数,文件都可以放在 in 后面进行遍历。
range(N) 表示范围的意思,循环 N 次。

range(10)
Out[57]: range(0, 10)

list(range(0,10))
Out[58]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

list(range(0,10,2))
Out[59]: [0, 2, 4, 6, 8]

type(range(10))
Out[60]: range

range() 函数表示一次只存储一个数字,当进行下一个时就将上一个丢弃。而列表会存储所有的数字。range 函数类似于可迭代对象,直到到达最后或者条件不满足时退出循环。参数之间使用逗号而不是冒号。类型是 range 。

names = ["张三", "李四", "王五"]
for index, name in enumerate(names):
    print("%d %s" % (index, name))

一个列表在经过 enumerate 枚举函数转换之后加入了索引,变成了索引序列,可以在 for 循环中进行索引和成员的遍历。许多时候我们需要得到它的索引,如果在之前我们只能使用 index 叠加。

for index, name in zip(list(range(len(names))), names):
    print("%d %s" % (index, name))

zip 函数将两个序列拼接起来,组成一个新列表,两个序列的长度要保持一致。 enumerate 函数就是一个特殊的 zip 函数。

list(reversed(range(10)))
Out[66]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

reversed 函数可以将列表反向输出,可以写在外面,也可以写在里面。
for 循环后加 else ,else 里面可以判断循环是否结束的语句。for 循环正常执行完毕就是相当于执行了 if 。如果在循环中出现了 if ,和这里的 else 没有关系。
while 循环可以通过设置的循环条件无限循环,直到不满足循环条件。不需要知道循环次数。

s, index = "sky", 0
while index < len(s):
    print("循环正在进行中:"+s[index])
    index += 1
else:
    s = "这句话输出时是在不满足while条件时"
print(s)

while 循环也可以在最后加上 else ,当循环完成之后执行 else 语句。

本站提供的所有下载资源均来自互联网,仅提供学习交流使用,版权归原作者所有。如需商业使用,请联系原作者获得授权。 如您发现有涉嫌侵权的内容,请联系我们 邮箱:[email protected]