今日学习概要
- 运算符补充
- 流程控制
今日学习内容
-
逻辑运算符
名称 运算符 基本使用 说明 与 and a and b 只有a和b的布尔值都为True时输出True,否则为False 或 or a or b 只有a和b的布尔值都为False时输出False,否则为True 非 not not a 如果a的布尔值为True输出False,否则输出True
- and运算符是从前往后判断的,只要有一个结果为False,程序就不会往后继续执行了
test = 1 == 1 and 3 > 9 and num
print(test) # False,程序不会报错
- 同理or运算符也是只要有一个结果为True,程序也不会继续往后执行了
test = 1 == 1 or 3 > 9 or num
print(test) # True
- 如果需要三个混合使用的话,需要加上小括号来区分优先级
运算符 | 基本使用 | 说明 |
---|---|---|
in | 1 in [1, 2, 3] | 判断1是否在列表之中,如果在返回True |
not in | 1 in [1, 2, 3] | 判断1是否不在列表中,如果在返回False |
- 用列表做成员判断时,列表中单个数据值就是最小单位,不能够在拆分
list_1 = ['beijing', 'shanghai', 'guangzhou']
print('beijing' in list_1) # True
print('shanghai' in list_1) # True
print('guang' in list_1) # False
- 字符串的最小单位就是单个字符,所以可以用一个字符,也可以使用多个字符(空格也算一个字符)
str_1 = 'beijing shanghai'
print('s' in str_1) # True
print('gs' in str_1) # False
print('g s' in str_1) # True
- 字典做成员运算的时候只能判断它的键(k),值(v)不参与运算
dict_1 = {'name': '张三', 'age': 22}
print('name' in dict_1) # True
print(22 in dict_1) # False
print('张三' in dict_1) # False
运算符 | 基本使用 | 说明 |
---|---|---|
is | a is b | 比较a与b的数据值在内存空间的地址,相同为True |
is not | a is not b | 比较a与b的数据值在内存空间的地址,相同为False |
- is 和比较运算符不同,比较运算符判断的只是数据值是否相同,而is判断内存地址是否一致,数据值相同内存地址可能不同,但内存地址相同数据值肯定相同
l1 = [111, 222, 333]
l2 = [111, 222, 333]
print(l1 == l2) # True
print(l1 is l2) # False
print(id(l1)) # 1976933396864
print(id(l2)) # 1976933242752
- python对于小的数据有一个小数据池的内存优化机制,既把相同数据放在同一个内存空间
num1 = 20
num2 = 20
print(id(num1)) # 2561982884752
print(id(num2)) # 2561982884752
流程控制控制的是事物的执行流程,事物的执行流程共三种:
- 顺序结构:从上往下依次执行,我们平常写的代码都是顺序结构
- 分支结构:根据判断的结果不同而执行不同的代码
- 循环结构 :循环执行一段代码直到某个条件达成
- 在python中写流程控制需要使用到关键字 if
-
单if分支
if condition: # if后加上判断条件,然后使用冒号结束判断语句 pass # pass是占位、跳过的意思,这里代表条件成立后想要执行的代码
在python中使用缩进来表示代码的从属关系,缩进前的叫做父代码,缩进后的叫做子代码,子代码能不能执行取决于父代码
多行子代码需要保证在同一个缩进下
缩进的数量并没有要求,不过一般建议使用四个空格既一个Tab
判断的条件可以是一个,也可以是逻辑运算符链接起来的多个条件
-
if…else分支
if condition: pass # if条件成立执行的代码 else: pass # if条件不成立执行的代码
-
if…elif…else
这里可以使用多个elifif condition1: pass # 条件1成立执行的代码 elif condition2: pass # 条件1不成立,条件2成立执行的代码 elif condition3: pass # 条件1、2都不成立,条件3成立执行的代码 else: pass # 上述条件都不成立执行的代码
只有上一个条件判断为False才会判断下一个条件
if elif else 它们之中只会走一条分支,结束之后又回到主程序
elif 和 else 不能单独存在,必须要有if存在
-
if 的嵌套使用
if condition1: # 第一次判断 if condition2: # 第一次判断为True后才进行第二次判断 print('两次都成功了') # 两次条件都为True才执行这一句 else: print('第二次失败了') else: print('第一次就失败了')
-
作业
# 1.女人的年龄>=18并且<22岁并且身高>170并且体重<100并且是漂亮的,那么:表白,否则:叫阿姨好
age = int(input('请输入年龄:'))
height = float(input('请输入身高(CM):'))
weight = float(input('请输入体重(KG):'))
looks = int(input('颜值在线请扣1:'))
if 22 > age >= 18 and height > 170 and weight < 50 and looks == 1:
print('表白')
else:
print('阿姨好')
# 2.根据用户输入内容打印其权限
"""
jason --> 超级管理员
tom --> 普通管理员
jack,rain --> 业务主管
其他 --> 普通用户
"""
user = input('请输入您的用户名:')
if user == 'jason':
print('超极管理员')
elif user == 'tom':
print('普通管理员')
elif user == 'jack' or user == 'rain':
print('业务主管')
else:
print('其他用户')
# 3.编写用户登录程序
# 要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录
# eg:black_user_list = ['jason','kevin','tony']
# 如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义)
# eg: oscar 123
black_user_list = ['jason', 'kevin', 'tony']
white_user_dict = {'tom': 123, 'bruce': 321, 'duke': 666}
user = input('请输入用户名:')
if user not in black_user_list:
password = int(input('请输入密码:'))
if password == white_user_dict[user]:
print('登录成功')
else:
print('密码错误')
else:
print('拒绝访问')