python逻辑运算符与流程控制

发布时间 2023-08-28 19:18:13作者: jntmwl

Python的基础逻辑运算

内容概要

  1. 算数运算符
  2. 比较运算符
  3. 赋值运算符
  4. 逻辑运算符
  5. 成员运算符
  6. 身份运算符

流程控制

if else 

算术运算符

算数运算1.png

代码演示
a = 21
b = 10
c = 0

c = a + b
print ("1 - c 的值为:", c)

c = a - b
print ("2 - c 的值为:", c)

c = a * b
print ("3 - c 的值为:", c)

c = a / b
print ("4 - c 的值为:", c)

c = a % b
print ("5 - c 的值为:", c)

# 修改变量 a 、b 、c
a = 2
b = 3
c = a**b
print ("6 - c 的值为:", c)

a = 10
b = 5
c = a//b
print ("7 - c 的值为:", c)

1 - c 的值为: 31
2 - c 的值为: 11
3 - c 的值为: 210
4 - c 的值为: 2.1
5 - c 的值为: 1
6 - c 的值为: 8
7 - c 的值为: 2

比较运算符

比较运算符.png

比较运算符比较数据类型,也比较数据值

赋值运算符

赋值运算符.png

python语法中除了有=号这种简单的赋值运算外,还支持增量赋值、链式赋值、交叉赋值、解压赋值,这些赋值运算符存在的意义都是为了让我们的代码看起来更加精简

name = 'kevin'

3.1 增量赋值
#### 取模赋值运算符
# a = 20
# b = 3
# # a = a % b # a %= b ====> a = a % b
# a %= b # a = a % b
# print(a)

# c = 2
# d = 3
# c **= d # c = c ** d c = 2 ** 3
# print(c)

e = 10
f = 3
# e = e // f

e //= f
print(e)

3.2 链式赋值
如果我们想把同一个值同时赋值给多个变量名
# x = 666
# y = 666
# z = 666

x = y = z = <span class="hljs-number">666</span>
<span class="hljs-built_in">print</span>(x, y, z)

3.3 交叉赋值
3.4 解压赋值(重点)
### 解压赋值
# name1, name2, name3, name4 = names_list
# name1, name2, name3, name4 = ['kevin', 'jerry', 'tony', 'tank']
# name1, name2, name3, name4 = ['kevin', 'jerry', 'tony', 'tank', 'oscar'] # too many values to unpack (expected 4)
# name1, name2, name3, name4 = ['kevin', 'jerry', 'tony'] # not enough values to unpack (expected 4, got 3)
# name1, name2, name3, name4 , name5 = ['kevin', 'jerry', 'tony', 'tank', 'oscar'] # not enough values to unpack (expected 4, got 3)
"""数据量一定要匹配,多一个不行,少一个也不行"""
# print(name1, name2, name3, name4) # kevin jerry tony tank
# print(name1, name2, name3) # kevin jerry tony tank

# name1, name2, name3, name4,name1, name2, name3, name4,name1, name2, name3, name4,name1, name2, name3, name4, = ['kevin', 'jerry', 'tony', 'tank','kevin', 'jerry', 'tony', 'tank','kevin', 'jerry', 'tony', 'tank','kevin', 'jerry', 'tony', 'tank','kevin', 'jerry', 'tony', 'tank']
# name1, *, name4, = ['kevin', 'jerry', 'tony', 'tank','kevin', 'jerry']
# name1, *
, name4, = ['kevin', 'jerry', 'tony', 'tank','kevin', 'jerry', 'a', 'b', 'c']
# name1, *, name4, name5 = ['kevin', 'jerry', 'tony', 'tank','kevin', 'jerry', 'a', 'b', 'c']
# name1, *
, name4, name5, name6 = ['kevin', 'jerry', 'tony', 'tank','kevin', 'jerry', 'a', 'b', 'c']
# name1, name2, *, name4, name5, name6 = ['kevin', 'jerry', 'tony', 'tank','kevin', 'jerry', 'a', 'b', 'c']
# name1, *
, name4, name5, name6 = ['kevin', 'jerry', 'tony', 'tank','kevin', 'jerry', 'a', 'b', 'c']
name1, *a, name5, name6 = ['kevin', 'jerry', 'tony', 'tank','kevin', 'jerry', 'a', 'b', 'c']

"""
a:把列表里面没有变量赋予的值都交给后面的变量命名并且以列表的形式返回
"""

# print(name1, name2, name4, name5,name6) # kevin b c
print(a) # ['tony', 'tank', 'kevin', 'jerry']
print(a[1])

python3.8 海象运算符
介绍:Python 海象运算符是在 PEP 572 中提出,并在 Python3.8 版本并入发布。

海象运算符的英文原名叫 Assignment Expresions ,即 赋值表达式。海象表达式由一个 : 和 一个 = 组成,即::= 。我们一般称作 walrus operator(海象运算符),因为它看起来就是一个海象旋转 90° 而成。
        
        
语法:(variable_name := expression or value)即一个变量名后跟一个表达式或者一个值,这个和赋值运算符 = 类似,可以看作是一种新的赋值运算符。

用法: 用于 if-else 条件表达式一般写法:           a = 15
if a > 10:
    print('hello, walrus operator!')
################

海象运算符:                                                      
    if a := 15 > 10:
    print('hello, walrus operator!')
用于 while 循环:n 次循环的一般写法:           
n = 5
while n:
    print('hello, walrus operator!')
    n -= 1
 ##########################



