第五章:运算符与流程控制

运算符

基本运算符

数学运算符

# + - * / % // **
# 简化写法
n = 10
n += 1  # n = n + 1
n -= 1  # n = n - 1
n *= 1  # n = n * 1
n /= 1  # n = n / 1
n %= 1  # n = n % 1     取余
n //= 1  # n = n // 1   取整除,返回商的整数部分
n **= 1  # n = n ** 1   次幂

比较运算符

< 
> 
<= 
>= 
==	(等于号) 
!=	(不等于)

常用赋值符

# 1.链式赋值
# 写法一
# name = 'jason'
# name1 = name
# name2 = name
# 写法二
name = name1 = name2 = 'jason' # 链式赋值
print(name, name1, name2)  # jason jason jason

# 2.交叉赋值
m = 100
n = 999
'''让m和n互相转换绑定的值, 奇葩式写法'''
m = n
n = m
print(m, n)  # 999 999
'''方式1:采用中间变量, 冒泡排序中'''
temp = m
m = n
n = temp
print(m, n)  # 999 100
'''方式2:交叉赋值语法'''
m, n = n, m
print(m, n)  # 999 100

# 3.解压赋值
name_list = ['jason', 'kevin', 'tony', 'oscar']
'''low的写法'''
# name1 = name_list[0]
# name2 = name_list[1]
# name3 = name_list[2]
# name4 = name_list[3]

name1, name2, name3, name4 = name_list  # 解压赋值语法
print(name1, name2, name3, name4)  # jason kevin tony oscar

'''解压赋值在使用的时候 正常情况下需要保证左边的变量名与右边的数据值个数一致'''
# a, b = name_list  # 变量名少了不行
# a, b, c, d, e = name_list  # 变量名多了也不行

'''当需要解压的数据个数特别多 并且我们只需要使用其中的几个 那么可以打破上述的规则'''
a, *b = name_list  # *会自动接收多余的数据 组织成列表赋值给后面的变量名
print(a)  # jason
print(b)  # ['kevin', 'tony', 'oscar']
a, c, *b = name_list
print(a)
print(c)
print(b)  # ['tony', 'oscar']
a, *b, c = name_list
print(a)  # jason
print(b)  # ['kevin', 'tony']
print(c)  # oscar

'''当数据值不准备使用的时候 可以使用下划线作为变量名绑定'''
a, *_, c = name_list
print(a)    # jason
print(*_)   # kevin tony
print(c)    # oscar

逻辑运算符

主要配合条件一起使用:and、or、not

优先级:()> not > and > or

# and 与
# and连接的多个条件必须全部成立,结果才成立
# eg: 你去相亲提要求: 身高必须是160以上、长相必须好看、家里必须有钱、性格必须温柔
# 身高 and 长相 and 有钱 and 温柔

# 1 > 2 and 4 < 8 and 10 < 1 and 1 == 2
# 如果条件中全部由 and 组成那么判断起来非常的简单
# 只要发现一个不成立,结果就不成立
print(1 < 10 and 666)  # 666  成立
print(1 < 10 and 2 < 8)  # True  成立
print(111 and 222)  # 222  成立
# 如果需要你准确的说出具体的结果值,那么需要按照下列方式
# 如果 and 左边的条件是成立的,那么就完全取决于右边的条件,
# 右边如果直接是数据值,那么结果就是该数据值
# 如果是含有表达式,则为布尔值

# or 或
# or连接的多个条件只要有一个成立,结果就成立
# eg: 你去相亲提要求: 要么家里有钱,或者家里有势, 或者长得完美,或者对你死心塌地
# 有钱 or 有势 or 好看 or 专一
# 1 > 2 or 4 < 8 or 10 < 1 or 1 == 2

# 如果条件中全部由or组成那么判断起来非常的简单
# 只要发现一个成立,结果就成立
print(1 < 10 or 666)  # True
print(666 or 1 > 10)  # 666
print(0 or False)  # False
print(0 or 111)  # 111

# not 非
# 取反,类似于说反话

注意:可以使用 () 进行组合使用,改变优先级
如:(3>4 and 4>3) or ((1==3 and 'x' == 'x') or 3 >3)

成员运算符

判断个体在不在群体内:in、not in

name_list = ['jason', 'kevin', 'oscar', 'jerry']
print('tony' in name_list)  # False
print('tony' not in name_list)  # True
print('j' in name_list)  # False 列表最小单位是数据值  不能再细分

s1 = 'hello world'
print('d' in s1)  # 字符串最小单位是单个单个的字符

d1 = {
      'username': 'jason',
      'pwd': 123
}
print('jason' in d1)  # False 字典成员运算只有键参与
print('username' in d1)  # True      'username' 'pwd'

