Task01:变量、运算符、数据类型及位运算(2天)
至今为止,我最熟悉、接触最早的程序设计语言是c++,所以在接下来的python基础学习中,我会以c++作为对比,帮助我学习python
一、注释
python中,多行注释用的是(''' '''或""" """),c++中用的是(/* */)
单行注释是(#),c++是(//)
而且在pycharm默认设置中三种注释方法的highlight是不同的
二、运算符
python的运算符与c++的大致相同,我只说明与c++不同的运算符
/ 除 python中'/'运算符的结果是浮点型,而c++则取决于操作数
// 整除(地板除) 结果为整型
** 幂 进行幂运算,c++中无此类运算符
and or not 逻辑与 逻辑或 逻辑非 c++中分别为&& || !
if else 三元运算符 功能与c++中的 ? : 相似
还有一些c++中没有的运算符,如:
in 存在 类似于元素与集合之间的属于关系
not in 不存在 元素不属于集合
is 是
is not 不是
在变量地址不可变时(str等),is 和 is not 等价于 == 和 != , 比较的时两个变量的值
而在地址可变时(list,dict等),is 和 is not 比较的是变量的地址
优先级口诀:
去掉一个最高的,去掉一个最低的,剩下的是一、二、三、赋值。
双目运算符中,顺序为算术、关系和逻辑,移位和逻辑位插入其中
print(3 / 3, 3 // 3) #1.0, 1
print(3 / 4, 3 // 4) #0.75, 0
print(2 ** 3) #8
array = ['A', 'b']
print('A' in array, 'b' not in array) #True False
a = "yes"
b = "yes"
print(a is b, a == b) #True True
print(a is not b, a != b) #False False
a = ["yes"]
b = ["yes"]
print(a is b, a == b) #False True
print(a is not b, a != b) #True False
b = a
print(a is b) #True 说明a与b地址相同
三、数据类型
变量名的命名规则与c++相同
可以包括字母、数字、下划线、但变量名不能以数字开头
对大小写敏感
基础数据类型有 整型、浮点型、布尔型
python 里面万物皆对象,基础数据类型都有自己的属性和方法
可以通过dir() 方法查看
type(object) 方法获取类型信息
isinstance(object, classinfo) 判断一个对象是否是一个已知的类型
值得注意的是 type() 不会认为子类是一种父类类型,不考虑继承关系
isinstance() 会认为子类是一种父类类型,考虑继承关系
类型转换
python中的类型转换,与c++的强制类型转换类似
转换为整型 int(x, base=10)
转换为字符串 str(object='')
转换为浮点型 float(x)
四、位运算
按位与&
1.如果我要判断a的第j为是0还是1的话,只需要计算出a&(1<<j)的值,如果是1的话该位就是1,反之则反之
2.如果需要判断一个数a是否为2的次幂,只需要计算出a&(a-1)的值,如果是0的话该数是2的次幂,反之则反之
3.取一个数a的最底位的1,用a&-a,例如20(10) = 10100(2),那么20&-20 = 100(2);
4.可以将a的第j位变为0,用a&(0<<j)即可
按位异或^
1.如果需要将a的第j为取反的话,只需要进行 a^(1<<j)即可;
2.利用自反性交换两个数,按位异或有个很神奇的性质--自反性 a^b^b = a;
利用这个性质我们可以不用第三个变量就能交换两个数;
例如:我们要交换a和b两个,只需要进行以下操作即可;
a = a ^ b;
b = a ^ b;
a = a ^ b;
按位或|
1.可以将a的第j位变为1,用a|(1<<j)即可
移位运算可以看作对原数进行乘除2的幂。
--转自https://www.luogu.com.cn/blog/111081/wei-yun-suan-ji-ji-gong-neng
练习题leetcode136让我印象最深的是
计算整型变量n的二进制位中1的个数:n & (n - 1)会消去n的最低位1
位运算的另一个用处是在状态压缩dp中的应用
位运算的恰当应用可以有效的提升程序的执行效率