Python基础语法【分支和循环】
一.流程控制 — 通过代码控制程序执行的顺序
1)顺序结构:代码从上往下按顺序一条一条的执行,每条语句只执行一次(默认)。
2)分支结构:执行代码的时候根据条件选择执行或者不执行某些代码(if语句)。
3)循环结构:让代码重复执行——代码写一遍重复执行多次(for、while)
# 1)顺序结构
print('默认的就是顺序执行')
print('1')
print('2')
# 2)分支结构
age = 23
if age >= 18:
print("成年")
else:
print("未成年")
# 3)循环结构
for x in range(2):
print('循环结构') # 会循环执行两次
二.分支结构
定义: python实现分支结构得工具只有:if
1.单分支结构
1)应用场景:如果满足xxx就xxxx(满足条件才执行某个操作,如果这个条件不满足这个操作就不执行)
2)语法:
if 条件语句:
代码段
3)说明:
a.if ——关键字;固定写法;
b.条件语句——判断语句(可以是任何有结果的表达式)
c. :——固定写法(注意:必须是英文输入法的冒号)
d.代码段 —— 结构上是和if保持一个缩进的一条或者多条语句(至少一条);
逻辑上代码段就是满足条件才会执行的代码。
4)案例1:如果age大于等于18就打印成年
age = 20
if age >= 18:
print("成年")
5)案例2: 如果year对应的是闰年,就打印”闰年“
year = 2022
if (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0):
print("闰年")
6)练习1: 根据num的值打印偶数
num1 = 200
if num1 % 2 == 0:
print("偶数")
7)练习2: 如果num不能被3整除就让num加1
num2 = 23
if not (num2 % 3 == 0):
num2 += 1 # num2=num2 + 1
print(num2)
8)练习3: 根据num的值打印”奇数“
num = 99
if num % 2 != 0:
print("奇数")
9)练习4: 水仙花: 一个三位数各个位数的立方和等于他本身, 153 == 13 + 53 + 3**3
num1 = 342
bai = num1 // 100
shi = num1 // 10 % 10
ge = num1 % 10
if bai ** 3 + shi ** 3 + ge ** 3 == num1:
print("这是水仙花数")
else:
print("不是水仙花数")
2.双分支结构
1)应用场景: 如果xxx就xxx否则就xxx(满足条件执行某个操作,条件不满足的时候执行另外的一个操作)
2)语法:
if 条件语句:
代码段1(满足条件需要执行的代码)
else:
代码段2(条件不满足的时候执行的代码)
3)案例:根据age值打印“成年”或者“未成年”
age = 20
if age >=18:
print("成年")
else:
print("未成年")
4)案例:如果num大于10就让num减5,否则将num加5
num2 = 89
if num2 > 10:
num2 -= 5
else:
num2 += 5
print(num2)
3.多分支结构
1)应用场景: 如果xxx就xxx,如果xxx就xxx…(根据不同的条件做不同的事情)
2)语法1: —— 直接使用多个if单分支结构
if 条件语句:
代码段1
if 条件语句:
代码段2
if 条件语句:
代码段3
......
#注意:会依次判断条件是否成立
3)语法2:
if 条件语句1:
代码段1
elif 条件语句2:
代码段2
elif 条件语句3:
代码段3
.......
else:
代码段N
#注意:
#1)如果前面条件已满足,就不会在判断后面的条件,反之一样。
#2)用于多个条件之间:存在一个条件满足了,其他的条件不成立的情况
4)案例: 根据年龄值打印:幼儿(0-3),儿童(3-12),青少年(13-18),青年(19-28),壮年(29-40),中年(41-65),老年(>65)
# 方法1:
age = 20
if age <= 3:
print("幼儿")
if 3 < age <= 12:
print('儿童')
if 12 < age <= 18:
print('青少年')
if 18 < age <= 28:
print('青年')
if 28 < age <= 40:
print('壮年')
if 41 < age <= 65:
print('中年')
if age > 65:
print('老年')
# 方法2
age = 20
if age <= 3:
print("幼儿")
elif age <= 12:
print('儿童')
elif age <= 18:
print('青少年')
elif age <= 28:
print('青年')
elif age <= 40:
print('壮年')
elif age <= 65:
print('中年')
else:
print("老年")
5)练习: 根据分数打等级:A(>=90),B[80,90),C[60,80),D(<60)
score = 90
if score > 90:
print("A")
elif score >= 80;
print("B")
elif score >= 80;
print("C")
else:
print("D")
# 案例:如果考试考了100分 —— 买车;考了90分 —— 买鞋;考了80分 —— 吃火锅;低于80分,批评。
score = 89
# 方法1:
if score == 100:
print('买车')
if 90 <= score < 100:
print("买鞋")
if 80 <= score < 90:
print("吃火锅")
if score < 80:
print("批评")
# 方法2:
if score == 100:
print("买车")
elif score >= 90:
print("买鞋")
elif score >= 80:
print("吃火锅")
else:
print("批评")
# 练习1:如果num是偶数打印”偶数’,如果是奇数就打印奇数,如果能被5整除就打印5的倍数
num = 25
if num % 5 == 0:
print("能被5整除")
if num % 2 == 0:
print("偶数")
else:
print("奇数")
三.For循环
定义:代码只写一遍,然后反复执行多次。
1.for循环
1)语法:
for 变量 in 序列:
循环体
2)说明:
a. for ——关键字;固定写法
b. 变量 ——变量名(已经定义过的,或者没有定义过的变量都可以)
c. in ——关键字;固定写法
d. 序列 ——可以是任何容器型数据类型的数据;例如:字符串、列表、元组、集合、迭代器、生成器、range
e. : ——固定写法
f. 循环体 ——结构上循环体就是和for保持一个缩进的一条或者多条语句(至少一句);
逻辑上循环体就是需要重复执行的代码。
3) 执行过程:
让变量去序列中取值,一个一个的取,取完为止;每取一个值就执行一次循环体。
如果要控制for循环的循环次数,只需要控制序列中元素的个数。
4)练习: 用循环控制print(“hello”)五次
for x in "abcde": # 序列为字符串,有多少个字符串就执行多少次
print(x, "hello")
for x in range(5):
print("hello")
2.range函数——创建等差数列的函数
- range(N) —— 创建[0,N)的等差数列,差是1;
例如:range(5) —— 0、1、2、3、4 - range(M, N) —— 创建[M,N)的等差数列,差是1;
例如:range(5,10) —— 5、6、7、8、9 - range(M, N, step) —— 创建[M,N)的等差数列,差是step;
例如:range(5,10,2) —— 5、7、9
例如:range(10,1,-2) —— 10、8、6、4、2
4)练习1:使用range创建等差数列:0 1 2 3 4 5 6 7
for x in range(8):
print(x)
5)练习2:使用range创建等差数列:0 10 20 30 40
for x in range(0,41,10):
print(x)
6)练习3:使用range创建等差数列:5 10 15 20 25
for x in range(5,26,5):
print(x)
7)练习4:使用range创建等差数列:25 20 15 10 5
for x in range(25,4,-5):
print(x)
8)练习5:使用range创建等差数列:-1 0 1 2
for x in range(0,3,-1):
print(x)
3.for循环的应用
3.1 累积求和
1.套路:
1)定义变量保存最后的和,变量的默认值是0;num = 0
2)用循环依次获取所有需要求和的数据;for x in …
3)在循环体中获取到一个需要求和的数据就用保存最后的变量加上这个数据;num+=x;
2.案例1:用循环求1+2+3+4+…+100的和
sum = 0
for x in range(1,101):
sum += x # sum = sum + 1
print(sum)
3.案例2:求scores中所有分数的和,scores = [98, 34, 78, 89, 78, 23, 56]
scores = [98, 34, 78, 89, 78, 23, 56]
sum = 0
for x in scores:
sum += x
print(sum)
4.练习1:计算1+3+5+7+…+99
sum = 0
for x in range(1,100,2):
sum += x
print(sum)
5.练习2:求scores所有及格学生的总分,scores = [98, 34, 78, 89, 78, 23, 56]
scores = [98, 34, 78, 89, 78, 23, 56]
sum = 0
for x in scores:
if x > 60:
sum += x
print(sum)
6.求100以内所有能被3整除但是不能被2整除的数的和
sum = 0
for x in range(100):
if x % 3 == 0 and X % 2 !=0:
sum += x
print(sum)
3.2统计个数
1)定义变量保存最后的个数,默认值为0;count = 0;
2)通过循环获取统计对象;for x in …
3)获得一个统计对象个数就加1;count+=1;
1.案例:根据scores统计不及格学生的人数。
scores = [98, 34, 78, 89, 78, 23, 56]
count = 0
for x in scores:
if x < 60:
count += 1
print(count)
2.练习:统计1000以内能被3整除的数的个数(不包括0)。
# 方法1:
count = 0
for x in range(1,1001):
if X % 3 ==0:
count += 1
print(count)
# 方法2:
count = 0
for x in range(3, 1000, 3):
count += 1
print(count)
四.while循环
1.while循环
1)语法:
while 条件语句:
代码段(循环体)
2)执行过程:
先判断条件语句是否成立,如果成立就执行循环体,执行完循环再判断语句是否成立,成立就再执行循环体…以此类推,直到条件不成立循环就结束。
注意:while可以死循环,但是for无法死循环。
3)案例1:打印1、2、3、4、5…10
num = 1
while num <= 10:
print(num)
num += 1
for x in range(1, 11):
print(x)
4)案例2:打印10个”hello“
x = 0
while x < 10:
print("hello")
x += 1
2.for循环和while循环的选择
1)原则:能用for循环的时候尽量用for,for解决不了的问题才考虑使用while循环。
2)for循环能够解决的问题:循环次数确定的时候;
3)for循环不能解决的问题:
a.死循环
b.循环次数不确定(程序员在写代码的时候无法得知循坏的次数,或者是循环次数由使用者行为来决定)
4)案例:写程序提示用户输入密码,直到密码输入正确为止
#如果要实现以下效果
pw = "123abc"
请输入密码:123456
请输入密码:12345t
...
请输入密码:123abc
(结束)
pw = "123abc" # 系统密码
value = None # value = input("请输入密码:")
while value != pw: # 输入的密码不等于系统保存的密码
value = input("请输入密码:")
3.有了break的while循环
1)语法:
while True:
需要重复执行操作
if 循环结束的条件:
break
pw = "123"
while True:
value = input("请输入密码:")
if pw == value:
break
五.循环关键字
1)循环关键字:continue,break
注意:continue和break只能在循环体中使用。
1.continue
1)作用:结束一次循环(结束当次循环)——执行循环体的时候如果遇到了continue,那么这次循环直接结束。
for x in range(5):
print("yes")
continue
print("no")
2)练习:打印10以内的所有奇数
# 方法1:
for x in range(10):
if x % 2 == 0:
continue
print(x)
# 方法2:
for x in range(10):
if x % 2 != 0:
print(x)
2.break
1)作用:结束整个循环 ——执行循环体的时候如果遇到break整个循环直接结束。
for x in range(10):
if x > 4:
break
print(x) # 输出0,1,2,3,4
3.break的应用 —— 当while遇到了break
while True:
需要重复执行的操作
if 循环结束的条件:
break
1)案例:写程序提示用户输入密码,直到输入的密码和系统保存的密码相同为止。
pw = "123123"
while True:
value = input("请输入密码:")
if value == pw:
break
- 练习:用程序实现猜数字游戏的功能
系统随机产生一个0~100的随机数
"""
from random import randint
num = randint(0, 100)
# while True:
# value = int(input("请输入数字:"))
# if value == num:
# print("恭喜你,你猜对了!")
# break
# elif value < num:
# print("猜小了,往大的猜")
# else:
# print("猜大了,往小的猜")
"""
count = 0
while True:
value = int(input("请输入数字:"))
count += 1
if value == num:
print("binggo")
break
elif value < num:
print("猜小了,往大的猜")
else:
print("猜大了,往小的猜")
if 1 < count < 5:
print("good")
if 6 < count < 10:
print("fighting")
if count > 10:
print("it not good")
print("猜了", count, "次")
4.完整的循环结构
1)完整的for循环
for 变量 in 序列:
循环体
else:
代码段
2)完整的while循环
while 条件语句:
循环体
else:
代码段
else的存在不影响原来的循环的执行
for x in range(5):
print("hello")
else:
pass # pass占位置
print("__________________________华丽的分割线_________________________")
5.循环else的作用:
1)else的存在不影响原来循环的执行
2)如果循环前面的循环是正常结束(for把数据取完了导致循环结束;while循环的条件不成立导致循环结束)的,else后面的代码段会在循环结束后执行。
# 如果前面的循环是因为遇到break而结束的,循环结束后不会执行else后面的代码段。
for x in range(5):
print(x, "hello")
if x == 2:
break
else:
print(100)
- 判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
num = 29
for x in range(2, num):
if num % x == 0:
print(num, "不是素数")
break
else:
print(num, "是素数")
注意:break之前执行完才会执行else
- 判断字符串是否是纯字母字符串
如果循环遇到了break,那么else后面的代码段就不会执行;如果没有遇到break,执行完就需要执行else里面的代码段。
str1 = "ghjh"
for x in str1:
if not ("a" <= x <= "z" or "A" <= x <= "Z"):
print(str1, "不是纯字母字符串")
break
else:
print(str1, "是纯字母字符串")
```