python学习笔记 7.21(54-按时打卡-QQ)

Task1
一、 变量、运算符与数据类型
1、注释
(1)单行注释:在 Python 中,# 表示注释,作用于整行。
(2)多行注释:用’’’ ‘’’ 或者 “”" “”" 表示区间注释,在三引号之间的所有内
容被注释。
2、 运算符
(1)算术运算符:加 减 乘 除 整除(//)取余(%)幂(**)
(2)比较运算符:大于(>) 小于(<) 大于等于(>=)
小于等于 (<=) 等于(==) 不等于(!=)
(3)逻辑运算符 与(and) 或(or) 非(not)
(4)位运算符:按位取反(~) 按位与(&) 按位或(|)
按位异或(^) 左移 (<<) 右移(>>)
(5)三元运算符:
if x < y:
small = x
else:
small = y
等价于:
small = x if x < y else y
(6)其他运算符:存在(in) 不存在(not in)
是 (is) 不是(is not)
is, is not 对比的是两个变量的内存地址
==, != 对比的是两个变量的值
若比较的两个变量,指向的都是地址不可变的类型(str等),
那么is,is not 和 ==,!= 是完全等价的。
对比的两个变量,指向的是地址可变的类型(list,dict,tuple
等),则两者是有区别的。

【字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是 唯一的. 在保存的时候, 根据key来计算出一个内存地址. 然后将key-value保存在这个地址中. 这种算法被称为hash算法】
【(tuple)元祖就是不可变的列表
元祖用()表示,元素与元素之间用逗号隔开,数据类型没有限制】

运算符的优先级:一元运算符优于二元运算符。先算术运算,后移位运算,最后位运算。逻辑运算最后结合。

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

4、数据类型与转换
整型(int):即整数
浮点型(float):带小数
布尔型(bool):true/false
【bin(a)即二进制表示的a】

有时候我们想保留浮点型的小数点后 n 位。可以用 decimal 包里的 Decimal 对象和getcontext() 方法来实现。引进方式如下:

import decimal
from decimal import Decimal

使用如下:

b = Decimal(1) / Decimal(3)
print(b)

# 0.3333333333333333333333333333

Python 里面有很多用途广泛的包 (package),用什么你就引进 (import) 什么。包也是对象,也可以用上面提到的dir(decimal) 来看其属性和方法。

布尔 (boolean) 型变量只能取两个值,True 和 False。当把布尔型变量用在数字运算中,用1 和 0 代表 True 和 False。除了直接给变量赋值 True 和 False,还可以用 bool(X) 来创建变量,其中 X 可以是基本类型:整型、浮点型、布尔型; 容器类型:字符串、元组、列表、字典和集合。具体如下:
(1)bool 作用在基本类型变量:X 只要不是整型 0、浮点型 0.0,bool(X) 就是True,其余就是 False。
(2)bool 作用在容器类型变量:X 只要不是空的变量,bool(X) 就是 True,其余就是 False。

获取类型信息方式:
(1)type(object) 获取类型信息
(2)isinstance(object, classinfo) 判断一个对象是否是一个已知的类型。
【注:type() 不会认为子类是一种父类类型,不考虑继承关系。isinstance() 会认为子类是一种父类类型,考虑继承关系。】

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

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

练习题

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

2、运算符:算术运算符、比较运算符、逻辑运算符、位运算符、三元运算符、其他运算符(in,is之类)
优先级:一元运算符优于二元运算符。先算术运算,后移位运算,最后位运算。逻辑运算最后结合。

3、is, is not 对比的是两个变量的内存地址;
==, != 对比的是两个变量的值;
如果比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
如果对比的两个变量,指向的是地址可变的类型(list,dict等),则两者是有区别的。

4、整型 (int)、浮点型(float)、布尔型(bool)
类型转换:转换为整型 int(x, base=10);转换为字符串 str(object=’’);转换为浮点型 float(x)

二、位运算
1、 原码、反码和补码
二进制有三种不同的表示形式:原码、反码和补码,计算机内部使用补码来表示。最高位为符号位,0表示正数,1表示负数。在位运算中符号位也参与运算。

  • 原码:就是其二进制表示(注意,最高位是符号位)。
  • 反码:正数的反码就是原码,负数的反码是符号位不变,其余位取反(对应正数按位取反)。
  • 补码:正数的补码就是原码,负数的补码是反码+1。

2、 按位非操作(~)
把num的补码中的 0 和 1 全部取反(0 变为 1,1 变为 0)。

3.、按位与操作 (&)
只有两个对应位都为 1 时才为 1。

4、 按位或操作 (|)
只要两个对应位中有一个 1 时就为 1。

5、按位异或操作 (^)
只有两个对应位不同时才为 1。
异或操作的性质:满足交换律和结合律

A^B = 
A^B^A: = A^A^B = B 

6、 按位左移操作 (<<)
num << i 将num的二进制表示向左移动i位所得的值。

7、按位右移操作 (>>)
num >> i 将num的二进制表示向右移动i位所得的值。

8、利用位运算实现快速计算
(1)通过 <<,>> 快速计算2的倍数问题。

n << 1 -> 计算 n*2
n >> 1 -> 计算 n/2,负奇数的运算不可用
n << m -> 计算 n*(2^m),即乘以 2 的 m 次方
n >> m -> 计算 n/(2^m),即除以 2 的 m 次方

(2)通过 ^ 快速交换两个整数。

a ^= b
b ^= a
a ^= b

即:

(3)通过 a & (-a) 快速获取a的最后为 1 位置的整数。

00 00 01 01 -> 5
&
11 11 10 11 -> -5
---
00 00 00 01 -> 1

00 00 11 10 -> 14
&
11 11 00 10 -> -14
---
00 00 00 10 -> 2

9、 利用位运算实现整数集合
一个数的二进制表示可以看作是一个集合(0 表示不在集合中,1 表示在集合中)。
比如集合 {1, 3, 4, 8},可以表示成 01 00 01 10 10,即二进制的第1.3.4.8位为1表示在集合中,为0的位不在集合中。

元素与集合的操作:

a | (1<<i)  -> 把 i 插入到集合中,即对应位变为1
a & ~(1<<i) -> 把 i 从集合中删除,即对应位变为1
a & (1<<i)  -> 判断 i 是否属于该集合(零不属于,非零属于)

【Python中的整型是补码形式存储的。Python中整型是不限制长度的不会超范围溢出。】
【为了获得负数(十进制表示)的补码,需要手动将其和十六进制数0xffffffff进行按位与操作,再交给bin()进行输出,得到的才是负数的补码表示。】

练习题:
代码如下:

class Solution:
 public:
  def singleNumber(self, nums: List[int]) -> int:
  self = 0;
  for (int i = 0; i<nums.size(); ++i)
   self = self^nums[i];
  return self;
    
 
————————————————
版权声明:本文为CSDN博主「_kean」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/C1029323236/article/details/86653188

猜你喜欢

转载自blog.csdn.net/m0_45672993/article/details/107498900