代码块
以冒号作为开始,用缩进来划分相同的作用域,称之为代码块,代码块是一个整体,一个文件也可称代码块
作用域:作用的区域
其他语言使用 { } 来划分作用域 , 而python使用的是代码块
python的代码块可以提升整体的整齐度,提高开发效率
# python
if 5 == 5:
print(1)
print(2)
if True:
print(3)
print(4)
if False:
print(5)
print(6)
print(7)
# php c js
if(False){
print(5)
print(6)
}
注意点: 要么全部使用4个空格,要么全部使用1个缩进 ,这样才叫同一个作用域不能混写
流程控制
- 流程控制的定义
流程: 代码执行的过程
流程控制: 对代码执行的过程进行管控 - 流程控制的结构
顺序结构: 代码默认从上到下依次执行
分支结构: 细分如下
循环结构: while … for …
分支结构
关键字:if elif else
- 分支结构的种类
- 单项分支
- 双项分支
- 多项分支
- 巢状分支
- 分支结构的特点
单项分支
if 条件表达式:
code1
code2
如果条件表达式成立,返回True 执行下面的代码块,
如果条件表达式不成立,返回False 不执行下面代码块
zhangyaowen = "帅哥"
if zhangyaowen == "帅哥":
print("请你吃烤串")
print("请你喝啤酒")
print("请你吃大腰子")
双项分支
if 条件表达式:
code1
code2
else:
code3
code4
如果条件表达式成立,执行if下面的代码块
如果条件表达式不成立,执行else下面的代码块
if中的代码块可以称之为真区间
else中的代码块可以称之为假区间
zhangyaowen = "野兽"
if zhangyaowen == "盲流子":
print("打他")
print("掐他")
print("吊起来,喂他辣椒水")
else:
print("哄他")
print("爱他")
print("骗他兜里的钱")
# input 等待用户输入字符串
res = input("请输入您的姓名:")
print(res, type(res))
练习:提示用户输入用户名和密码:
如果用户名是admin , 并且密码是000 ,
提示用户恭喜你,登陆成功
否则提示用户名或密码错误
username = input('please enter your username:')
pswd = input('please enter your password:')
if username == 'admin' and pswd == '000':
print('登陆成功!')
else:
print('登录名或密码输入错误,登陆失败!')
多项分支
f 条件表达式1:
code1
code2
elif 条件表达式2:
code3
code4
elif 条件表达式3:
code5
code6
...
else:
code7
如果条件表达式1成立,直接执行if当中的代码块,如果不满足
依次向下判断,看是否条件表达式2成立,成立则执行对应代码块,
反之,继续向下判断 条件表达式3 ,如果成立执行对应代码块,
反之,继续向下判断 如果都没有满足的条件,直接执行else中的代码块
youqian = False
youfang = False
youche = False
youyanzhi = False
youtili = False
if youqian == True:
print("我就嫁给他1")
elif youfang == True:
print("我就嫁给他2")
elif youche == True:
print("我就嫁给他3")
elif youyanzhi == True:
print("我就嫁给他4")
elif youtili == True:
print("我就嫁给他5")
else:
print("快走吧脑弟,一会赶不上二路汽车了6")
巢状分支
(单项分支 双项分支 多项分支互相嵌套使用)
youqian = True
youfang = True
youche = True
youyanzhi = False
youtili = True
if youqian == True:
if youfang == True:
if youche == True:
if youyanzhi == True:
if youtili == True:
print("你就是我的如意郎君,1")
else:
print("恭喜你,我的1号备胎2")
else:
print("我向来与丑的人无缘,没缘分3")
else:
print("你是个大好人啊4")
循环结构
关键字:while / for…in…
- 循环结构的种类
- while 循环
- for 循环
- 循环结构的特点
while 循环
可以提高代码的效率,减少代码的冗余
while 条件表达式:
code1
code2
如果条件表达式成立,返回True , 就执行其中的代码块
基本语法:打印1 ~ 100
# (1)初始化变量i
i = 1
# (2)写循环判断条件
while i <= 100:
print(i)
# (3)自增自减的条件
i += 1
"""
# 代码解析:
首先初始化i = 1
然后判断 1<=100 满足 返回True 执行代码块
然后print(1)
i+=1 i = i+1 i=> 2
回到条件表达式当中进行判断 也就是回到16行
2 <= 100 满足 返回True 执行代码块
然后print(2)
i+=1 i = i+1 2+1 i =>3
回到条件表达式当中进行判断 也就是回到16行
3 <= 100 满足 返回True 执行代码块
然后print(3)
i+=1 i = i+1 3+1 i =>4
...
...
什么时候跳出条件?
当i = 101的时候
101 <= 100 不满足 返回False 不执行代码块
循环终止...
"""
1~100的累加和
# (1)第一种方法
i = 1
total = 0
while i <= 100:
# 写上逻辑
# print(i)
total += i
i += 1
print(total)
'''
# 代码解析:
total += i => total = total + i => 0 + 1 => 1
i+=1 => i = i+1 => 1+1 => 2
2 <= 100 满足 返回真True
total += i => totoal = total + i => 0 + 1 + 2 => 3
i+=1 => i = i+1 => 2+1 => 3
3 <= 100 满足 返回真True
total += i => totoal = total + i => 0 + 1 + 2 + 3 => 6
i+=1 => i = i+1 => 3+1 => 4
4 <= 100 满足 返回真True
total += i => totoal = total + i => 0 + 1 + 2 + 3 + 4 + 5 + ...+ 100 => 5050
当i = 101 的时候
101 <= 100 不满足 循环终止...
'''
# (2) 死循环写法
# while True:
# print(1)
i = 1
flag = True
total = 0
while flag:
total += i
i += 1
# 添加一个能够跳出的条件
if i == 101:
flag = False
print(total)
for 循环
循环 遍历 迭代
# while 的遍历方式
listvar = ["黄雄达", "黄文", "黄仪正", "黄少正", "黄广雄", "黄将用"]
i = 0
while i < len(listvar) :
res = listvar[i]
print(res)
i += 1
while 循环有它的局限性,不能够遍历集合这样的数据类型
所以 for 循环应用而生 特指用来遍历的
for 变量 in 可迭代的对象:
print(变量)
容器类型数据是可迭代性对象的一种.后期我们还学迭代器 生成器 range对象
# 遍历列表
container = ["黄雄达", "黄文", "黄仪正", "黄少正", "黄广雄", "黄将用"]
# 遍历元组
container = ("黄雄达", "黄文", "黄仪正", "黄少正", "黄广雄", "黄将用")
# 遍历集合
container = {"黄雄达", "黄文", "黄仪正", "黄少正", "黄广雄", "黄将用"}
# 遍历字典 : 默认遍历字典时,遍历的是键
container = {'top': '亚瑟', "middle": "王军", "bottom": "黄雄达"}
# 遍历字符串
container = "我爱你亲爱滴菇凉,见到你我就心慌"
for i in container:
print(i)
-
遍历等长的二级容器
变量的解包a, b = 1, 2 print(a, b) a, b = [3, 4] print(a, b) a, b = {5, 6} print(a, b)
listvar = [("王健林", "王思聪", "王美丽"), ["马云", "马华疼", "马美丽"], ["王宝强", "马蓉", "宋小宝"]] for a, b, c in listvar: ''' a,b,c = ('王健林', '王思聪', '王美丽') a,b,c = ["马云","马华疼","马美丽"] a,b,c = ["王宝强","马蓉","宋小宝"] ''' print(a, b, c)
-
遍历不等长的二级容器
listvar = [("王健林", "王思聪", "王美丽"), ["马云", "马华疼"], ["王宝强"]] for i in listvar: for j in i: print(j)
-
range 对象
语法:range(start,end,step) start:开始值 end :结束值 step :步长
使用方式和切片语法类似,高位end那个值取不到,取到end之前的那个值
# 1个参数的情况 range(5) => 0 1 2 3 4 默认从0开始 高位5取不到,最大取到4 print(range(5), type(range(5))) res = list(range(5)) print(res) for i in range(5): print(i) # 2个参数的情况 for i in range(3, 10): print(i) # 3个参数的情况 2 4 6 8 10 '''正序''' for i in range(2, 11, 2): print(i) '''倒序''' # 打印9~1 9 8 7 6 5 4 3 2 1 for i in range(9, 0, -1): print(i)
字符串相关操作
-
字符串的拼接
strvar1 = "我爱你," strvar2 = "亲爱的菇凉" res = strvar1 + strvar2 print(res)
-
字符串的重复
strvar1 = "重要的事情说三遍" res = strvar1 * 3 print(res)
-
字符串跨行拼接
str1 = "sdfsssssssssssssssssssssssssssssssssssssssssssss" \ "sssdsfsdfasdf" \ "你说的手" print(str1)
-
字符串的索引
# 0 1 2 3 4 5 strvar = "道路一片光明" # -6-5-4-3-2-1 res = strvar[4] print(res) res = strvar[-2] print(res)
-
字符串的切片
语法 =>字符串[::] 完整格式:[开始索引:结束索引:间隔值]
strvar = "爱往者爱返,福往者福来" #(1)[开始索引:] 从开始索引截取到字符串的最后 res = strvar[3:] print(res) #(2)[:结束索引] 从开头截取到结束索引之前(结束索引-1) res = strvar[:5] print(res) #(3)[开始索引:结束索引] 从开始索引截取到结束索引之前(结束索引-1) res = strvar[6:9] print(res) #(4)[开始索引:结束索引:间隔值] 从开始索引截取到结束索引之前按照指定的间隔截取字符 # 爱者返福者 # 0 2 4 6 8 爱 者 返 福 者 res = strvar[0:9:2] print(res) # end 不写意味着截取到最后 # 3 6 9 爱 福 福 res = strvar[3::3] print(res) # start 开始索引不写,意味着从头开始 # 0 4 爱返 res = strvar[:7:4] print(res) # 0 2 4 6 8 10 爱者返福者来 strvar = "爱往者爱返,福往者福来" res = strvar[::2] print(res) # 倒叙 -1 -2 -3 -4 ... res = strvar[::-1] print(res) # (5)[:]或[::] 截取所有字符串 res = strvar[:] res = strvar[::] print(res)