team-learning-python 第一课:变量、运算符、数据类型及位运算
变量、运算符、数据类型
1.怎样对python中的代码进行注释?
①对于单行注释,用#
②对于多行注释,用 ’ ’ ’ ……’ ’ ’ 或 " " " ……" " " 表示区间注释
2.python有哪些运算符,这些运算符的优先级是怎样的?
解答:python中有算术运算符,比较运算符,逻辑运算符,位运算符,三元运算符,和其他运算符等
运算符的优先级:
一元运算符优于二元运算符。
先算术运算,后移位运算,最后位运算,逻辑运算最后结合
例如:5 ** - 7 等价于 5 ** (-7)
5 >> 4 + 5 & 6 等价于 (5 >> (4 + 5)) & 6
3 > 1 and 4 > 3 等价于 (3 > 1) and (4 > 3)
3.python中is,is not 与 = = ,!=的区别是什么?
解答:
① is, is not 对比的是两个变量的内存地址
② = =,!=对比的是两个变量的值
当比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和==,!=是完全等价的;当对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。
4.python中包含哪些数据类型?这些数据类型之间如何转换?
解答:包含int,float,bool等类型(即整型、浮点型、布尔型),可通过type()语句进行查看。
数据类型之间的转换:
①转换为整型:int(x)
②转换为字符串:str(x)
③转换为浮点型:float(x)
5.另外
isinstance(object, classinfo)判断一个对象是否是一个已知的类型。
例如:print(isinstance(1, int)) #true,表示1为int类型
位运算
练习题:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
inputs = [4,1,2,1,2]
val = 0
for i in range(len(inputs)):
val ^= inputs[i] #利用异或特性,相同两个数字异或为0
return val
二进制有三种在那个不同的表示形式:原码、反码和补码,计算机内部使用补码来表示。
原码:就是其二进制表示(注意,最高位是符号位)
例如:00 00 00 11 表示3
10 00 00 11 表示-3
反码:正数的反码就是原码,负数的反码是符号位不变,其余位取反(对应正数按位取反)
例如:00 00 00 11 表示3
11 11 11 00 表示-3
补码:正数的补码就是原码,负数的补码是反码+1
例如:00 00 00 11 表示3
11 11 11 01 表示-3
符号位:最高位为符号位,0表示正数,1表示负数,在位运算中符号位也参与运算。
2. 按位非操作:~
~1 = 0
~0 = 1
例如:~(00 00 01 01(表示5)) = 11 11 10 10 (表示-6)
-
按位与操作:&
1 & 1 = 1
1 & 0 = 0
0 & 1 = 1
0 & 0 = 0 (只有两个对应位都为1时才为1) -
按位或操作:|
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0 (只要两个对应位中有一个1时就为1) -
按位异或操作:^
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0 (只有两个对应位不同时才为1) -
按位左移操作:<<
num << i : 表示将num的二进制表示向左移动 i 位所得的值。
例如:00 00 10 11 表示11
11 << 3
结果:01 01 10 00 表示88 -
按位右移操作:>>
num >> i 将num的二进制表示向右移动i位所得的值。
00 00 10 11 表示11
11 >> 2
结果:00 00 00 10 (即2) -
利用位运算实现快速计算
通过<<, >>快速计算2的倍数问题。
n << 1 表示计算 n* 2
n >> 1 表示计算n/2,负奇数的运算不可用
n << m 表示计算n*(2^m),即乘以2的m次方
n >> m 表示计算n/(2^m),即乘以2的m次方
1 << n 表示2^n -
利用位运算实现整数集合
一个数的二进制表示可以看作是一个集合(0表示不在集合中,1表示在集合中)。
比如集合{1,3,4,8},可以表示成 01 00 01 10 10,而对应的位运算也就可以看作是对集合进行的操作。