# 循环
# while 循环
假如要输出 1-10 的数字,你可以这么做:
print(1) | |
print(2) | |
print(3) | |
print(4) | |
print(5) | |
print(6) | |
print(7) | |
print(8) | |
print(9) | |
print(10) |
或者使用 python 中的 while 循环
语法如下:
while 条件: # 条件为真继续循环,为假跳出 | |
语句 |
使用 while 循环优化后:
i = 0 | |
while i < 10: | |
i += 1 | |
print(i) |
循环中创建的变量在循环外访问,可能导致变量未定义
# 跳出和跳过
还是这样一道题:输出 1-10 的数字,不输出 5
你可以做多个循环,像这样:
i = 0 | |
while i < 4: | |
i += 1 | |
print(i) | |
i += 1 | |
while i < 10: | |
i += 1 | |
print(i) |
但 python 中提供了循环控制符: break
和 continue
break 可以跳出循环,continue 可以跳过循环 \
break
至多跳出一层循环,多次需要多个 break
现在用 continue 来优化一下代码:
i = 0 | |
while i < 10: | |
i += 1 | |
if i == 5: | |
continue | |
print(i) |
# for 循环
还是这道题
输出 1-10 的所有数字。
这回使用 for
循环解决
for i in range(10): | |
print(i+1) | |
# 或者 | |
for i in range(1,11) | |
print(i) |
for 循环的语法如下:
for 变量 in 序列(可迭代的):
range(头,尾)
方法可以生成一个从头到尾 - 1 的数字序列
range () 方法含头不含尾,需要调整参数
当然, break
和 continue
也适用与 for 循环
但 for 循环主要用于以下场景中:
遍历一个长度为 x 的可迭代数据;
生成一个符合条件的序列;
a = [5,6,7,8,9] | |
for i in a: | |
print(a,end=" ") # 5 6 7 8 9 |
print 的 end 参数指定结尾输出什么,默认为 '\n'(换行符)
容器类型的数据将会在 5 篇讲又一个坑
for 循环不如 while 循环灵活,尽量多使用 while 循环
else 并非分支结构专用,在循环后使用 else 代表正常退出循环后执行代码
正常退出循环:不使用 break
或报错退出
# 基本数据类型
# 指针
python 解释器使用指针来复用对象,节省内存,如下面所示:
a = 10;b = 10 | |
# 假设 10 的内存地址为 0x10f 假设 5 为 0x10d | |
print(id(a),id(b)) # 0x10f 0x10f | |
# 实际只占用了一个内存地址 | |
b = 5 | |
# b 的指针会被切换为 0x10d, 老指针会被自动回收 | |
print(id(a),id(b)) # 0x10f 0x10d |
# int 型
python 中的 int 不分长短型,不可迭代 (不可被 for 遍历)
从 float 到 int 是向下取整,1.99 ->
1
# float 型
python 中的 float 无位数限制,不可迭代
float 有不确定小数后缀,最好不要使用 ==
比较,推荐使用 float-float<0.000001
这种方式
# str 型
str 型为字符串,可迭代,长度不限
# 切片
s = "python" | |
print(s[0]) # 输出 "p" |
索引如下所示:
p y t h o n 字符串
0 1 2 3 4 5 正向索引
-6 -5 -4 -3 -2 -1 反向索引
切片的语法格式: str[开始:结束:步长]
举个例子:
s = "python" | |
print(s[::2]) # 输出 pto | |
print(s[::-1]) # 输出 nohtyp | |
print(s[1:3]) # 输出 yt |
这个方法通常用于计算回文数: str(n) == str(n)[::-1]
# 格式化输出
# % 式格式化 | |
s = 10 | |
print("这个数是:%d"% s) | |
# 这个数是:10 | |
# format 格式化 | |
print("这个数是:{}".format(s)) | |
# f-string 格式化 | |
print(f"这个数是:{s}") |
% 式格式化如果有多个实参,需要用括号括起来
# bool 型
bool 是 int 型的子类,不可迭代,只有 True 和 False 两种
0=False 1=True 2 及以上同 1
当其他类转换到 bool 时,遵循以下原则:
- 数字类直接转换
- 可迭代数据,如果非空 (len (数据)>0) 即为 True, 否则为 False
- 字典非空即为 True