“”"
流程控制
程序执行过程
程序的结构有三种:
顺序结构:按部就班(自上而下)
选择结构:根据条件去选择条件成功的模块执行
循环结构:重复性执行一段代码
缩进
同一个层次的语句必须有相同的缩进,习惯上使用四个空格(tab)作为一个缩进
仅有顺序结构不足以表达一些很复杂的程序,就比如现在我们很可能根据条件的不同而去决定做什么事情,比如天气
比如两次密码输入一致
一、选择判断(选择结构)
使用pycharm调试bug(错误)
(1)设置断点:程序运行时会暂停到断点的位置(pycharm并没有执行停止的那一行)
(2)F8键,执行当前这一行程序。
(3)F9能够让程序直接走完(会走到下一个断点)
(4)鼠标悬停在变量的位置,会显示变量的值
(一) if:当条件成立时,则执行的代码段
If语法
利用强制缩进来组织语句体,按照惯例缩进4个空格
语法
if 条件==True:
执行if成立时的代码段
a=100
if a==90:
print("我现在很瘦")
print("我可以继续胡吃海塞")
print("其他的代码块,无论if是否成立,都会执行")
(二) if else: else代表当if条件不成立的时候执行的代码段 (二选一)
条件成立 y if 语句体
条件不成立 n else语句体
语法:
else的后面没条件,else必须要有if才能使用。
a=100
if a==90:
print("我现在很瘦")
print("我可以继续胡吃海塞")
else:
print("我不知道我是大于90,还是小于90")
print("其他的代码块,无论if是否成立,都会执行")
小知识pycharm的使用
(三) if elif elif....多选一:多选择分支的判断(弥补:if-else只能实现两条分支)
多个选择
十字路口
elif也不能独立使用,必须是在if条件后使用。
if和多个elif,哪个条件成立就执行哪个,只要遇见符合的条件,直接执行下面的代码段,
不再继续向下进行其他elif的判断
if 条件:
if成立时执行的代码段
elif 条件:
elif条件成立时候执行的代码段
elif 条件:
elif条件成立时候执行的代码段
elif 条件:
elif条件成立时候执行的代码段
else:
前面所有的if和elif条件都不成立,执行的代码
a=110
if a>100:
print("没法见人了....")
elif a==90:
print("我现在很瘦")
print("我可以继续胡吃海塞")
elif 100>a>90:
print("我不能再吃了")
print("要去健身房")
elif a>100:
print("没法见人了....")
else:
print("我不知道我是大于90,还是小于90")
print("其他的代码块,无论if是否成立,都会执行")
使用if elif else条件判断开发时习惯:
(1)范围要按照顺序写
(2)没有包含关系的时候,如果不按顺序,需要确定每个条件的范围
(3)有包含关系的时候,把可能性大的放在前面:因为根据频率进行排序,节省时间
score = int(input('please input the score'))
if score >= 90:
print('A')
elif score >= 80:
print('B')
elif score >= 70:
print('C')
elif score >= 60:
print('D')
else:
print(score)
k可能的取值是1, 2, 3, 4
k = 1
if k == 1:
print(‘’)
elif k == 2:
print(‘’)
elif k == 3:
print(‘’)
elif k == 4:
print(‘’)
练习:
使用random产生1 3的随机数,根据随机数的不同来确定中午吃什么。
1 牛肉面 2麻辣烫 3 吃土
import random
a=random.randint(1,3)
if a==1:
print("牛肉面")
elif a==2:
print("麻辣烫")
else:
print("吃土")
(四)布尔类型的转换
if 条件
其他数据类型都可以转换成布尔类型
False True
int 0
float 0.0
complex 0j
list 无元素
tuple 无元素
str 空串""
bytes 空字节b""
dict 无元素
set 无元素
a="hello"
if len(a)!=0:
pass 关键字,代表占位
if a: 判断a是否是空串,如果不是空串,则做if下面的操作
pass
(五)if-else 简化版:三元表达式
if条件判断的表达式
语法: if成立的表达式 if 条件 else if不成立的表达式
使用场合:if条件和语句体比较简单的时候。
x=1
需求:如果x=1 返回男,否则返回女
if x==1:
print("男")
else:
print("女")
三元表达式:
print("男" if x==1 else "女")
练习:
1-7 周一,周天
1-5 上课 6 、 7 休息
day=int(input("请输入周几:"))
print("上课" if 1<=day<=5 else "休息")
1-5 上课 6 上自习、 7 休息
print("上课" if 1<=day<=5 else ("上自习" if day==6 else "休息"))
(六)if 嵌套
嵌套:选择分支里面还有选择分支,if里面还有if
(七)断言
所以断言应该设置在程序的关键位置,这样一旦程序运行失败了,就会有提示
用来做调试程序,判断程序执行到这一刻是否正确
关键字assert
语法:
assert 表达式
或
assert 表达式, 提示信息
表达式为真,程序继续执行
意思:断言表达式成立,程序可以继续执行, 如果不成立,程序会抛出assertionError
assert 1>5 ,"谁告诉1>5的??"
print("其他代码段")
结果如下:
assert 1>5 ,"谁告诉1>5的??"
AssertionError: 谁告诉1>5的??
Assert表达式实例运用:
password = input('请输入密码:')
password = input('请再次输入密码:')
在此处设下断言,仅当两次密码一致时,才有必要进行后续的注册工作
assert password == password2
print('进行后续的注册工作......')
print('注册成功')
请输入密码:123
请再次输入密码:123
进行后续的注册工作......
注册成功
请输入密码:12
请再次输入密码:123
Traceback (most recent call last)
File 'C:/Python/day3/assert_test.py', line 11, in
assert password == password2 '两次密码输入的不一致'
AssertionError: 两次密码输入的不一样
横杠大o能够终结断言,python IDLE
参图
二、循环
重复性的执行一次
今天上班,明天上班,后天上班…
需求:输出5次helloworld
print("hello world")
print("hello world")
print("hello world")
print("hello world")
print("hello world")
需求虽然满足,但是:
两个问题:1. 代码冗余 2.代码不容易维护(以后可能需要修改)
采用循环去解决重复的问题
(一)while 循环
语法:while 表达式:
循环体
如果while 条件==True:
执行循环语句1
循环语句2
然后重复执行while,一直执行,直到while表达式为假,停止执行
需求: 解决5次helloworld
time=1
while time<=5:
print("hello world")
time=time+1
time+=1
print("其他代码段")
1+2+...+100=5050
a=1
s=0
while a<=100:
s=s+a
s+=a
a+=1
print(s)
输入开始点和结束点,求出之和
start = int(input('请输入开始点:))
end = int(input('请输入结束点:'))
index = start
sum = 0
while index <= end:
sum += index
index += 1
print(sum)
解决小游戏中循环玩的问题。
realvalue=8
tag="y"
while tag=="y":
guess=int(input("请猜一个数字:"))
if guess==realvalue:
print("猜对了")
tag="n"
else:
print("猜错了")
if guess>realvalue:
print("猜大了,小一点吧")
else:
print("猜小了,大一点吧")
tag=input("是否还继续猜?y/n")
print("游戏结束")
while一般适合指定条件的循环,跟次数相关紧密
求阶乘
value = int(input('请输入要求阶乘的数值:'))
multi = 1
index = 1
while index <= value:
multi *= index
index += 1
print(multi)
(二)for 循环
依据任意序列中的子项,按照他在序列中顺序进行迭代。
迭代体
语法:
For 变量 in 可迭代对象:
循环体
可迭代对象?这是一个对象,可以产生一系列的值(可以想象成一个盒子,你可以一个一个从里面掏出东西);不要纠结具体是什么对象;
对可迭代对象中的每一个元素,依次赋值给变量
每次拽出来一个元素,赋值给变量,然后执行下面的语句
也就是说,在循环体中对变量进行的操作,也就是依次对可迭代对象进行的操作
图
for x in 可迭代对象
可迭代对象 ===》 变量
for 每个元素的变量名 in 迭代对象 (字符串、字节、列表、元组、集合、字典):
迭代体
range()函数
有一个函数就可以产生这一系列的可迭代对象,就是range()函数,它可以产生一个区间的整数值(可迭代对象)
迭代对象中有多少元素(len(对象)),循环就迭代几次。
print(range(2,10))
for i in range(2, 10):
print(i)
# range(2, 10)
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
for实现输出5次hello world
for i in "11111":
print("hello world")
print("其他的代码段")
输出1 2 3 4 5
for i in "12345":
print(i)
1+2+...+100 for循环解决
s=0
for i in "12345":
s+=int(i)
print(s)
start,end,step
range()函数/类
print(type(range(2,10)))
print(list(range(2,10))) list函数能够将对象转换成列表,可以将range产出的值全部放到列表中。前闭后开
range(start,end,step)
start 、end:正数,负数 0 方向,包含start,不包含end
step步长,就是增量值,默认值1
print(list(range(10,2,-1)))
注意使用的时候,step,start和end的方向
print(list(range(1,101)))
s=0
for i in range(1,101):
s+=i
print(s)
找到100以内所有奇数
print(list(range(1,101,2)))
print(list(range(2,101,2)))
for循环解决奇数和偶数1
for i in range(1,101):
if i%2==0:
print(f"偶数{i}")
练习:判断输入的数是否是质数。
质数:只能被自己和1整除的数
17 2 3....16
num=int(input("请输入一个数"))
tag=True
for i in range(2,num):
if num%i==0:
说明不是质数
tag=False
print("不是质数")
if tag:
print("是质数")
比while循环简单
因为循环体里面的操作可以省去,然后变量不需要先声明
start = int(input('请输入起始点:'))
end = int(input('请输入结束点:'))
sum = 0
for x in range(start, end + 1)
sum += x
print(sum)
(三)循环的嵌套
多个循环
for i in 外循环对象(ABC):
for j in 内循环对象(1,2,3,4,5):
循环体
对于嵌套循环来说,外循环每执行一次,内循环都会完整执行一轮。
外层循环如果执行M次,内层循环如果每一轮执行N次,则内层循环的循环体总共会执行M * N 次
在一行中打印6个*
print("*"*6)
for i in range(6):
print("*",end="")
需要打印10行,每行6个*
for j in range(10):
for i in range(6):
print("*", end="")
print()
li=[1,2,3]
for i in li:
print(i)
li=[[1,2,3],[4,5,6],[7,8,9]]
for i in li:
print(i)
for j in i:
print(j)
(四)跳出循环---break 和 else
用于提前结束循环,跳出当前循环,直接走循环之后的其他代码段
Break只能用在循环当中,在循环内部,我们通常将break用在选择判断中,因为无条件的break通常都是没有意义的。
for i in range(1, 10000):
print(i)
if i == 3:
break
# 1
# 2
# 3
循环中的else
在循环迭代正常完成之后,执行else中的代码
只要循环不正常结束(空迭代体,有break,有异常),就不走else
For和while循环可以加上一个可选的else
如果循环没有因为break而提前结束,则执行else语句体。否则不执行else语句体。
v = int(input('请输入值:'))
for i in range(1, 101):
if i == v:
print('找到了!')
break
else:
print('没找到')
不用break:
find = False
v = int(input('请输入值:'))
for i in range(1, 101):
if i == v:
print('找到了!')
find = True
if not find:
print('没找到')
查找range(1,21)中有没有某一个数字
使用标志位解决没有找到的问题
tag=False
for i in range(3,21):
if i==2:
print("找到2了")
tag=True
break
if tag==False:
print("没找到")
使用else解决没有找到
只要循环不正常结束(空迭代体,有break,有异常),就不走else
for i in range(1,21):
if i==2:
print("找到2了")
break
else:
print("没找到")
判断一个数是否是质数
num=int(input("请输入一个数"))
for i in range(2,num):
if num%i==0:
print("不是质数")
break
else:
print("是质数")
1. 跳出循环--- continue
用来结束本次循环,开启下一次循环,对后续的循环没有影响
跳出本次循环,本次循环后面的代码不再执行,继续执行下一次循环
Continue 也只能用在循环中,continue通常是放在选择判断中
for i in range(1, 20):
if i % 2 ==0:
continue
print(i)
# 1
# 3
# 5
# 7
# 9
# 11
# 13
# 15
# 17
# 19
for i in range(1,101):
if i==2:
print("找到2了")
break
print("其他代码段")
判断一个数是否是质数
num=int(input("请输入一个数"))
tag=True
for i in range(2,num):
if num%i==0:
说明不是质数
tag=False
print("不是质数")
break
if tag:
print("是质数")
continue:continue后面有代码才意义
输出20以内的数,标注出所有的偶数
for i in range(1,21):
if i%2==0:
print(f"{i}是偶数")
continue
print(i)
解决游戏猜对了,跳出的问题
realvalue=8
while True:永远为真
while 1:
while True:
guess=int(input("请猜一个数字:"))
if guess==realvalue:
print("猜对了")
break
else:
print("猜错了")
if guess>realvalue:
print("猜大了,小一点吧")
else:
print("猜小了,大一点吧")
tag=input("是否还继续猜?y/n")
print("游戏结束")
(五)for循环中enumerate
s="helloworld"
index=0
for i in s:
print(i,index)
index+=1
s="helloworld"
使用enumerate产生内容(索引,元素)
索引在第一位输出
for a,b in enumerate(s):
print(a,b)
enumerate()说明
• enumerate()是python的内置函数
• enumerate在字典上是枚举、列举的意思
• 对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
• enumerate多用于在for循环中得到计数
• 例如对于一个seq,得到:
(0, seq[0]), (1, seq[1]), (2, seq[2])
enumerate()返回的是一个enumerate对象,例如:
seq = range(5)
enumerate(seq)
enumerate at 0x36e5798
# 1
# 3
# 5
# 7
# 9
# 11
# 13
# 15
# 17
# 19
for i in range(1,101):
if i==2:
print("找到2了")
break
print("其他代码段")
判断一个数是否是质数
num=int(input("请输入一个数"))
tag=True
for i in range(2,num):
if num%i==0:
说明不是质数
tag=False
print("不是质数")
break
if tag:
print("是质数")
continue:continue后面有代码才意义
输出20以内的数,标注出所有的偶数
for i in range(1,21):
if i%2==0:
print(f"{i}是偶数")
continue
print(i)
解决游戏猜对了,跳出的问题
realvalue=8
while True:永远为真
while 1:
while True:
guess=int(input("请猜一个数字:"))
if guess==realvalue:
print("猜对了")
break
else:
print("猜错了")
if guess>realvalue:
print("猜大了,小一点吧")
else:
print("猜小了,大一点吧")
tag=input("是否还继续猜?y/n")
print("游戏结束")
(六)enumerate()使用
• 如果对一个列表,既要遍历索引又要遍历元素时,首先可以这样写:
1. list1 = ["这", "是", "一个", "测试"]
2. for i in range (len(list1)):
3. print i ,list1[i]
• 1
• 2
• 3
•
• 上述方法有些累赘,利用enumerate()会更加直接和优美:
1. list1 = ["这", "是", "一个", "测试"]
2. for index, item in enumerate(list1):
3. print index, item
4. >>>
5. 0 这
6. 1 是
7. 2 一个
8. 3 测试
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
•
• enumerate还可以接收第二个参数,用于指定索引起始值,如:
1. list1 = ["这", "是", "一个", "测试"]
2. for index, item in enumerate(list1, 1):
3. print index, item
4. >>>
5. 1 这
6. 2 是
7. 3 一个
8. 4 测试
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
•
________________________________________
补充
如果要统计文件的行数,可以这样写:
count = len(open(filepath, 'r').readlines())
• 1
•
这种方法简单,但是可能比较慢,当文件比较大时甚至不能工作。
可以利用enumerate():
1. count = 0
2. for index, line in enumerate(open(filepath,'r')):
3. count += 1
• 1
• 2
• 3
“”"