day03-python运算符的使用

news2025/1/18 9:01:34

常用运算符

算术运算符

运算符说明实例结果
+1+12
-1-10
*1*33
/除法(和数学中的规则一样,但是结果为浮点数)4/22
//整除(只保留商的整数部分)7 // 23
%取余,求模,即返回除法的余数7 % 21
**幂运算/次方运算,即返回 x 的 y 次方2 ** 416,即 24
var1 = 7
var2 = 4

# +
res = var1 + var2
print(res)

# -
res = var1 -var2
print(res)

# *
res = var1 * var2
print(res)

# / (结果是一个小数)
res = var1 / var2
res = 8 / 8
print(res)

# // (取整数) 两个数在进行地板除的时候,有一个数是小数,就在最后的结果上加.0
res = var1 // var2
res = 8 // 8
res = 28.7 // 5
print(res)
res = 28 // 5.3
print(res)

# %
res = var1 % var2
res = 99 % 7
# -1 + 7 = 6 (余数)
res = -99 % 7 
# 1 + (-7) = -6 (余数)
res = 99 % -7
print(res)

# **   var1 * var1 * var1  7*7*7  **是所有运算符 优先级最高的一个
res = var1 ** 3
print(res)

课堂代码

# a = 4
# b = 7
#
# # 加法
# c = a+b
# print(c, type(c))
#
# # 乘法
# c = a * b
# print(c)
#
# # 除法
# # / 运算结果是浮点数
# c = b / a
# print(c) # 1.75
#
# c = 10 / 2
# print(c) # 5.0

# # 整除
# # c = 10 // 2
# # print(c, type(c))  # 5 <class 'int'>
#
# b = 10 / 3
# print(b) # 3.3333333333333335
#
# c = 10 // 3
# print(c, type(c))  # 3 <class 'int'>

"""在计算机中,因为有存储上限,所以所有的浮点数运算,都是一种近似值的运算,得到结果都是近似值"""
"""因为计算中CPU采用的是二进制,所以实际上数值在内部运算过程中,都会被转换成二进制,才进行运算"""
# ret = 7.1+0.8
# print(ret)  # 7.8999999999999995
#
# # 解决上面的隐患,所以一般要保留精度
# print("%.2f" % ret)  # 7.90


# 求余,所谓的余数就是整除运算过程中没有除开的剩余数值
# a = 10 % 3
# print(a)  # 1
#
# a = 10 % 5
# print(a)  # 0 余数为0,表示刚好整除

# a = -10 % 4
# print(a)  # 2
#
# a = -10 % -4
# print(a) # -2
#
# a = 10 % -4
# print(a) # -2


# ** 幂运算
# print(3**2) # 9
# print(3**3) # 27

# 水仙花数
print(1**1)
print(2**2)
print(3**3)
print(4**4)

赋值运算符

所谓赋值,就是代表的意思。让一个变量代表数据在后面代码中进行使用。

运算符说 明用法举例等价形式
=最基本的赋值运算x = yx = y
+=加赋值x += yx = x + y
-=减赋值x -= yx = x - y
*=乘赋值x *= yx = x * y
/=除赋值x /= yx = x / y
%=取余数赋值x %= yx = x % y
**=幂赋值x **= yx = x ** y
//=取整数赋值x //= yx = x // y
&=按位与赋值x &= yx = x & y
|=按位或赋值x |= yx = x | y
^=按位异或赋值x ^= yx = x ^ y
«=左移赋值x «= yx = x « y,这里的 y 指的是左移的位数
»=右移赋值x »= yx = x » y,这里的 y 指的是右移的位数
# = 所有运算符当中 等号的优先级最低
var1 = 9
var2 = 5
res = var1
# print(res)

# +=
# var1 += var2 
'''var1 = var1 + var2'''
# print(var1)

# -=
# var1 -= var2
'''var1 = var1 - var2'''
# print(var1)

# *=
# var1 *= var2
'''var1 = var1 * var2'''
# print(var1)

# /=
# var1 /= var2
'''var1 = var1 / var2'''
# print(var1)

# //=
# var1 //= var2
'''var1 = var1 // var2'''
# print(var1)