身份运算符

值相同 内存地址可能不同,内存地址相同 值肯定相同,不同的环境下可能优化的程度不一样

id()  返回一串数字 该数字可以看成是内存地址
is    判断内存地址是否相同
==     判断数据值是否相同
l1 = [11, 22, 33, 44, 55, 66, 77, 88]
l2 = [11, 22, 33, 44, 55, 66, 77, 88]
print(l1 == l2)  # True
print(id(l1))   # 22287464
print(id(l2))   # 22380992
print(l1 is l2)  # False

# 小整数池
i1 = 11
i2 = 11
print(i1 is i2) # True

流程控制

流程控制理论

控制事物的执行流程

事物执行流程总共可以分为三种

  1. 顺序结构

    从上往下依次执行 我们之前所编写的代码都属于该结构

  2. 分支结构

    事物的执行会根据条件的不同做出不同的执行策略

  3. 循环结构

    事物的执行会根据某个条件出现重复

在代码的世界里,很多时候可能会出现三者混合

流程控制前置知识

  1. python 中使用代码的缩进来表示代码的从属关系
    从属关系:缩进的代码 (子代码) 是否执行取决于上面没有缩进的
  2. 并不是所有的代码都可以拥有缩进的代码(子代码)
    if关键字
  3. 如果有多行子代码属于同一个父代码,那么这些子代码需要保证相同的缩进量
  4. python 中针对缩进量没有具体的要求,但是推荐使用四个空格 (windows中tab键)
  5. 当某一行代码需要编写子代码的时候,那么这一行代码的结尾肯定需要冒号
  6. 相同缩进量的代码彼此之间平起平坐,按照顺序结构依次执行

分支结构

1.单if分支结构
	if 条件:
		条件成立之后才会执行的代码快
	ps:单if可以借助于流程图理解
 	 username = input('username>>>:')
	 if username == 'jason':
	     print('老师好')

2.if...else...分支结构
	if 条件:
     	条件成立之后执行的子代码
	else:
      	条件不成立执行的子代码
 	 username = input('username>>>:')
    if username == 'jason':
        print('老师好')
    else:
        print('去你妹的')

3.if...elif...else分支结构
	if 条件1:
       条件1成立之后执行的子代码
 	elif 条件2:
       条件1不成立 条件2成立执行的子代码
  	elif 条件3:
       条件1和2都不成立 条件3成立执行的子代码
   	else:
       上述条件都不成立 执行的子代码
 	ps:中间的elif可以写多个、上述子代码永远只会走一个
 	score = input('请输入学生成绩>>>:')
    score = int(score)  # 将字符串的整数转换成整型的整数
    if score >= 90:
        print('优秀')
    elif score >= 80:
        print('良好')
    elif score >= 70:
        print('一般')
    elif score >= 60:
        print('及格')
    else:
        print('挂科 交钱重修')
 
4.if的嵌套使用(有点难)
	age = 28
    height = 170
    weight = 110
    is_beautiful = True
    is_success = False
    username = 'tony'
    if username == 'tony':
        print('tony发现目标')
        if age < 30 and height > 160 and weight < 150 and is_beautiful:
            print('大妹纸 手机掏出来 让我加微信')
            if is_success:
                print('吃饭 看电影 天黑了...')
            else:
                print('去你妹的 流氓!!!')
        else:
            print('不好意思 认错人了')
    else:
        print('不是tony做不出来这件事')

循环结构

while 循环

让一些代码反复的执行

while 条件:	
	条件成立之后执行的子代码(循环体代码)
1.先判断条件是否成立
2.如果成立则执行循环体代码
3.循环体代码执行完毕后再次回到条件判断处 判断条件是否成立
4.如果成立,则继续执行循环体代码
5.按照上述规律依次执行,直到条件不成立才会结束循环体代码的执行

# count = 1
# while count < 5:
#     print('hello world')
#     count += 1  # count = count + 1
# print('想不想干饭?')

break  # 强行结束循环体
	while 循环体代码一旦执行到break会直接结束循环
continue  # 直接跳到条件判断处
	while 循环体代码一旦执行到continue会结束本次循环 开始下一次循环
    
while 条件:
    循环体代码
else:
    循环体代码没有被强制结束的情况下 执行完毕就会执行else子代码
1.死循环
	真正的死循环是一旦执行 CPU 功耗会急速上升,直到系统采取紧急措施。
    尽量不要让 CPU 长时间不间断运算。
        
