Python part1

变量、运算符与数据类型

注释

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

运算符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

位运算:
按位非:~

  • ~ 对补码全部取反(0 变为 1,1 变为 0)包括符号位
    按位与:两1为1,else 0
    按位或:有1为1,else 0
    按位异或:两位不同为1,else 0(异或操作满足交换律和结合律)
    按位左移:*2—— n<<m:n*(2^m)
    按位右移:/2——n>>m:n/(2^m)
    !!!通过^ 可以快速交换两个整数:a ^ = b;b ^ = a;a ^= b
    lowbit:快速获取a最后为1的位置:a&(-a)

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

  • 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)

特殊三元运算符
small = x if x < y else y
在这里插入图片描述

PS:
is, is not 对比的是两个变量的内存地址
==, != 对比的是两个变量的值
比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。
在这里插入图片描述
如果怕出错可以用括号确定优先级

变量和赋值

变量名规则与C++标识符相同
先赋值再使用

数据类型与转换

在这里插入图片描述

都是对象也都有其对应的属性和方法
保留小数点后n位:

  • 相关的包:decimal :Decimal对象
  • Decimal 对象的默认精度值是 28 位 (prec=28)。
  • getcontext().prec可以调整精度
    decimal.getcontext().prec = 4
    c = Decimal(1) / Decimal(3)
    print(c)
    # 0.3333

布尔型变量只有两个值:真假,可用于数学运算当作1,0用
除了直接给变量赋值 True 和 False,还可以用 bool(X) 来创建变量,其中 X 可以是
基本类型:整型、浮点型、布尔型
容器类型:字符串、元组、列表、字典和集合

确定bool(X) 的值是 True 还是 False,就看 X 是不是空,空的话就是 False,不空的话就是 True。
对于数值变量,0, 0.0 都可认为是空的。
对于容器变量,里面没元素就是空的

类型转换

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

输出

print()

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
sep:间隔符;end:结束符(默认换行);file:定义流输出文件;flush:是否缓存

条件语句

在这里插入图片描述
在这里插入图片描述
PS:支持if嵌套,且Python 使用缩进而不是大括号来标记代码块边界,因此要特别注意else的悬挂问题

在这里插入图片描述

循环

在这里插入图片描述

如果布尔表达式不带有<、>、==、!=、in、not in等运算符,仅仅给出数值之类的条件,也是可以的。当while后写入一个非零整数时,视为真值,执行循环体;写入0时,视为假值,不执行循环体。也可以写入str、list或任何序列,长度非零则视为真值,执行循环体;否则视为假值,不执行循环体。

string = 'abcd'
while string:
    print(string)
    string = string[1:]
# abcd
# bcd
# cd
# d

在这里插入图片描述

!这个地方和c不太一样
当while循环正常执行完的情况下,执行else输出,如果while循环中执行了跳出循环的语句,比如 break,将不执行else代码块的内容。

在这里插入图片描述

for循环是迭代循环,在Python中相当于一个通用的序列迭代器,可以遍历任何有序序列,如str、list、tuple等,也可以遍历任何可迭代对象,如dict。
每次循环,迭代变量被设置为可迭代对象的当前元素,提供给代码块使用。

特别的 :
在这里插入图片描述

当for循环正常执行完的情况下,执行else输出,如果for循环中执行了跳出循环的语句,比如 break,将不执行else代码块的内容,与while - else语句一样

在这里插入图片描述

step=1 表示第三个参数的默认值是1。
range :生成一个从start参数的值开始到stop参数的值结束的数字序列,该序列包含start的值但不包含stop的值

在这里插入图片描述
break:跳出当前所在层的循环
continue终止本轮循环并开始下一轮循环
pass:语句的意思是“不做任何事”,如果你在需要有语句的地方不写任何语句,那么解释器会提示出错,而 pass 语句就是用来解决这些问题的:即占位
在这里插入图片描述

# 示例:
x = [-4, -2, 0, 2, 4]
y = [a * 2 for a in x]
print(y)
# [-8, -4, 0, 4, 8]

x = [(i, i ** 2) for i in range(6)]
print(x)
# [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]

x = [i for i in range(100) if (i % 2) != 0 and (i % 3) == 0]
print(x)
# [3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99]

a = [(i, j) for i in range(0, 3) for j in range(0, 3)]
print(a)
# [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

x = [[i, j] for i in range(0, 3) for j in range(0, 3)]
print(x)
# [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
x[0][0] = 10
print(x)
# [[10, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]

a = [(i, j) for i in range(0, 3) if i < 1 for j in range(0, 3) if j > 1]
print(a)
# [(0, 2)]

在这里插入图片描述

a = (x for x in range(10))
print(a)
# <generator object <genexpr> at 0x0000025BE511CC48>

print(tuple(a))
# (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

字典推导式

b = {i: i % 2 == 0 for i in range(10) if i % 3 == 0}
print(b)
# {0: True, 3: False, 6: True, 9: False}

集合推导式

c = {i for i in [1, 2, 3, 4, 5, 5, 6, 4, 3, 2, 1]}
print(c)
# {1, 2, 3, 4, 5, 6}

异常

assert:断言
assert后面条件为false时,程序崩溃并抛出AssertionError异常,用于置入检查点
eg:assert 3 > 7 # AssertionError

异常就是运行期检测到的错误。计算机语言针对可能出现的错误定义了异常类型,某种错误引发对应的异常时,异常处理程序将被启动,从而恢复程序的正常运行。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

首先,执行try子句(在关键字try和关键字except之间的语句)
如果没有异常发生,忽略except子句,try子句执行后结束。
如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和except之后的名称相符,那么对应的except子句将被执行。最后执行try - except语句之后的代码。
如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。
使用多个except代码块时,必须坚持对其规范排序,要从最具针对性的异常到最通用的异常。
一个 except 子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。

try:
    f = open('test.txt')
    print(f.read())
    f.close()
except OSError as error:
    print('打开文件出错\n原因是:' + str(error))
# 打开文件出错
# 原因是:[Errno 2] No such file or directory: 'test.txt'

try:
    s = 1 + '1'
    int("abc")
    f = open('test.txt')
    print(f.read())
    f.close()
except (OSError, TypeError, ValueError) as error:
    print('出错了!\n原因是:' + str(error))
# 出错了!
# 原因是:unsupported operand type(s) for +: 'int' and 'str'

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

try:
    raise NameError('HiThere')
except NameError:
    print('An exception flew by!')
# An exception flew by!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值