# %=
# var1 %= var2
'''var1 = var1 % var2'''
# print(var1)

# **=
var1 **= var2
'''var1 = var1 ** var2'''
print(var1)

比较运算符

比较两边的数值,结果是布尔值。

比较运算符说明
>大于,如果>前面的值大于后面的值,则返回 True,否则返回 False。
<小于,如果<前面的值小于后面的值,则返回 True,否则返回 False。
==等于,如果==两边的值相等,则返回 True,否则返回 False。
>=大于等于(等价于数学中的 ≥),如果>=前面的值大于或者等于后面的值,则返回 True,否则返回 False。
<=小于等于(等价于数学中的 ≤),如果<=前面的值小于或者等于后面的值,则返回 True,否则返回 False。
!=不等于(等价于数学中的 ≠),如果!=两边的值不相等,则返回 True,否则返回 False。
# > 
var1 = 15
var2 = 18
res = var1 > var2
print(res)
# <
res = var1 < var2
print(res)
# >=  只要满足一个条件即为真
res = var1 >= 15
print(res)
# <=
res = var1 <= 15
print(res)
# ==
res = var1 == var2
print(res)

# !=
res = var1 != var2
print(res)

成员运算符

仅针对与容器类型,从这点上来说,str也可以算是一种容器类型。

成员运算符说明
in判断一个值是否作为指定容器的成员存在,如果是则返回 True,否则返回 False。
not in判断一个值是否不在指定容器中作为成员,如果不在则返回 True,否则返回 False。
strvar = "无论是缓存机制还是小数据池的驻留机制, 都是为了节省内存空间, 提升代码效率"
res = "缓存机制" in strvar
res = "驻留机制" not in strvar
res = "节省内存" in strvar
print(res)


# list tuple set
listvar = ["xiaoming","xiaobai","xiaohei"]
res = "xiaobai" in listvar
print(res)

tuplevar = "xiaoA","xiaoW","xiaoK","xiaoF"
res = "xiaoA" not in tuplevar
print(res)

setvar = {'xiaohong','xiaohui'}
res =  "xiaohui" in  setvar
print(res)

# dict  注意 : 判断的是键 不是值
dictvar = {"zxy":"张学友","cyx":"陈奕迅","ldh":"刘德华"}
res = "刘德华" in dictvar
res = "zxy" not in dictvar
print(res)

身份运算符

仅针对变量的内存地址。

