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

一、变量、运算符与数据类型

1、注释

单行注释:# 表示注释,作用于整行。
多行注释:’’’ ‘’’ 或者 “”" “”" 表示区间注释,在三引号之间的所有内容被注释。

#这是一个注释
print("Hello world")
# Hello world
'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号
'''
print("Hello world")
# Hello world
"""
这是多行注释,用三个双引号
这是多行注释,用三个双引号 
"""
print("Hello world")
# Hello world

2、运算符

算数运算符

操作符名称示例
+1 + 1
-2 - 1
*3 * 4
/3 / 4
//整除3 // 4
%取余3 % 4
**2 ** 3

比较运算符

操作符名称示例
>大于2 > 1
>=大于等于2 >= 1
<小于1 < 2
<=小于等于1 <= 2
==等于3 == 3
!=不等于3 != 4

逻辑运算符

操作符名称示例
and1 and 1
or1 or 0
notnot 1

位运算符

操作符名称示例
~按位取反~4
&按位与4 & 5
I按位或4 I 5
^按位异或4 ^ 5
<<左移4 << 2
>>右移4 >> 2

三元运算符

x,y = 4,5
small = x if x < y else 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, is not 对比的是两个变量的内存地址
  • ==, != 对比的是两个变量的值
  • 比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
  • 对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。

运算符优先级

  • 一元运算符优于二元运算符。例如 3 ** -2等价于 3 ** (-2)
  • 先算术运算,后移位运算,最后位运算。例如 1 << 3 + 2 & 7等价于 1 << (3 + 2)) & 7
  • 逻辑运算最后结合。例如3 < 4 and 4 < 5等价于(3 < 4) and (4 < 5)

3、变量和赋值

  • 在使用变量之前,需要对其先赋值。
  • 变量名可以包括字母、数字、下划线、但变量名不能以数字开头。
  • Python 变量名是大小写敏感的,foo != Foo

4、数据类型与转换

类型名称示例
int整型 <class ‘int’>-876, 10
float浮点型<class ‘float’>3.149, 11.11
bool布尔型<class ‘bool’>True, False

布尔型

除了直接给变量赋值 TrueFalse,还可以用 bool(X)来创建变量,其中 X可以是

  • 基本类型:整型、浮点型、布尔型
  • 容器类型:字符串、元组、列表、字典和集合

确定bool(X)的值是True 还是 False,就看X 是不是空,空的话就是 False,不空的话就是 True

  • 对于数值变量,0, 0.0 都可认为是空的。
  • 对于容器变量,里面没元素就是空的。

获取类型信息

  • 获取类型信息type(object)type() 不会认为子类是一种父类类型,不考虑继承关系。
  • 获取类型信息isinstance(object, classinfo)isinstance()会认为子类是一种父类类型,考虑继承关系。

类型转换

  • 转换为整型 int(x, base=10)
  • 转换为字符串str(object='')
  • 转换为浮点型float(x)

5、print()函数

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
  • 将对象以字符串表示的方式格式化输出到流文件对象file里。其中所有非关键字参数都按str()方式进行转换为字符串输出;
  • 关键字参数sep是实现分隔符,比如多个参数输出时想要输出中间的分隔字符;
  • 关键字参数end是输出结束时的字符,默认是换行符\n
  • 关键字参数file是定义流输出的文件,可以是标准的系统输出sys.stdout,也可以重定义为别的文件;
  • 关键字参数flush是立即把内容输出到流文件,不作缓存。

练习

1、怎样对python中的代码进行注释?
见1
2、python有哪些运算符,这些运算符的优先级是怎样的?
见2
3、python 中is, Is not==,!= 的区别是什么?
见2
4、python 中包含哪些数据类型?这些数据类型之间如何转换?
见4

二、位运算

1、原码、反码和补码

  • 原码:就是其二进制表示(注意,有一位符号位)。
  • 反码:正数的反码就是原码,负数的反码是符号位不变,其余位取反(对应正数按位取反)。
  • 补码:正数的补码就是原码,负数的补码是反码+1。
  • 符号位:最高位为符号位,0表示正数,1表示负数。在位运算中符号位也参与运算

2、利用位运算实现整数集合

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

  • 元素与集合的操作:
a | (1<<i)  -> 把 i 插入到集合中
a & ~(1<<i) -> 把 i 从集合中删除
a & (1<<i)  -> 判断 i 是否属于该集合(零不属于,非零属于)
  • 集合之间的操作:
a 补   -> ~a
a 交 b -> a & b
a 并 b -> a | b
a 差 b -> a & (~b)

练习

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。尝试使用位运算解决此题。

'''
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:
		res = 0
		for item in nums:
			res = res ^ item 
		return res	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值