Datawhale组队学习 -- Task 1:变量、运算符、数据类型及位运算
2023-06-13 09:14:28 时间
1. 注释
- 概念
代码中的注释经常用来表达代码内容的含义或者保存一些不执行但要保留的代码进行对比查看
- 代码
# 你好,世界
'''
有些人心如草木,
却向阳而生
'''
print("余生大大 --->")
- 执行结果
- 总结
- #是一个单行注释
- ''' ''' 或 """ """ 是多行注释
2. 计算符
算数运算符
符号
操作符 | 名称 | 示例 |
---|---|---|
+ | 加 | 1 + 1 |
- | 减 | 2 - 1 |
* | 乘 | 3 * 4 |
/ | 除 | 3 / 4 |
// | 整除(地板除) | 3 // 4 |
% | 取余 | 3 % 4 |
** | 幂 | 2 ** 3 |
代码
print(1 + 1) # 加
print(2 - 1) # 减
print(3 * 7) # 称
print(7 / 9) # 除
print(41 // 7)# 整除,舍弃小数
print(5 % 3) # 取余数
print(2 ** 9) # 幂
结果
比较运算符
符号
操作符 | 名称 | 示例 |
---|---|---|
> | 大于 | 2 > 1 |
>= | 大于等于 | 2 >= 4 |
< | 小于 | 1 < 2 |
<= | 小于等于 | 5 <= 2 |
== | 等于 | 3 == 4 |
!= | 不等于 | 3 != 5 |
代码
print(2 > 1) # True
print(2 >= 4) # False
print(1 < 2) # True
print(5 <= 2) # False
print(3 == 4) # False
print(3 != 5) # True
结果
逻辑运算符
符号
操作符 | 名称 | 示例 |
---|---|---|
and | 与 | (3 > 2) and (3 < 5) |
or | 或 | (1 > 3) or (9 < 2) |
not | 非 | not (2 > 1) |
代码
print((3 > 2) and (3 > 5)) # and 的条件必须都符合才输出true
print((1 > 3) or (9 > 2)) # or 的条件只要一个符合就输出true
print(not (2 > 1)) # not相当于取反,结果为true加上not就输出反向结果
结果
位运算符
符号
操作符 | 名称 | 示例 |
---|---|---|
~ | 按位取反 | ~4 |
& | 按位与 | 4 & 5 |
| | 按位或 | 4 | 5 |
^ | 按位异或 | 4 ^ 5 |
<< | 左移 | 4 << 2 |
>> | 右移 | 4 >> 2 |
按位取反(~
)
按位取反运算符~为单目运算符(只有一个操作数),右结合性,作用是对参与运算的二进制位取反。例如~1为0,~0为1,这和逻辑运算中的!非常类似。也就是把数值在内存中的二进制存储进行取反。
例如,~9可以转换为如下的运算:
~ 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)
-----------------------------------------------------------------------------------
1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0110 (-10 在内存中的存储)
按位与(&
)
按位与运算符&的运算规则是:只有参与&运算的两个位都为 1 时,结果才为 1,否则为 0。例如1&1为 1,0&0为 0,1&0也为 0,这和逻辑运算符&&非常类似。也就是说两个数值的内存二进制0,1对比,1&1为1 0&0为0 1&0为0
-9&5可以转换成如下的运算:结果为5
1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)
& 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)
-----------------------------------------------------------------------------------
0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)
按位或(|)
按位或运算符|的运算规则是:两个二进制位有一个为 1 时,结果就为 1,两个都为 0 时结果才为 0。例如1|1为 1,0|0为0,1|0 为1,这和逻辑运算中的||非常类似。跟上面的相反,1|1为1,0|0为0,1|0为1
-9&5可以转换成如下的运算:结果为-9
1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)
| 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)
-----------------------------------------------------------------------------------
1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)
按位异或(^)
按位异或运算^的运算规则是:参与运算的两个二进制位不同时,结果为 1,相同时结果为 0。例如0^1为 1,0^0为 0,1^1为 0。
-9&5可以转换成如下的运算:结果为-14
1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)
^ 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)
-----------------------------------------------------------------------------------
1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0010 (-14 在内存中的存储)
左移运算符(<<)
Python 左移运算符<<用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补 0。
9<<3可以转换为如下的运算:结果为72
<< 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)
-----------------------------------------------------------------------------------
0000 0000 -- 0000 0000 -- 0000 0000 -- 0100 1000 (72 在内存中的存储)
如果数据较小,被丢弃的高位不包含 1,那么左移 n 位相当于乘以 2 的 n 次方。
9<<3可以理解为 9*2的3次方:9*(2*2*2)=72
右移运算符(>>)
Python 右移运算符>>用来把操作数的各个二进制位全部右移若干位,低位丢弃,高位补 0 或 1。如果数据的最高位是 0,那么就补 0;如果最高位是 1,那么就补 1。
9>>3可以转换为如下的运算:结果为1
>> 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)
-----------------------------------------------------------------------------------
0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0001 (1 在内存中的存储)
(-9)>>3可以转换为如下的运算:结果为-2
>> 1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)
-----------------------------------------------------------------------------------
1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 1110 (-2 在内存中的存储)
上面两个可以看出9>>3高位丢的0就补0,(-9)>>3丢的1就补1
如果被丢弃的低位不包含 1,那么右移 n 位相当于除以 2 的 n 次方(但被移除的位中经常会包含 1)。
代码
#bin() 返回一个整数 int 或者长整数 long int 的二进制表示。
print(bin(4)) # 0b100
print(bin(5)) # 0b101
print(bin(~4), ~4) # -0b101 -5
print(bin(4 & 5), 4 & 5) # 0b100 4
print(bin(4 | 5), 4 | 5) # 0b101 5
print(bin(4 ^ 5), 4 ^ 5) # 0b1 1
print(bin(4 << 2), 4 << 2) # 0b10000 16
print(bin(4 >> 2), 4 >> 2) # 0b1 1
结果
三元运算符
代码
x, y = 4, 5
small = x if x < y else y # 如果x < y则输出前面的x 否则输出 y
print(small) # 4
结果
其他运算符
符号
操作符 | 名称 | 示例 |
---|---|---|
in | 存在 | 'A' in ['A', 'B', 'C'] |
not in | 不存在 | 'h' not in ['A', 'B', 'C'] |
is | 是 | "hello" is "hello" |
is not | 不是 | "hello" is not "hello" |
代码
# is 和 not in
letters = ['A', 'B', 'C']
print('A' in letters) # 如果A存在于那个数组中为真
print('A' not in letters) # 如果A不存在于那个数组中为真
# in 和 not in
a = "hello"
b = "hello"
print(a is b, a == b) # True True
print(a is not b, a != b) # False False
注意
is, is not 对比的是两个变量的内存地址
==, != 对比的是两个变量的值
比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
对比的两个变量,指向的是地址可变的类型(list,dict等),则两者是有区别的。
结果
运算符的优先级
- 一元运算符优于二元运算符。例如
3 ** -2
等价于3 ** (-2)
。 - 先算术运算,后移位运算,最后位运算。例如
1 << 3 + 2 & 7
等价于(1 << (3 + 2)) & 7
。 - 逻辑运算最后结合。例如
3 < 4 and 4 < 5
等价于(3 < 4) and (4 < 5)
。 - 举例
print(-3 ** 2) # -9
print(3 ** -2) # 0.1111111111111111
print(1 << 3 + 2 & 7) # 0
print(-3 * 2 + 5 / -2 - 4) # -12.5
print(3 < 4 and 4 < 5) # True
3. 变量和赋值
- 概念
- 在使用变量之前,需要对其先赋值。
- 变量名可以包括字母、数字、下划线、但变量名不能以数字开头。
- Python 变量名是大小写敏感的,foo != Foo。
- 代码
# 纯字符类型则拼接
yu = "心如草木"
sheng = "向阳而生"
print(yu + "," + sheng)
# 数值类型则计算
num = 1;
numT = 3;
print(num + numT)
# 字符类和数值类不能混用
print(num + numT + yu)
- 执行结果
4. 数据类型与转换
- 概念
只要是对象,就有相应的属性 (attributes) 和方法(methods),在开发时经常需要将数据类型转换和统一。
- 查看对象类型:type(x)
a = 1031
print(a, type(a))
- 执行结果
- 转换
a = 122
# 数值转字符串
a = str(a);
print(a, type(a))
# 字符串转浮点
a = float(a);
print(a, type(a))
# 浮点转数值
a = int(a);
print(a, type(a))
# 数值转布尔(bool如果是0、0.0或者空字符串及空的变量则为false)
a = bool(a)
print(a, type(a))
- 执行结果
练习题:
- 怎样对python中的代码进行注释?
- #:单行注释
- ''' ''' 和 """ """: 多行注释
- python有哪些运算符,这些运算符的优先级是怎样的?
- 一元运算优先二元运算
- 先执行算数的再执行移位运算最后执行位运算
- python 中
is
,is not
与==
,!=
的区别是什么?- is 和 is not比较的是变量的内存地址(家住在哪)
- == 和 != 比较的是变量的值(人长的一不一样)
- python 中包含哪些数据类型?这些数据类型之间如何转换?
- int,str,float,bool(整形,字符,浮点型,布尔型)
- int(x),str(x),float(x),bool(x) (转换函数)
相关文章
- 为什么要做深度学习而不是宽度学习?「建议收藏」
- 《笨开发学习操作系统》5文件系统
- 【Linux学习随笔】三、shell语法-变量「建议收藏」
- C语言算法及常量变量相关知识【C语言学习笔记】
- Python学习之变量进阶【列表,元组】
- JVM学习-类加载
- MySQL数据库基础学习(十)
- 机器学习理论基础到底有多可靠?
- 【RabbitMQ】快速入门学习MQ
- Master of Typing 3 for Mac(打字学习软件)
- 【牛津大学博士论文】机器学习中的组合性和函数不变量
- 前沿技术 | 自动机器学习综述
- Hibernate学习笔记四 查询详解编程语言
- 初出茅庐:零基础学习Oracle(零基础学习oracle)
- 学习Oracle中的变量类型(oracle变量类型)
- 学习Linux变量引用的不二之选(linux变量引用)
- 学习Linux: 如何优化内存使用(linux内存实例)
- 深入解析Oracle函数:从CHM手册中学习(oracle函数chm)
- 学习Oracle数据库:25步骤调用函数(如何调用oracle函数)
- 使用MSSQL学习韩语:一种完全不同的提高乐趣(mssql 韩语)
- MySQL数据库:学习更轻松的视频教程(mysql数据库视频教程)
- 学习Oracle中变量类型的基础知识(oracle中变量类型)
- PHP之变量、常量学习笔记
- PHP学习变量使用总结
- javascript学习笔记(五)正则表达式
- javascript权威指南学习笔记之变量作用域分享
- 关于JavaScript的面向对象和继承有利新手学习
- PHP面向对象程序设计(oop)学习笔记(二)-静态变量的属性和方法及延迟绑定
- Erlang语法学习笔记:变量、原子、元组、列表、字符串