成员运算符说明
is判断两个变量所引用的内存空间是否相同,如果相同则返回 True,否则返回 False。
is not判断两个变量所引用的内存空间是否不相同,如果不相同则返回 True,否则返回 False。
var1 = 56
var2 = 56
res = var1 == var2  # (判断两个值是否相等)
res = var1 is var2  # (判断两个值得地址是否相等)
"""
# Number
# int -5 ~ 正无穷
var1 = 56
var2 = 56
res = var1 is var2
print(res)

# float 非负数
var1 = -99
var2 = -99
print(var1 is not var2)

# bool 
var1 = True
var2 = False
print(var1 is var2)

# 容器类型数据  () 相同的字符串 剩下所有的容器类型数据地址都不一样
var1 = ()
var2 = ()
print(var1 is  var2)
var1 = "机"
var2 = "机"
print(var1 is not var2)

逻辑运算符

逻辑运算符含义基本格式说明
and逻辑与运算a and b当 a 和 b 两个表达式都为真时,a and b 的结果才为真,否则为假。
or逻辑或运算a or b当 a 和 b 两个表达式都为假时,a or b 的结果才是假,否则为真。
not逻辑非运算not a如果 a 为真,那么 not a 的结果为假;如果 a 为假,那么 not a 为真。相当于对 a 取反。
# (1)and 逻辑与
'''全真则真,一假则假'''
res = True and True 
res = False and True
res = False and False
res = True and False
print(res)

# (2)or 逻辑或
'''全假则假,一真则真'''
res = True or True
res = True or False
res = False or True
res = False or False
print(res)

# (3)not 逻辑非  相当于取反
res = not True
res = not False
print(res)

值得注意的是,与其他语言一样,python的逻辑运算符也会有短路现象的出现。

False and  print(123) #逻辑短路
True or print(456)  #逻辑短路
True and print(789)

print(2 and 1)
print(0 and 1)
print(0 or 1)
print(3 or 5)

位运算符

位(bit),就是位模式,实际就是计算机中的二进制运算。

位(bit):计算机中,采用二进制来进行数据存储的,那么1个二进制数字就是1位(1bit),1byte = 8位

1个字节:0000 0000

2个字节:0000 0000 0000 0000

其中最左边的第一个位置就是当前二进制数值的正/负数符号

数字2的二进制表示:0000 0010

数字-1的二进制表示:1000 0001

数字1的二进制表示:0000 0001

因此,一个字节可以保存的有符号的数字:-127~127

原码

正负符号+二进制数值

2的原码:0000 0010[原]

-1的原码:1000 0001[原]

1的原码:0000 0001[原]

+0的源码:0000 0000[原]

-0的源码:1000 0000[原]

反码

反码是计算机中用于转换原码到补码的中间人(工具人),反码是经过原码进行取反的。

正数的反码和原码是一样。

负数的反码 = 原码取反,正负符号不变

2的反码:0000 0010[反]

1的反码:0000 0001[反]

-1的反码:1111 1110[反]

+0的反码:0000 0000[反]

-0的反码:1111 1111[反]

补码

我们平时看到的二进制基本都是原码,而计算机中真正存储的补码。

正数的补码:补码=反码=补码

负数的补码:反码+1

2的补码:0000 0010[补]

1的补码:0000 0001[补]

-1的补码:1111 1111[补]

0的补码:0000 0000[补]

位运算符说明
&按位与,参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
|按位或,只要对应的二个二进位有一个为1时,结果位就为1。
^按位异或,当两对应的二进位相异时,结果为1
~按位取反:对数据的补码每个二进制位取反,即把1变为0,把0变为1 。
<<左移,运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。
>>右移,把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数
# 按位与 &
var1 = 19
var2 = 15
res = var1 & var2
print(res)
"""
    000000010011
    000000001111
    000000000011
"""
# 按位或 |
res = var1 | var2
print(res)
'''
    000000010011
    000000001111
    000000011111
'''

# 按位异或 ^ "如果两者不相同,返回真,两者相同返回假
res = var1 ^ var2
print(res)
'''
    000000010011
    000000001111  
    000000011100
'''

# <<  相当于 5 乘以 2的2次幂
res = 5 << 2
res = 4 << 3
print(res) # 20 
"""
    000000101
    000010100
"""

# >>  相当于 5 除以 2的1次幂
res = 5 >> 1
print(res)
"""
    0000101
    0000010
"""

# ~ 按位非 (针对于补码来进行操作 ,连符号位都要改变) 公式 -(n+1)
res = ~19
print(res)
"""
    000000000010011 (补码)
    111111111101100 (按位非)

    111111111101100  (给补码求原码)
    100000000010011  (反码)
    100000000010100  (原码)  => -20
