第四天的学习内容喵,请大大们检查~
2.6流程控制语句
2.6.1顺序结构语句
代码从上向下逐行运行的
2.6.2分支结构语句
分为三种格式的,这三种格式分别是
-
单分支 语法:
if 条件表达式: 满足条件执行的代码块
语境:如果达到了某个条件,就去做某件事
:缩进/冒号缩进:代表python中代码块的包含体,满足要求执行的代码要统一缩进体现出来的包含关系
eg: # 再进行取余之前 需要先对数据进行判断 看一下是否要减去5 num = int(input('请输入一个整数:')) if num % 2 == 0: num -= 5 # num = num - 5 result = num % 3 print(result)
-
双分支 语法
if 条件表达式: 满足条件执行的代码块 else: 不满足条件执行的代码块
语境:如果满足某个条件做事情A,否则做事情B
# 需求: 输入一个整数: 如果这个数是奇数 对数据进行 *7 - 9的运算 否则对数据进行 *5-11的运算 num1 = int(input('请输入一个整数:')) if num1 % 2 != 0: result = num1 * 7 - 9 else: result = num1 * 5 - 11 print(result)
-
多分支 语法:
if 条件表达式1: 满足条件1执行的代码块 elif 条件表达式2: 不满足条件1 但是满足条件2执行的代码块 elif 条件表达式3: 满足条件3 但是不满足条件1和2执行的代码块 ... else: 以上条件都不满足执行的代码块
语境:如果满足条件1,就做事情A,否则如果满足条件2,做事情B....
# 需求:输入一个年龄 判断这个人是青年【年龄在30岁以下】 中年【30-60】 老年【60以上】 age = int(input('请输入年龄:')) if age < 30: print('青年') elif age <= 60: print('中年') else: print('老年')
语句嵌套
在满足某种要求的基础上,还需要再进行逻辑判断才可以确定结果
# 数据的原始进制格式,数据是什么,目标进制是什么 src = int(input('请输入进制,2、8、10、16')) data = input('请输入数据:') dest = int(input('请输入要转换的进制,比如2、8、10、16')) # 二进制 bin(整数) # 八进制 oct(整数) # 十六进制 hex(整数) # 十进制 int(整数) # int(字符串,base= 几进制的) # 需要先把数据转化成十进制 decade_num = int(data,base=src) # 判断目的进制是什么进制转化 if dest==2: result = bin(decade_num) elif dest==8: result = oct(decade_num) elif dest==16: result = hex(decade_num) elif dest==10: result = decade_num else: result = '无此进制转换机制' print(result)
# 用语句嵌套,进行进制转换,且如果原始数据是非2、8、10、16,直接提示没有该进制的转换 # 数据的原始进制格式,数据是什么,目标进制是什么 src = int(input('请输入进制,2、8、10、16')) #如果原始数据进制是非2/8/10/16的 提示没有该进制的转换 if src == 2 or src == 8 or src == 10 or src == 16: data = input('请输入数据:') dest = int(input('请输入要转换的进制,比如2、8、10、16')) # 二进制 bin(整数) # 八进制 oct(整数) # 十六进制 hex(整数) # 十进制 int(整数)/int(字符串,base= 几进制) # 需要先把数据转化成十进制 decade_num = int(data,base=src) # 判断目的进制是什么进制转化 if dest==2: result = bin(decade_num) elif dest==8: result = oct(decade_num) elif dest==16: result = hex(decade_num) elif dest==10: result = decade_num print('转换结果为',result) else: print('无此进制转换机制')
tips:选中 tab:整体缩进;shift+tab:整体取消缩进
python中的三元运算符
格式:表达式1 if 条件表达式 else 表达式2
# 需求:输入两个数据 获取其中的最大值 num1 = int(input('请输入第一个数:')) num2 = int(input('请输入第二个数:')) if num1 > num2: max_value = num1 else: max_value = num2 print(max_value) # 用三元运算简化 max_value = num1 if num1 > num2 else num2 print(max_value)
practice # 获取三个数中的最大值 分两步 num3 = int(input('请输入第三个数:')) max_value = num1 if num1 > num2 else num2 max_value = max_value if max_value > num3 else num3 print(max_value) 一步 num1 = int(input('a:')) num2 = int(input('b:')) num3 = int(input('c:')) m_v = num1 if num1 > num2 and num1 > num3 else num2 if num2 > num3 else num3 print(m_v)
隐式布尔转换
隐式布尔转换:把非布尔类型的数据当做布尔类型判定逻辑(数据本身没有变化),这种行为称为隐式布尔转换
ch = input('请输入一个字符:') # ch:'',空容器,False # ch 是什么类型的数据??? 字符串【容器型的 转换规则:非空容器即为True】 if ch: # 隐式布尔转换 print(ch) else: print('没有输入内容')
# 判断一个数是否为偶数 num = int(input('shuru')) if num % 2: # %2为1或0,数值转换为布尔类型 非0即为true print('奇数') else: print('偶数')
#把非布尔类型的数据参与逻辑运算符的运算 print(not 1) # (not 1)= 0,False """ and 执行过程 True and True = True True and False = False False and False = False False and True = False 执行机制是左边表达式成立,结果取决于右边表达式;左边表达式不成立,结果就是左边表达式的值 """ # max_value = num1 if num1 > num2 and num1 > num3 else (num2 if num2 > num3 else num3) # num1 > num2 and num3 能否写成这样????? 不能!!!!!! # 这样写 and 右边的表达式不是布尔值 而是一个非布尔类型的数据 num1 = 17 num2 = 15 num3 = 27 res = num1 > num2 and num1 > num3 print(res) # False """ and 左边的表达式的结果为真,输出右边的结果,(谁决定了整个式子就输出谁) 所以最终的结果 等于 右边表达式的值 """ res1 = num1 > num2 and num3 """ and 左边的表达式的结果为真 所以最终的结果 等于 右边表达式的值 """ print(res1) # 27 max_value = num1 if num1 > num2 and num1 > num3 else (num2 if num2 > num3 else num3) """ 执行机制:左边表达式成立,结果就是左边表达式的值;左边表达式不成立,解决取决于右边表达式的值 """ # 非布尔类型的数据参与逻辑运算的时候 和 布尔类型的数据参与逻辑运算不一样的 # 布尔类型的值只有两个 True或者False 结果 只有两个 True False # 但是非布尔类型的数据 ,因为隐式转换规则 结果又取的是表达式的 这个结果不一定是True或者False res = 1 or 0 print(res) ===> 1,因为结果是true,决定这个结果的是左边的1,所以输出1。
2.6.3循环结构语句
循环:周而复始的做某件事
编程语言中对一直重复做某件事情没有终止的情况下称为死循环,但编程中进制
在编程语言中见到的循环通常是两种情况:
-
明确循环次数【做几次后不做了】
-
明确循环条件,到某一条件停止循环
Python为这两个场景的循环提供了对应的循环机制,分别是
-
for-in循环,应用于明确循环次数的 本质是在遍历容器型数据,【遍历:将容器中的数据从左向右逐个取出】,容器中有几个数据,for-in包含的操作就被被执行几次
语法: for 变量名 in 容器型数据: 重复操作的代码块
解读:重点在于in[进入],进入到容器中获取数据
1. 有数据,获取出来赋值给变量名,然后进行重复的操作,再次执行in 2. 没有数据循环结束
eg: # for-in是来遍历容器型数据 # 现在接触的只有字符串,其中的元素是字符[长度为1的字符串称为字符] for ch in 'hello': print(ch) # h e l l o """ 遍历容器常规的做法: 1. 对容器中的数据进行转换 2. 对容器中的数据进行过滤 """ # 字符串也能用应用算术运算符的加号, 应用在字符串中完成的是拼接 s = 'abc' s1 = 'ABC' res = s + s1 print(res) # abcABC s += s1 print(s) # abcABC
practice: # 将s中的小写英文字母转化成大写,其他不变 news = '' # 需要定义一个新的变量 用来接受最终的变化 for c in s: if 'a' <= c <= 'z': # 对c的值进行判断 是否为小写字母 news += chr(ord(c) - 32) # 变成大写 # 用+=的原因:因为是一个一个拿出来的,所以需要一个一个运算 else: news += c # 后面那个+=:因为等于是赋值,所以需要用+=进行拼接 print(news) # ABCABC
# 将字符串中的数字符号提取出来 s2 = 'good123nice321' new_s = '' # 定义一个新的字符串 设置空字符串 # 遍历 逐个获取 for c1 in s2: # c1是字符串类型 是一个字符 带着'' if '0' <= c1 <= '9': # 判断是否是数字符号 # 比较的时候需要加上引号,因为c1是字符串类型的,不带引号的就是一个可以算术运算的数字 new_s += c1 print(new_s)
# s4 = 'Hello, 大家好,欢迎大家来到Python2304' 提取其中的英文字母与汉字 s4 = 'Hello,大家好,欢迎大家来到Python2304' new1_s = '' for y in s4: if 'a' <= y <= 'z' or 'A' <= y <= 'Z' or '\u4e00' <= y <= '\u9fa5': new1_s += y print(new1_s) # Hello大家好欢迎大家来到Python
统计字符串中字符的个数: # 需要一个计数器 拿一个符号 计数器+1 s4 = 'Hello,大家好,欢迎大家来到Python2304' count = 0 # 遍历 逐个获取 for c2 in s4: count += 1 print(count) # 统计英文字母的个数 letter_count = 0 # 英文字母的计数器 for c3 in s4: if 'a' <= c3 <= 'z' or 'A' <= c3 <= 'Z': letter_count += 1 print('英文字母的个数', letter_count) # 统计英文字母的个数、数字的个数、汉字的个数、其他字符的个数 count = 0 count2 = 0 count3 = 0 count4 = 0 for n in s4: if 'A' <= n <= 'Z' or 'a' <= n <='z': count += 1 elif '0' <= n <= '9': count2 += 1 elif '\u4e00' <= n <= '\u9fa5': count3 += 1 else: count4 += 1 print(count,count2,count3,count4)
-
while循环,应用于明确循环结束挑几件的
语法: while 条件判断: 重复操作的代码块
解读:判断条件是否成立
-
条件成立,执行重复的操作,再次判断条件是否成立。
-
条件不成立,循环结束。
-