# 循环

# 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 中提供了循环控制符: breakcontinue
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 () 方法含头不含尾,需要调整参数

当然, breakcontinue 也适用与 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