python基础2 运算符补充与流程控制

219 阅读6分钟

运算符补充

逻辑运算符(且,或,非)

  • and

    • 且(链接的多个条件一假即假,全真即真。)
    • 例:1==1 and 2 > 1
  • or

    • 或(链接的多个条件一真即真。)
    • 例:1==1 or 1 > 2
  • not

    • 非(将条件取反:原对变错,原错变对)
    • 例:not False\ not True
  • 注:三者混合使用是有优先级

    • 括号>not>and>or

成员运算符

  • in(在什么之内)
  • not in(不在什么之内)

练习

  • 判断某一个个体在不在某个群体里面
    • 输入:
# rm = ['john', 'tom', 'luci']
# print('tom')
# print('luci' not in rm)
# print('john' in rm)
# print('aim' in rm)

输出结果: 1655811400443.png

  • 列表在做成员运算的时候最小单位是数据值整体,不能再拆分也不能在合并。
    • 输入:
rm = ['john', 'tom', 'luci']
print('tom')
print('t' not in rm)
print('to' in rm)

输出结果: 1655812006546.png

  • 字符串在做成员运算的时候最小单位是单个字符,也可以增加字符个数。
    • 输入:
sb = 'look look down up'
print('look' in sb)
print('l' in sb)
print('look look down up' in sb)
print(type(sb))

输出结果: image.png

  • 字典做成员运算判断的是k键在不在 输入:
sm = {'name': 'tom', 'age': 21}
print('name' in sm)
print('tom' in sm)
print('age'in sm)
print(21 in sm)
print(type(sm))

输出结果: 1655811623068.png

身份运算符

  • is(判断数据值的内存地址是否一致)
  • == (判断数据值的值是否一致)

练习

输入:

s1 = [1, 2, 3, 4, 5]
s2 = [1, 2, 3, 4, 5]
print(id(s1))
print(id(s2))
print(s1 == s2)
print(s1 is s2)
  • 值相等,内存地址可能不等。
  • 内存地址相等,值一定相等。 输出结果: 1655812703897.png

python内存优化

  • python会针对数据量比较小,且经常使用的数据做内存优化。大部分时候IDE编辑工具也会做更多优化处理。 python:
print(id(l1))  # 140707857893312
print(id(l2))  # 140707857893312

编辑工具:

l1 = 9999999
l2 = 9999999
print(id(l1), id(l2))  # 1271940823728 1271940823728

流程控制理论

  • 概念:事物的执行流程。(三种)

  • 1.顺序结构:从上往下依次执行。 1655817090970.png

  • 2.分支结构:不同条件执行不同代码。 1655817255315.png

  • 3.循环结构:根据条件判断是否一直做某一件事。 1655817379725.png

  • 小知识: 1.python中使用代码的缩进来表示代码的从属关系:缩进的代码是否运行取决于上面没有缩进的父代码(结尾有冒号)。

2.缩进量其实没有要求 只要缩进了即可:但是为了美观 一般推荐使用四个空格。

3.并不是所有的代码都可以拥有子代码:if关键字 else关键字 elif关键字 ( elif else不能单独使用)

4.同属于一个父代码的多行子代码应该保证相同的缩进量:如果代码缩进了,那就必须往上找一个缩进量比它小的代码作为父代码。这个父代码如果可以拥有子代码,那么没有问题,不可以则直接报错。

5.相同缩进量的代码彼此之间没有主次之分 都是按照顺序依次执行。

分支控制

单if分支

  • if 条件:条件成立执行的代码(子代码) 1655818250650.png

注:条件可以是布尔值 也可以是表达式。判断的条件可以是一个 也可以是由逻辑运算符连接的多个。

if...else分支

  • if 条件:条件成立之后执行的子代码
  • else:条件不成立执行的子代码 1655818209266.png

注:判断的条件可以是一个 也可以是由逻辑运算符连接的多个。

# 1.获取用户名和密码
    name = input('name>>>:')
    pwd = input('pwd>>>:')
# 2.判断用户名和密码是否正确
    if name == 'jason' and pwd == 123:  
    # python中不同数据类型之间无法直接做比较
    if name == 'jason' and pwd == '123': 
    # python中不同数据类型之间无法直接做比较
        print('欢迎')
    else:
        print('拜拜')

if...elif...else分支

  • if 条件1:条件1成立时执行的子代码
  • elif 条件2:条件1不成立,条件2成立执行的子代码
  • elif 条件3:条件1,2不成立,条件3成立执行的子代码
  • else:上述条件都不成立执行的子代码。 注:if elif else 三个连着用永远只会走一个分支 注:elif else 不得单独使用,要与if结合 1655817747523.png