2.嵌套及全局标志位
	强调: 一个 break 只能结束它所在的那一层循环
 	强调: 有几个 while 的嵌套,想一次性结束就应该写几个 break
  	强调: 如果不想反复写 break 可以使用全局标志位
 	is_flag = True
   	while is_flag:
        username = input('username>>>:')
        password = input('password>>>:')
        if username == 'jason' and password == '123':
            while is_flag:
                cmd = input('请输入您的指令>>>:')
                if cmd == 'q':
                    is_flag = False
                print('正在执行您的指令:%s' % cmd)
        else:
            print('用户名或密码错误')

for 循环

for 循环能够做到的事情 while 都可以做到,只不过 for 循环在一些场景下使用更简单。
主要场景为:循环获取存储多个数据的数据内部数据值

实际案例:
    name_list = ['jason', 'kevin', 'tony', 'oscar']  # 遍历
    # 循环打印出列表中每一个数据值(while 索引取值>>>:超出范围会报错)
    # count = 0
    # while count < 4:
    #     print(name_list[count])
    #     count += 1
    # for循环
    for i in name_list:
        print(i)
for循环语法结构
	for 变量名 in 待遍历的数据:
 		  for循环体代码
            
for循环特点
	1.擅长遍历取值
 	2.不需要结束条件 自动结束(遍历完)
    
for循环主要遍历的数据类型有(常见有 字符串、列表、元组、字典、集合)
	info = 'hello world'
    for i in info:
        print(i)  # 单个单个字符
   	
    d = {'username': 'jason', 'password': 123}
    for i in d:
        print(i)  # 只有键参与遍历

for 变量名 in 待遍历的数据:
    for循环体代码
else:
    for循环体代码没有被 break 强制结束的情况下运行完毕之后 运行

for循环语法结构中的变量名如何命名

1. 见名知意
2. 如果遍历出来的数据值没有具体的含义 可以使用常用的,如:i j k item v

for 循环体代码中如果执行到 break 也会直接结束整个 for 循环
for 循环体代码中如果执行到 continue 也会结束当前循环直接开始下一次循环

作业

题目

1.根据用户输入内容打印其权限
    '''
    jason --> 超级管理员
    tom  --> 普通管理员
    jack,rain --> 业务主管
    其他 --> 普通用户
    '''
2.编写用户登录程序
 要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录
    eg:black_user_list = ['jason','kevin','tony']
 如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义)
    eg: oscar 123
3.编写用户登录程序
 用户如果登录失败 则只能尝试三次
 用户如果登录成功 则直接结束程序
4.猜年龄的游戏
 假设用户的真实年龄是18 编写一个猜年龄的游戏 获取用户猜测的年龄
 基本要求:可以无限制猜测 每次猜错给出提示(猜大了 猜小了) 猜对则结束程序
 拔高练习:每次猜测只有三次机会 一旦用完则提示用户是否继续尝试 用户通过输入n或者y来表示是否继续尝试 如果是y则继续给用户三次猜测机会 否则结束程序

解答

1.根据用户输入内容打印其权限
print('请输入用户名')
while 1:
    name = input('用户名:')
    if name == 'jason':
        print('超级管理员')
    elif name == 'tom':
        print('普通管理员')
    elif name == 'jack' or name == 'rain':
        print('业务主管')
    else:
        print('普通用户')
    exit = input('如果推出清楚 quit >>>')
    if exit == 'quit':
        print('欢迎下次再来')
        break
第 2 3 题:编写用户登录程序
black_user_list = ['jason', 'kevin', 'tony']
user_dit = {'tom':'132', 'ysg':'12345'}
print('请输入用户名')
while 1:
    name = input('用户名:')
    if name in black_user_list:
        print('请联系管理员,拒绝登录')
    elif name in user_dit.keys():
        count = 0
        exit = False
        while count < 3:
            pwad = input('输入用户密码:')
            if pwad == user_dit[name]:
                print('用户登录成功')
                exit = True
                break
            else:
                count += 1
                print('用户密码错误')
        if exit:
            break
        else:
            print('密码输入错误三次,请重新登录')
    elif name not in black_user_list and name not in user_dit.keys():
        print('用户未注册')
    exit = input('如果推出清楚 quit >>>')
    if exit == 'quit':
        print('欢迎下次再来')
        break
4.猜年龄的游戏
print('欢迎来到猜数字游戏')
print('目标数字已生成')
num = 18
count = 0
exit = False
while 1:
    while count < 3:
        count += 1
        n = int(input('请输入数字>>>'))
        if n < 18:
            print('猜小了')
        elif n > 18:
            print('猜大了')
        elif n == 18:
            print('恭喜,才对了')
            exit = True
            break
    if exit:
        break
    out = input('是否再次尝试,获取三次机会(n/y)')
    if out == 'y':
        count = 0
        print('再次开始')
    else:
        print('次数用尽,游戏结束')
        break
posted @ 2022-10-05 20:24  亦双弓  阅读(5)  评论(0)    收藏  举报