1 分支结构
1. 顺序结构
默认情况下,程序从上往下按顺序一条一条的执行,每一条语句都会执行并且只会执行一次。
2. 分支结构
让程序根据条件执行代码。
1)if单分支结构
如果xxx就xxx(满足条件执行某个操作,条件不满足的时候这个操作就不执行)。
- 🌻语法:
if 条件语句:
代码段
- 结构说明:
结构 | 说明 |
---|---|
if | 关键字;固定语法 |
条件语句 | 可以是任何有结果的表达式(比如:具体的数值、运算符、已经定义过的变量等,只有赋值语句不行)。一般将结果是布尔的表达式作为条件 |
: | 固定写法(注意输入法问题) |
代码段 | 结构上,就是和if保持一个缩进的一条或者多条语句(至少一条) |
- 执行过程:先判断条件语句是否成立(如果条件语句的结果不是布尔,就转换成布尔看是否是True),如果成立就执行代码。
2)if双分支结构
如果xxx就xxx,否则就xxx(条件成立执行某个操作,不成立就执行另外一个操作)。
- 🌻语法:
if 条件语句:
代码段1(满足条件执行的代码)
else:
代码段2(不满足条件执行的代码)
🌰:
age=17
if age>=18:
print('成年')
else:
print('未成年')
🌰:
year=2004
if (year%4==0 and year % 100 !=0)or (year%400==0):
print('闰年')
else:
print('平年')
3)if多分支结构
如果xxx就xxx,如果xxx就xxxx,如果xxx就xxx,…(根据不同的条件做不一样的事情)
- 🌻方法一:直接多个单分支结构(多个条件之间不存在’其中一个条件成立,另外的条件就不成立’的情况):
if 条件1:
代码段1
if 条件2:
代码段2
if 条件3:
代码段3
...
不管前面的条件成不成立,都会判断一遍,效率低。
🌰根据百分制分数,给学生打等级(A大于等于90分,B[80,90),C[60,80),D小于60)。
score = 99:
if score >=90:
print('A')
if 80<=score<90:
print('B')
if 60<=score<80:
print('C')
if score<60:
print('D')
🌰如果num是偶数打印偶数,如果num能被3整除打印3的倍数,如果num能被5整除打印5的倍数。
num = 9
if num % 2 == 0:
print('是偶数')
if num % 3 == 0:
print('3的倍数')
if num % 5 == 0:
print('5的倍数')
- 🌻方法二:使用elif对应的分支结果(多个条件之间存在’其中一个条件成立,另外的条件就不成立’的情况):
if 条件1:
代码段1
elif 条件2:
代码段2
elif 条件3:
代码段3
...
else:
代码段N
后面的条件是在前面的条件不成立的基础上进行判断的。如果前面的某个条件成立,后面的条件不会判断。
🌰:
if score>=90:
print('A')
elif score>=80:
print('B')
elif score>=60:
print('C')
else:
print('D')
4) if嵌套(if分支结构的内部又有分支结构)
🌰如果num是偶数打印偶数,是奇数打印奇数,如果num能被4整除打印4的倍数。
num = 4
if num % 2 == 0:
print('偶数')
if num % 4 == 0:
print('4的倍数')
else:
print('奇数')
结果:
偶数
4的倍数
2 循环结构
让代码重复执行(代码写一遍,重复执行多次)
python实现循环结构的工具:for循环、while循环
1. for循环
- 🌻语法:
for 变量 in 序列:
循环体
- 结构说明:
结构 | 说明 |
---|---|
for | 关键字,固定写法 |
变量 | 变量名(可以是已经定义过的变量的变量名也可以是没有定义过的变量的变量名) |
in | 关键字,固定写法 |
序列 | 必须是容器型数据类型的数据 |
: | 固定写法 |
循环体 | 结构上,循环体就是和for保持一个缩进的一条或者多条语句(至少一句);逻辑上,就是需要重复执行的代码。 |
容器型数据类型:字符串、列表、字典、元组、集合、range、迭代器、生成器等
- 执行过程:让变量去序列中取值,一个一个的取,取完为止,每取一个值就执行一次循环体。
(想要控制for循环的循环次数,只需要控制序列中元素的个数)
🌰:
for x in 'abc':
print(x)
print('hello')
结果:
a
hello
b
hello
c
hello
2. range函数
创建等差数列。
1)range(N) 产生[0,N)的等差数列,差是1
🌰range(5)指0,1,2,3,4
for x in range(10)
print(x)
结果:0 1 2 3 4 5 6 7 8 9
2)range(M,N) 产生[M,N)的等差数列,M能取到,N不能取到,差是1
🌰
for x in range(5,10)
print(x)
结果:5 6 7 8 9
3)range(M,N,step) 产生[M,N)的等差数列,差是step
🌰range(10,20,2)指10,12,14,16,18
for i in range(5,1,-1):
print(x)
结果:5 4 3 2
3. for的应用
累计求和, 求和套路:
1)准备数据
2)定义变量保存最后的和(变量的默认值是0)
3)通过循环依次获取求和对象,得到一个求和对象就往保存的变量中加一个
🌰1、计算1+2+3+…+100的和。
sum = 0
for i in range(1,101):
sum += i
print(sum)
结果:5050
🌰2、求2+3+4+…+50的和。
sum1=0
for i in range(2,51):
sum1+=i
print(sum1)
结果:1274
🌰3、求3+6+9+12+…+99的和。
sum2=0
for i in range(3,100,3):
sum2+=i
print(sum2)
结果:1683
🌰4、求100以内所有偶数的和。
sum3=0
for i in range(0,100,2):
sum3+=i
print(sum3)
结果:2450
🌰5、求100以内所有能被3整除但是不能被5整除的数的和。
sum4=0
for i in range(100):
if i%3==0 and i%5!=0:
sum4+=i
print(sum4)
结果:1368
🌰6、已知列表list1,求列表中所有数字的和。
list1 = [10, 1.23, 'abc', True, 20, 'mn', None]
sum5=0
for i in list1:
if type(i)==int or type(i)==float:
sum5+=i
print(sum5)
结果:31.23
4. 统计个数
1)定义变量保存最后的个数(变量默认值是0)。
2)通过循环获取每一个统计对象,获取到一个统计对象,个数就在原来的基础上加1。
🌰1、统计100以内偶数的个数。
count=0
for i in range(0,100,2):
count+=1
print(count)
结果:50
🌰2、统计nums中偶数的个数。
nums=[22,34,33,56,77,88,7,65,90]
count=0
for i in nums:
if i %2==0:
count+=1
print(count)
结果:5
🌰3、统计scores中不及格学生的人数。
scores = [99, 80, 67, 55, 40, 81, 72, 51]
count=0
for i in scores:
if i<60:
count+=1
print(count)
结果:3
🌰4、统计nums中个位数大于5的数的个数。
nums = [21, 23, 44, 89, 70, 66, 55]
count=0
for i in nums:
if i%10>5:
count+=1
print(count)
结果:2
5. while循环
- 🌻语法:
while 条件语句:
循环体(需要重复执行的代码)
- 执行过程:不断判断条件语句是否为True,如果是就执行循环体,如果不是循环直接结束。
(控制次数的方式:保证条件一开始是True,经历过指定次数以后条件会有True变成False)
死循环:条件语句一直都是True
🌰打印0~100
num = 0
while 0<=num<=100:
print(num)
num+=1
6. for循环和while循环的选择
如果循环次数确定使用for循环;如果循环次数不确定使用while循环。
循环次数不确定:程序员在写代码的时候自己都不知道这个循环会重复多少次(次数有使用程序的用户决定的)。
🌰提示用户输入密码,知道输入正确为止。
password='123456'
val=None
while val!=password:
val=input('请输入密码:')