python中的运算符及控制流程

Python

运算符和表达式

表达式由一个或多个操作数通过操作符组合而成

运算符分类:

img

算术运算符(+、-、*、/、//、%)

img

a = 10
b = 20
print("a+b", a+b)   # a+b 30
print("a-b", a-b)   # a-b -10
print("a*b", a*b)   # a*b 200
print("a/b", a/b)   # a/b 0.5
# // =》取整除,a/b得到的结果进行向下取整
print("a//b", a//b) # a//b 0
# % => 模 取余数:a/b得到的余数
print("a%b", a%b)   # a%b 10

赋值运算符

img

# 赋值运算符
a = 1
a += 1    # a=a+1
print("a += 1", a)  # a += 1 2
a -= 1    # a=a-1
print("a -= 1", a)  # a -= 1 1
# 参数中不能有赋值运算
# print("a -= 1", a-=1) 会报错

比较运算符 => 结果:bool值

img

a = 100
b = 200
print("a>b", a>b)   # a>b False
print("a<b", a<b)   # a<b True
print("a>=b", a>=b) # a>=b False
print("a<=b", a<=b) # a<=b True
print("a==b", a==b) # a==b False
print("a!=b", a!=b) # a!=b True

逻辑运算符 => 结果:bool

img

and

逻辑运算符 => 结果:bool
=> 实际返回:根据运算顺序返回表达式结果
a and b 如果a的bool值为True,且b的bool值也为True, a and b =True
运算顺序:

1、计算a表达式的结果,如果a表达式结果bool为False,直接返回a表达式的结果

print(0 and 10)  # 0
# 因为先计算第一个表达式,所以先输出5,但是第一个表达式的值为None,直接短路不会执行第二个表达式,最终输出的就是第一个表达式的值
print(print("5") and 10)    # 5
                            # None

2、计算a表达式的结果,如果a表达式结果bool为True,计算表达式b的结果并返回

print(10+10 and 10)  # 10
print(10+10 and None)  # False
# 10 => True
# 0 => False
print(10 and 0)  # 0
or

a or b : 如果a或b任意一个表达式bool值为True,表达式bool值结果为True

1.计算a表达式的结果,如果a的bool值为True,直接返回a的值

print(20 or 10)  # 20

2.计算a表达式的结果,如果a表达式结果bool为False,计算b的bool值

print(0 or 10)  # 10
print(None or 10)	# 10
not

not a =>只有两个结果=>True 或 False

print(not 10)   # False
print(not 0)    # True
短路逻辑

表达式从左至右运算,若 or 的左侧逻辑值为 True ,则短路 or 后所有的表达式(不管是 and 还是 or),直接输出 or 左侧表达式 。

表达式从左至右运算,若 and 的左侧逻辑值为 False ,则短路其后所有 and 表达式,直到有 or 出现,输出 and 左侧表达式到 or 的左侧,参与接下来的逻辑运算。

若 or 的左侧为 False ,或者 and 的左侧为 True 则不能使用短路逻辑。

# 从左往右运算,因为3为True,所以or后面的操作就不会进行,结果直接输出3
print(3 or print("5") and not print('abc'))  # 3
# print输出都是None,前面的and运算输出False,这里没有短路,所以继续执行or后面的表达式
print("=============")
print(3 and print("5") or not print('abc'))  # 5
                                             # abc
                                             # True     not print('abc')的返回值是True
# 当and前面的表达式已经是False时,后面的and运算直接短路不执行,再计算or右边的表达式,先输出abc,再返回右边表达式的结果None
print(print("5") and print("3") or print('abc'))    # 5
                                                    # abc
                                                    # None
# print(False or print("5") and not print('abc'))  # 5
                                                   # None
# a and b and c and d
# 从左往右计算,计算表达式的布尔值为True继续向后计算,
# 表达式的布尔值为False直接返回表达式的结果

# a or b or c or d
# 从左往右计算,计算表达式的布尔值为False继续向后计算,
# 表达式的布尔值为True直接返回表达式的结果

# a and b or c
小练习

img

python 支持1<x<10这种表示方法

x = int(input("请输入x的值:"))
print(20<x<30 or x<-100)

y = int(input("请输入y的值:"))
if y % 2 == 0:
    print("y为偶数")
else:
    print("y为奇数")

成员关系运算符

image.png

成员关系运算符 in , not int

是否包含(字符串、[列表、元组、字典] => 容器类型)

mystr = "2022/03/26"
print('2022' in mystr)  # True

对象实例测试运算符

img

is,not is => 判断两个对象是不是同一个对象(同一块内存区域)

实际就是比较id

is =>       id(a) == id(b)

not is =>   id(a) != id(b)

位运算符

img

# & => 按位与 => 同为1结果为1,否则为0
a = 2  # 0b10
b = 3  # 0b11
print(a & b)  # 0b10 =>2

# | => 按位或 => 任意一个为1结果为1,否则为0
a = 4  # 0b100
b = 5  # 0b101
print(a | b)  # 0b101 =>5

# ^ => 按位异或 => 两位相同结果为0,不相同结果为1
a = 4  # 0b100
b = 5  # 0b101
print(a ^ b)  # 0b1 =>1

# ~ 按位取反
a = 1
print(~a)
# 左移运算<< 右移运算 >>
# 将数据变成2进制
# 0b10 << 2  => 0b1000
# 0b1011 >> 2 => 0b10
print(0b1011 >> 2)  # 2
print(0b10)  # 2
小练习

img

a = 3
b = 4
print(a%b+a/b*b==a) # False

str1 = "dadfdfabc"
print('abc' in str1) # True

print(bin(127))  # 0b1111111
print(int(0b11111))  # 31
print(127 >> 2)  # 31

最后一题见短路逻辑

运算符优先级

img

# 指数运算
print(2**10)	# 1024
# 正(+)和负(-)和~
print(-2**10)	# -1024

# 当对于运算优先级不确认,可以使用()优先级提高
print((-4)**2)	# 16
print(-4**2)	# -16

print("5") # 5,值:None => False

程序流程控制

img

img

顺序结构

顺序结构是按照线性顺序自上而下依次执行的一种运行方式

img

import math

# 输入三条边长
a = int(input("请输入边长a:"))
b = int(input("请输入边长b:"))
c = int(input("请输入边长c:"))

# 计算半边长
p = (a+b+c)/2

# 计算面积
# sqrt函数 => 开平方
s = math.sqrt(p*(p-a)*(p-b)*(p-c))
print("三角形的面积是:", s)

选择语句

img

if…else

import math

# 输入三条边长
a = int(input("请输入边长a:"))
b = int(input("请输入边长b:"))
c = int(input("请输入边长c:"))

# 条件语句
if a>0 and b>0 and c>0 :
    # 所有边长都大于0才可以计算
    # 判断两边之和是否大于第三边
    if a+b>c and a+c>b and b+c>a:
        # 计算半边长
        p = (a+b+c)/2
        # 计算面积
        # sqrt 开平方
        s = math.sqrt(p*(p-a)*(p-b)*(p-c))
        print("三角形的面积为", s)
    else:
        print("两边之和要大于第三边")
else:
    # 条件不成立,执行下面代码
    print("输入边长不能为0")

if…elif…else…

img

if a<=0 or b<=0 or c<=0 :
    print("输入的边长必须大于0")
elif a+b<=c or b+c<=a or a+c<=b :
    print("两边之和不大于第三边")
else:
    # 计算半边长
    p = (a + b + c) / 2
    # 计算面积
    # sqrt 开平方
    s = math.sqrt(p * (p - a) * (p - b) * (p - c))
    print("三角形的面积为", s)

输入一个学生的成绩,判断“合格、不合格"

score = int(input("请输入成绩"))
if score >= 60:
    result = "合格"
else:
    result = "不合格"
print(result)

# 三元运算  表达式简单时可用
result = "合格" if score >= 60 else "不合格"
print(result)

小练习

img

user = input("请输入用户名:")
passwd = getpass.getpass("请输入密码:")
tip = "登录成功" if user == "root" and passwd == "123456" else "登录失败"
print(tip)

循环语句

for循环

img

# for => 从一个可迭代对象iterable中一次去除所有的元素
# item =》临时变量
# 可迭代对象 =》 字符串,列表,元组
#                 "abcdsefes"
#                  [1,2,3,"abc"]
#                  (1,2,3,4)
# for item in 可迭代对象 :
#     循环体
# else: 可选分支(只在最后执行一次)

判断字符串大小写

mystr = input("请输入一个字符串:")
mystr_p = ""
for item in mystr:
    if item.isupper():
        mystr_p = mystr_p + "1"
    else:
        mystr_p = mystr_p + "0"
print(mystr_p)

用户登录验证

# range(3) => 0,1,2 =>控制循环次数
for i in range(3):
    uname = input("请输入用户名:")
    passwd = input("请输入密码:")
    if uname == "root" and passwd == "123456":
        print("登陆成功")
        break
    else:
        print("登录失败")
练习

img

num = 123
print("您一共有三次机会可以猜数字是多少")
for i in range(3):
    user_num = input("猜一猜数字是多少:")
    # 判断用户输入的是否是数字
    if user_num.isdigit():
        user_num = int(user_num)
        # 判断输入的数字是否正确
        if user_num > num:
            print("猜的数字太大了")
        elif user_num < num:
            print("猜的数字太小了")
        else:
            print(f"恭喜您,您猜了{i+1}次,猜对了!")
            break
    else:
        print("输入的不是数字,请重新输入")
else:
    #三次都没猜对,退出循环
    print("您猜了3次,猜错了,欢迎下次尝试!")
while循环

img

img

# i => 计数
i = 0
while i < 3:
    i += 1
    username = input("请输入用户名:")
    password = input("请输入密码:")
    if username == "root" and password == "123456":
        print("登录成功")
        break
    else:
        print("登录失败,请再试一次")
else:
    print("登录失败,请明天再试")

img

# 存入的本金
money = 10000
# 年利率
lr = 0.05
i = 0
while money < 20000:
    # 存入的时间
    i += 1
    # 每年的本金+利息
    money = money + money * lr
    print(f"第{i}的金额变为{money}")
else:
    print(f"第{i}年时金额达到20000")

)
password = input(“请输入密码:”)
if username == “root” and password == “123456”:
print(“登录成功”)
break
else:
print(“登录失败,请再试一次”)
else:
print(“登录失败,请明天再试”)


[外链图片转存中...(img-RjyLikUP-1648888689366)]

```python
# 存入的本金
money = 10000
# 年利率
lr = 0.05
i = 0
while money < 20000:
    # 存入的时间
    i += 1
    # 每年的本金+利息
    money = money + money * lr
    print(f"第{i}的金额变为{money}")
else:
    print(f"第{i}年时金额达到20000")

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值