怪物卡车机器人
83.87MB · 2025-09-30
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 语句。