Task 1: 变量、运算符、数据类型及位运算

1 变量、运算符和数据类型

1.1 注释

  1. # 单行注释
#打印一个爱心
print('❤')
结果如下:
❤
  1. ''' '''""" """,多行注释
"""
我要打印一个爱心
第二个爱心
第三个
"""
print('❤')
print('❤')
print('❤')
结果如下:
❤
❤
❤

1.2 运算符

  1. 算术运算符
    +
    -
    *
    \
    \\ 整除
    % 取余
    **
print(1+2)
print(1-2)
print(10/3)
print(10//3)
print(10%3)
print(10**3)
结果如下:
3
-1
3.3333333333333335
3
1
1000
  1. 比较运算符
    > 大于
    >= 大于等于
    < 小于
    <= 小于等于
    == 等于
    != 不等于
print(1>2)
print(1>=2)
print(1<2)
print(1<=2)
print(1==2)
print(1!=2)
结果如下:
False
False
True
True
False
True
  1. 逻辑运算符
    and
    or
    not
print((1>2) and (3>2))
print((1>2) or (3>2))
print(not (1>2))
结果如下:
False
True
True
  1. 位运算符
    ~ 按位取反
    & 按位与
    | 按位或
    ^ 按位异或
    << 左移
    >> 右移
print(~4)
print(3&0)
print(3|0)
print(3^0)
结果如下:
-5
0
3
3
  1. 三元运算符
    a=x if x<y else y
x,y=1,2
a=x if x>y else y
print(a)
结果如下:
2
  1. 其他运算符
    is
    is not 不是
    in 存在
    not in 不存在
print(1 is 1)
print('2' is'2')
print([1,2] is [1,2])
a=[1,2]
b=[1,2]
print(a is b)
print(a==b)
print(1 in a)
print(1 not in a)
结果如下:
True
True
False
False
True
True
False
  1. 运算符的优先级
    a. 一元运算符优于二元运算符。如正负号。
    b. 先算术运算,后移位运算,后位运算。例如 1 << 3 + 2 & 7等价于 (1 << (3 + 2)) & 7
    c. 逻辑运算后结合

1.3 变量和赋值

变量:字母、数字、下划线组成;大小写敏感;使用前需先赋值。

user_id='001'
user_name='张三'
print(user_id+user_name)
结果如下:
001张三

1.4 数据类型与转换

int 整型
float 浮点型
bool 布尔型

int(x) 转换成整型
float(x) 转换成浮点型
str(x) 转换成字符串

print(1,type(1))
print(type('2'))
print(type(2.0))
print(type(1),bool(1),bool(0))
print(isinstance(1,int))
print(str(1+2))
print(int(1.03))
结果如下:
1 <class 'int'>
<class 'str'>
<class 'float'>
<class 'int'> True False
True
3
1

1.5 print函数

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

w=['a','b','c','d','e']
for i in w:
    print(i)
结果如下:
a
b
c
d
e
w=['a','b','c','d','e']
for i in w:
    print(i,end="&")
结果如下:
a&b&c&d&e&
w=['a like','b not like','c in','d not in','e is']
for i in w:
    print(i,"yes",sep=",")
结果如下:
a like,yes
b not like,yes
c in,yes
d not in,yes
e is,yes

1.6 练习题

  1. 怎样对python中的代码进行注释?
    方式一:# 单行注释
    方式二:’’’ ‘’'多行注释
    方式三:""" “”"多行注释
  2. python有哪些运算符,这些运算符的优先级是怎样的?
    算术运算符:+、-、*、/、//、%、**
    比较运算符:>、>=、<、<=、==、!=
    逻辑运算符:and、or、not
    位运算符:~、&、|、^、<<、>>
    三元运算符:small=x if x<y else y
    其他运算符:is、is not、in、not in
    优先级:一元运算符优先于二元运算符;算术运算符>后移位运算>位运算;逻辑运算最后结合
  3. python 中 is, is not 与 ==, != 的区别是什么?
    is 和 is not,对比的是两个变量的内存地址,==和!=对比的是两个变量的值。
  4. python 中包含哪些数据类型?这些数据类型之间如何转换?
    数据类型:数字:int(整型)、float(浮点型)、bool(布尔型)
    类型转换:int()、float()、str()

2 位运算

2.1 原码、反码、补码

二进制有三种不同的表示形式:原码、反码和补码,计算机内部使用补码来表示
原码:就是其二进制表示(注意,有一位符号位)。
反码:正数的反码就是原码,负数的反码是符号位不变,其余位取反(对应正数按位取反)。
补码:正数的补码就是原码,负数的补码是反码+1。
符号位:高位为符号位,0表示正数,1表示负数。在位运算中符号位也参与运算。

2.2 按位非操作~

~ 把 num 的补码中的 0 和 1 全部取反(0 变为 1,1 变为 0)有符号整数的符号位在 ~ 运算中同样会取反。

print(5,bin(5))
print(~5,bin(~5))
结果如下:
5 0b101
-6 -0b110

2.3 按位与操作&

#只有两个对应位都为 1 时才为 1
print(bin(1),bin(2),bin(1&2),1&2)
结果如下:
0b1 0b10 0b0 0

2.4 按位或操作|

#只要两个对应位中有一个 1 时就为 1
print(bin(1),bin(2),bin(1|2),1|2)
结果如下:
0b1 0b10 0b11 3

2.5 按位异或操作^

#只有两个对应位不同时才为 1
print(bin(1),bin(2),bin(1^2),1^2)
结果如下:
0b1 0b10 0b11 3

2.6 按位左移操作<<

print(bin(11),bin(11<<3),11<<3)
结果如下:
0b1011 0b1011000 88

2.7 按位右移操作>>

print(bin(11),bin(11>>3),11>>3)
结果如下:
0b1011 0b1 1

2.8 利用位运算实现快速计算

  1. 通过 << , >> 快速计算2的倍数问题
print(16<<1)#计算16*2
print(16<<4)#计算16*(2^4)
print(16>>1)#计算16/2
print(16>>4)#计算16/(2^4)
print(1<<4)#计算2^4
结果如下:
32
256
8
1
16
  1. 通过 ^ 快速交换两个整数,通过 a & (-a) 快速获取 a 的后为 1 位置的整数
a=3
b=4
a^=b
print(a,bin(a))
print(a&(-a),bin(a),bin(-a),bin(a&(-a)))
结果如下:
7 0b111
1 0b111 -0b111 0b1

2.9 利用位运算实现整数集合

  1. 一个数的二进制表示可以看作是一个集合(0 表示不在集合中,1 表示在集合中)
    比如集合 {1, 3, 4, 8},可以表示成 01 00 01 10 10 而对应的位运算也就可以看作是对集合进行的操作。

  2. 元素与集合的操作:
    a | (1<<i) 把 i 插入到集合中
    a & ~(1<<i) 把 i 从集合中删除
    a & (1<<i) 判断 i 是否属于该集合(零不属于,非零属于)

a=0b100011010   #a={1,3,4,8}
b=0b1110000   #b={4,5,6}
print(bin(a|(1<<7)))  #插入
print(bin(a&~(1<<3)))  #删除
print(bin(a))
print((a&(1<<4)))  #属于
print((a&(1<<2)))  #不属于
结果如下:
0b110011010
0b100010010
0b100011010
16
0
  1. 集合之间的操作:
    ~a a补
    a & b a 交 b
    a | b a 并 b
    a & (~b) a 差 b
a=0b100011010   #a={1,3,4,8}
b=0b1110000   #b={4,5,6}
print(bin(~a & 0xffffffff))#补
print(bin(a&b))#交
print(bin(a|b))#并
print(bin(a&(~b)))#差
结果如下:
0b11111111111111111111111011100101
0b10000
0b101111010
0b100001010

2.10 练习题(还在思考中)

leetcode 习题 136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。尝试使用位运算解决此题。
“”"
Input file
example1: [2,2,1]
example2: [4,1,2,1,2]

Output file
result1: 1
result2: 4
“”"
class Solution:
def singleNumber(self, nums: List[int]) -> int:

#your code here

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值