"""

res = ~(-19)
print(res)
'''
    100000000010011  (原码)
    111111111101100  (反码)
    111111111101101  (补码)

按位非操作的是补码
    111111111101101  (补码)
    000000000010010  (按位非得值)

    000000000010010  (原码 == 反码 == 补码)
'''

运算符的优先级问题

从不来不会去背这个优先级的表格,而是在表达式里面,给优先想要运算的表达式加上小括号提升它的优先执行

在这里插入图片描述

总结

重点

1. 算术运算符
2. 浮点数运算过程中近似值的计算,是不精确的。也叫丢失精度。
3. 赋值运算符
   =
   +=
   -=
   *=
   /=
   //=
   %=
4. 比较运算符
5. ==is的区别
6. innot in
7. isnot is
8. 逻辑运算符
   and
   or
   not
9. 使用小括号提升表达式的优先执行顺序
10. 先计算等号=右边的表达式,再赋值给左边变量

理解

1. 二级容器转换字典
2. 逻辑运算符的短路现象
3. 字符串之间的比较,是编码位置的比较
   ASCII码
   unicode万国编码
   utf8 与 utf8mb4
   gbk 国标码
   big5

了解

1. 位运算符
   6个运算符
   原码、反码、补码
2. 运算符的优先级

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/768954.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入理解Java虚拟机(四)虚拟机性能监控、基础故障处理工具

Java与C之间有一堵由内存动态分配和垃圾收集技术所围成的高墙&#xff0c;墙外面的人想进去&#xff0c;墙里面的人却想出来。 给一个系统定位问题的时候&#xff0c;知识、经验是关键基础&#xff0c;数据是依据&#xff0c;工具是运用知识处理数据的手段。这里说的数据包括但…

酷开科技以内容为核心打造OTT大屏营销投放新体系

如何打造“因地制宜”的营销策略&#xff0c;围绕内容场景&#xff0c;搭建更具效能的OTT大屏营销投放体系&#xff1f;是一个值得思考的问题。 酷开科技OTT大屏营销&#xff0c; 以营销内容为核心、通过更加立体化的沟通模式&#xff0c;创新性整合和打通多元资源&#xff0c…

EXCEl——移除单元格中换行符

方法一&#xff1a;使用清除格式功能 步骤如下: 1.选中需要取消换行的单元格 2.在“开始"选项卡中找到"清除”功能&#xff0c;点击下拉菜单中的“清除格式" 3.这时单元格的换行就被取消了。 清除前效果图 清除后效果图 方法一&#xff1a;使用函数功能 步骤…

React和Vue生命周期

主要就是命名不同 目录 React 组件挂载 挂载前constructor() 挂载时render() 挂载后componentDidMount()&#xff1a;初始化节点 更新 更新时render()&#xff1a;prop/state改变 更新后componentDidUpdate() 卸载 卸载前componentWillUnmount()&#xff1a;清理 V…

计算机网络 day10 DNAT问题 - 堡垒机 - WLAN

目录 DNAT策略拓扑图&#xff1a; 问题一&#xff1a;当我们访问内网的Web服务的时候&#xff0c;我们防火墙服务器的80端口和Web服务器的8000端口是否需要一直调用程序监控呢&#xff1f; DNAT的作用就是可以帮助我们进行路由转发功能 问题二&#xff1a;当我们在继续DNAT…

wpf RadioButton自定义样式 圆角/直角变化 背景色渐变

样式部分 <LinearGradientBrush x:Key"GradientBrush_1" EndPoint"0.5,1" StartPoint"0.5,0"><GradientStop Offset"1" Color"#CEE5D1" /><GradientStop Offset"0" Color"#FAFAFA" /&…

全志F1C200S嵌入式驱动开发(u盘写读)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 f1c200s本身也支持usb接口。并且它的接口和v3s一样,有两个用途。第一个用途是在f1c200s进入fel状态之后,可以用sunxi-fel等工具完成norflash、nandflash的烧写;第二个用途,就是…

MySQL八股学习记录5MySQL锁from小林coding

MySQL八股学习记录5MySQL锁from小林coding 锁的总览全局锁表级锁表锁元数据锁意向锁AUTO-INC锁 行级锁Record LockGap LockNext-Key-Lock插入意向锁行级锁是如何作用的唯一索引等值查询 唯一索引范围查询非唯一索引等值查询 锁的总览 MySQL锁分为三种,分别是全局锁,表级锁,行级…

模拟行走机器人-python

leetcode第874题 链接https://leetcode.cn/problems/walking-robot-simulation 机器人在一个无限大小的 XY 网格平面上行走&#xff0c;从点 (0, 0) 处开始出发&#xff0c;面向北方。该机器人可以接收以下三种类型的命令 commands &#xff1a; -2 &#xff1a;向左转 90 度…

文本挖掘 day4 基于PMC知识框架文本挖掘的新能源汽车政策动态评价

基于PMC知识框架文本挖掘的新能源汽车政策动态评价 2. 研究设计2.1 研究技术路线2.2 数据采集2.3 动态分相 3. 基于PMC知识框架的策略动态挖掘3.1 PMC知识框架的建立3.2 基于PMC知识框架的策略挖掘字典3.2.1 字典建立步骤3.2.2 建立经验证据的词典 3.3 策略动态挖掘分析3.3.1 发…

python实现接口压力测试

python实现接口压力测试 直接上代码&#xff1a; # -*- coding: utf-8 -*-import json import requests import logginglogging.basicConfig(levellogging.INFO, format%(asctime)s - %(name)s - %(levelname)s - %(message)s) logger logging.getLogger(__name__)restime …

linux sed命令巨好用

sed命令介绍 find ./ -type d | grep rtos-kitfind ./ -type d 是一个在Linux终端中使用find命令的示例。让我们逐步解释这个命令&#xff1a; find: 这是用于在文件系统中查找文件和目录的Linux命令。 ./: 这是指当前目录&#xff08;工作目录&#xff09;&#xff0c;fin…

Java - List

List 接口基本介绍 1、List集合类中的元素是有序的&#xff0c;即添加顺序和取出顺序一致&#xff0c;先进先出。List中的元素可重复 2、List集合中的每个元素都有其对应的顺序索引&#xff0c;即支持索引 3、List容器中的元素都对应一个整数型的序号&#xff0c;记载其在容…

全国首个!武大又一新地标,有大势智慧的身影...

本文转载自武汉大学 数字缔造平行时空 古今交汇&#xff0c;千里相约 在武汉大学月湖旁的文科大楼里 藏着一个神秘的剧场 历史厚重的“文化遗产” 性能卓越的“智能计算” 据说这里有很多“新奇”剧目 见你所未见 闻你所未闻 快和珞珞珈珈一起去看看&#xff01; 珞珈…

重新设置mysql的root用户密码

创建一个txt文档&#xff0c;定义修改密码的SQL语句 ALTER USER rootlocalhost IDENTIFIED BY 1234567; 这里的localhost 表示只允许本地登录&#xff0c;如果改成%表示允许本地登录&#xff0c;也允许远程登录。 1234567就是新密码 管理员身份打开Windows PowerShell&#x…

【重温篇】八大排序——堆排序

完全二叉树 首先复习一下完全二叉树&#xff1a;数据从上到下&#xff0c;从左到右依次进行排列 堆排序 第一步 利用完全二叉树构建大顶堆 大顶堆&#xff1a;父节点的值大于或等于其左右孩子的值&#xff08;构建方法如下&#xff09; 1.定义一个parent游标&#xff0c;…

MyBatisPlus数据自动加解密存取和字段防篡改有效性校验码自动生成存储处理器

整体原理&#xff1a;用Mybatis拦截器拦截ResultSetHandler&#xff0c;做属性解密和完整性校奏。替换默认的ParameterHandler处理器。做属性加密存储和完整性加密存储。 代码结构如下&#xff1a; 各功能类解释&#xff1a; 1、EntityClassResolver&#xff1a;用于解析当前M…

Spring创建Ajax和接受Ajax数据-spring20

建一个AJAX.jsp页面 发送Ajax请求一般用jQuery 引入jQuery 引入文件&#xff1a; 弄一个请求 获得集合参数第二种应用场景 requestBody 的意思请求体 为什么找不到JQuery文件&#xff0c;原因是&#xff1a;前端控制器的配置&#xff1a;缺省&#xff0c;客户端发送请求&…

postgresql 数据库 面试题整理

postgresql 数据库 面试题整理 文章目录 postgresql 数据库 面试题整理前言pg数据库的特点&#xff1a;pg的优点pg的核心优势pg数据库的一些缺点PostgreSQL支持的各种数据类型pg的模式pg的多版本并发控制pg多版本并发控制&#xff08;MVCC&#xff09;介绍pg如何提供安全性Post…

vue3+vite配置 unplugin-vue-component 找不到 Vant 组件的问题

使用 vue3 vite Vant 搭建移动端项目&#xff0c;为了避免全量引入 vant 导致打包体积过大&#xff0c;又不想一个一个组件手动导入&#xff0c;所以就选择了 vant 官方推荐的方法&#xff0c;使用 unplugin-vue-components 插件自动引入组件&#xff0c;并按需引入组件的样式…