海象运算符:
n = 5
while (n := n - 1) + 1: 
# 需要加1是因为执行输出前n就减1了
print('hello, walrus operator!')
··························
#实现一个密码输入检验的一般写法:          
while True:
    psw = input("请输入密码:")
    if psw == "123":
        break
###############

海象运算符:                                   while (psw := input("请输入密码:")) != "123":
    continue
...........................
读取一个文件的每一行并输出:                       
fp = open("test.txt", "r")
while True:
    line = fp.readline()
    if not line:
        break
    print(line.strip())
fp.close()
#############
海象运算符:                                                    
fp = open("test.txt", "r")
while line := fp.readline():
    print(line.strip())
 .........................
用于列表推导式:计算元素平方根,并保留平方根大于 5 的值:                                               
nums = [16, 36, 49, 64]
def f(x):
    print('运行了函数f(x)1次。')
    return x ** 0.5
print([f(i) for i in nums if f(i) > 5])
####################3
海象运算符:                                                  
nums = [16, 36, 49, 64]
def f(x):
    print('运行了函数f(x)1次。')
    return x ** 0.5
print([n for i in nums if (n := f(i)) > 5])

逻辑运算符

逻辑运算符.png

关键字: and or not (连接多个值)
and:与---------->and两边的值必须都是True的时候,整体结果才是True
or: 或者---------->or两边的值只要有一个是真,整体结果就是真
not: 非,取反-------->not取反

a=10
b=20
print(a and b)#a 和 b 都为 true a 和 b 有一个不为 true
print(a and b)#a 和 b 都为 true,或其中一个变量为 true
#a 和 b 都不为 true

成员运算符

成员运算符.png

关键字:in(在)  not in(不在)
    eg:
        names_list = ['kevin', 'tony', 'tank', 'jerry']
        # 判断jerry这个人在不在列表中
        print('jerry' in names_list)
    # print('jer1' in 'jerry') # True False
d = {<span class="hljs-string">'username'</span>:<span class="hljs-string">'kevin'</span>, <span class="hljs-string">'age'</span>:<span class="hljs-number">18</span>}

<span class="hljs-string">'''如果是字典,判断的是字典的key值,字典暴露给外界是key'''</span>
<span class="hljs-built_in">print</span>(<span class="hljs-string">'kevin'</span> <span class="hljs-keyword">in</span> d) <span class="hljs-comment"># False</span>
<span class="hljs-built_in">print</span>(<span class="hljs-string">'username'</span> <span class="hljs-keyword">in</span> d) <span class="hljs-comment"># True</span>
<span class="hljs-built_in">print</span>(<span class="hljs-string">'age'</span> <span class="hljs-keyword">in</span> d) 

身份运算符

身份运算符.png

关键字:is(比较的是内存地址,id值) ==(比较值的)
    ############身份运算
    # s1 = 'hello'
    s1 = [1, 2, 3, 4,]
    # s2 = 'hello'
    s2 = [1, 2, 3, 4,]
    print(s1 == s2)
    print(s1 is s2) # False
<span class="hljs-string">"""值相等的,内存地址不一定相等"""</span>
<span class="hljs-string">"""内存地址相等的,值一定相等"""</span>


is和 == 的区别
a=[12,3]
b=a
print(b is a)
True
b=a[:]
print(b is a)
False
print(b == a)
Ture                               

流程控制(if)

1、每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块。
2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。

# 控制事物的执行流程
	执行流程总共有三种:
    	1. 顺序结构
        	# 我们之前写的代码执行顺序就是一种顺序结构,按照顺序一一执行
        2. 分支结构
        	# 就是按照条件的成功与否,决定执行哪个分支.
        3. 循环结构
        	# 重复执行某一个流程
注意事项:
	1. 所有的条件都会转为布尔值进行判断
    2. 在Python中,我们使用缩进来表示代码的从属关系
    	# 一般我们使用四个空格来表示一个缩进
    3. 不是所有的代码都有从属关系
    4. 同属于一个代码块的子代码块缩进量要保持一致
小技巧:如果上面一行代码的结尾是冒号:那么,下一行必缩进

1. 分支结构
关键字:if elif else

# 单分支
"""
语法格式:
if 条件:
条件成立之后要执行的代码块
"""

age = 18 # 如果年龄小于26,称之为是小姐姐

# 双分支
"""
语法格式:
if 条件:
条件成立之后执行的代码块
else:
条件不成立执行的代码块
"""

if age < 26:
print('小姐姐好')
else:
print('不好意思,认错人了')

"""双分支结构必然会走一个分支"""

分支结构里面支持写多个条件
age = 20
height = 165
weight = 100
is_beautiful = False
if age < 26 and height >= 165 and weight <= 100 and is_beautiful:
print('小姐姐好看')
else:
print('......')

# 多分支
"""
语法格式:
if 条件1:
条件1成立之后执行的代码块
elif 条件2:
条件1不成立条件2成立执行的代码块
elif 条件3:
条件1、2不成立,条件3成立执行的代码块
elif 条件4:
条件1、2、3不成立,条件4成立执行的代码块
else:
以上条件都不成立执行的代码块
"""

"""
作业:

猜年龄游戏

while True:
age = 28
guess_age = input('请输入你的年龄:').strip()
if guess_age>'28':
print('猜大了')
elif guess_age<'28':
print('猜小了')
else:
print('猜对了')
break
"""