if的嵌套使用

  • 1.定义各种条件
gender = 'woman'
age = '18'
values_nature = 'good'
  • 2.条件判断
if gender == 'woman':
    print('性别为女')
    if age < '12' :
        print('小朋友')
    elif age < '18':
        print('小妹妹')
    elif age < '24':
        print('目标群体')
        if values_nature == 'good':
            print('考虑一下')
        else:
            print('你是谁啊')
    elif age < '30':
        print('大姐姐')
    elif age < '36':
        print('姐姐')
    elif age < '54':
        print('阿姨')
    else:
        print('奶奶')
else:
    print('性别为男')

1655818839000.png 输出结果: 1655816130029.png

小作业

  • 小练习
1.女人的年龄>=18并且<22岁并且身高>170并且体重<100并且是漂亮的,那么:表白,否则:叫阿姨好.

输入:

age = 20
high = 172
weight = 90
ym = '漂亮'
if (age >= 18) and (age < 22):
    print('1')
    if high > 170:
        print('2')
        if weight < 100:
            print('3')
            if ym == '漂亮':
                print('表白')
            else:
                print('阿姨好')
        else:
            print('阿姨好')
    else:
        print('阿姨好')
else:
    print('阿姨好')

输出结果: 1655819412873.png

2.根据用户输入内容打印其权限
    '''
    jason --> 超级管理员
    tom  --> 普通管理员
    jack,rain --> 业务主管
    其他 --> 普通用户
    '''

输入:

user_id = input('请输入用户名:')
if user_id == 'jason':
    print('超级管理员')
elif user_id == 'tom':
    print('普通管理员')
elif (user_id == 'jack') or (user_id == 'rain'):
    print('业务主管')
else:
    print('普通用户')

输出结果: 1655807781511.png 1655807829332.png 1655807864351.png 1655807900675.png 1655807937414.png

3.编写用户登录程序
	要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录
  		eg:black_user_list = ['jason','kevin','tony']
	如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义)
   	   eg: oscar 123

输入:

user_id = input('用户名:')
user_key = input('密码:')
black_user_list = ['jason', 'kevin', 'tony']
if user_id in black_user_list:
    print('黑名单用户,无法登录')
elif user_id == 'oscar' and user_key == '123':
    print('登录成功')
else:
    print('没有权限')

输出结果: 黑名单: 1655822630581.png 白名单: 1655822732583.png 没有注册:

1655822820700.png

  • 订正:
1.女人的年龄>=18并且<22岁并且身高>170并且体重<100并且是漂亮的,那么:表白,否则:叫阿姨好
	补充知识
	 print('11' > '22')  # False
    print('33' > '11')  # True
    print('33' > '111')  # True
    字符串的数字比较大小是按照位置一一比较 只要有一个位置上的数字决出了大小那么整体的结果也就确定了
    
    如果名字绑定的值就是布尔值 那么作为条件的时候可以不做任何比较 直接写
	
	 age = 28
    height = 175
    weight = 99
    is_beautiful = True
    if 18 <= age < 22 and height > 170 and weight < 100 and is_beautiful:
        print('加微信吧')
    else:
        print('不好意思 认错人了!')
	
2.根据用户输入内容打印其权限
    '''
    jason --> 超级管理员
    tom  --> 普通管理员
    jack,rain --> 业务主管
    其他 --> 普通用户
    '''
    name == 'jack' or 'rain'  # 错误写法1
    name == ('jack' or 'rain')  # 错误写法2
    
    # 1.获取用户名
    name = input('name>>>:')
    # 2.判断用户身份
    if name == 'jason':
        print('超级管理员')
    elif name == 'tom':
        print('普通管理员')
    elif name == 'jack' or name == 'rain':  # 正确写法
        print('业务主管')
    else:
        print('普通用户')
    
    
3.编写用户登录程序
	要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录
  		eg:black_user_list = ['jason','kevin','tony']
	如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义)
   	   eg: oscar 123
"""编写复杂程序的时候 可以先一条道走到黑 先写正确的逻辑"""
	 # 1.先定义出黑名单用户
    black_user_list = ['jason', 'kevin', 'tony']
    # 2.获取用户的用户名
    username = input('username>>>:')
    # 3.判断用户名是否在黑名单中
    if username not in black_user_list:
        # 4.让用户输入密码
        password = input('password>>>:')
        # 5.判断用户名和密码是否正确
        if username == 'oscar' and password == '123':
            print('欢迎oscar大驾光临')
        else:
            print('用户名或密码错误')
    else:
        print('你永久拉黑了 滚蛋吧')