Python学习 Task1 变量、运算符、数据类型及位运算

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

1、变量

Python 中变量赋值不需要类型声明。每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。等号(=)用来给变量赋值,等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。变量名可以包括字母、数字、下划线、但变量名不能以数字开头,另外python 变量名是大小写敏感的,foo != Foo。

1.1 单变量赋值

sum = 100  # 赋值整型变量
miles = 1000.0  # 浮点型
name = "John"  # 字符串

print("sum=",sum) # sum= 100
print("miles=",miles) # miles= 1000.0
print("name=",name) # name= John

1.2 多变量赋值

Python允许你同时为多个变量赋值。例如:
a = b = c = 1
以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上。也可以为多个对象指定多个变量。例如:
a, b, c = 1, 2, “john”
以上实例,两个整型对象 1 和 2 分别分配给变量 a 和 b,字符串对象 “john” 分配给变量 c。

a = b = c = 1
d, e, f = 1, 2, "john"
print("a=",a) # a= 1
print("b=",b) # b= 1
print("c=",c) # c= 1
print("d=",d) # d= 1
print("e=",e) # e= 2
print("f=",f) # f= john

2 运算符

2.1 算术运算符

假设a=20,b=5

运算符描述实例
+加:两个数相加a+b输出结果为25
-减:两个数相减a-b输出结果为15
*乘:两个数相乘或返回一个被重复若干次的字符串a*b输出结果为100
/除:两个数相除a/b输出结果为4
%取模:返回除法的余数a%b输出结果为0
**幂:返回a的b次幂a**b输出结果为3200000
//取整除:返回商的整数部分(向下取整)10//3输出结果为3,-10//3的输出结果为-4
a,b,c = 11, 6, 0
c = a + b
print("c的值为:", c) # 17
c = a - b
print("c的值为:", c)# 5
c = a * b
print("c的值为:", c) #66
c = a / b
print("c的值为:", c) #1.8333333333333333
c = a % b
print("c的值为:", c)# 5
# 修改变量 a 、b 、c
a,b = 2,3
c = a ** b
print("c的值为:", c) #8
a ,b = 10,5
c = a // b
print("c的值为:", c) # 2

2.2 比较运算符

假设a=20,b=5

运算符描述实例
==等于:比较两个数是否相等(a==b)输出结果为false
!=不等于:比较两个数是否不相等(a!=b)输出结果为true
>大于:比较a是否大于b(a>b)输出结果为true
<小于:比较a是否小于b(a<b)输出结果为false
>=大于等于:比较a是否大于等于b(a>=b)输出结果为true
<=小于等于:比较a是否小于等于b(a<=b)输出结果为false

注意:

  1. ==, != 对比的是两个变量的值
if a == b:
    print(" a 等于 b")
else:
    print(" a 不等于 b")

if a != b:
    print(" a 不等于 b")
else:
    print(" a 等于 b")

if a < b:
    print("a 小于 b")
else:
    print("a 大于等于 b")

if a > b:
    print("a 大于 b")
else:
    print("a 小于等于 b")

# 修改变量 a 和 b 的值
a = 5
b = 20
if a <= b:
    print("a 小于等于 b")
else:
    print("a 大于  b")

if b >= a:
    print("b 大于等于 a")
else:
    print("b 小于 a")

2.3 逻辑运算符

假设a=20,b=5

运算符描述实例
and(a >1)or (b>10)输出结果为false
or(a >1)or (b>10)输出结果为true
notnot (a and b)返回false

2.4 位运算符

假设a = 0011 1100,b = 0000 1101

运算符描述实例
~按位取反(~b)输出结果为1111 0010
&按位与(a&b)输出结果为0000 1100
^按位异或(a^b)输出结果为0011 0001
< <左移(a<<2)输出结果为1111 0000
>>右移(a>>2)输出结果为0000 1111

2.5 其他运算符

运算符描述实例
is‘world’ is ‘world’
not is不是6 is not 8
in存在4 in [2,3,4,5]
not in不存在1 not in [2,3,4,5]

注意:

  1. is, is not 对比的是两个变量的内存地址

3 基本数据类型

基本数据类型主要包括整型(int)、浮点型(float)和布尔型(bool)

3.1 整型

整型 <class ‘int’>

a = 1250
print(a, type(a)) # 1250 <class 'int'>

举例
找到一个整数的二进制表示,再返回其长度。

a = 2500
print(bin(a)) # 0b100111000100
print(a.bit_length()) # 12

3.2 浮点型

浮点型 <class ‘float’>

print(2, type(2)) # 2 <class 'int'>
print(2., type(2.)) # 2.0 <class 'float'>

3.3 布尔型

布尔型 <class ‘bool’>

布尔 型变量只能取两个值, 即True 和 False 。当把布尔变量用在数字运算中,用 1 和 0 代表 True和 False。

print(True + True) # 2
print(True + False) # 1
print(True * False) # 0

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

  1. 基本类型:整型、浮点型、布尔型
  2. 容器类型:字符、元组、列表、字典和集合
    例如:
    bool 作用在基本类型变量: X 只要不是整型 0 、浮点型 0.0 , bool(X) 就是 True ,其余就是False 。
print(type(0), bool(0), bool(1)) # <class 'int'> False True
print(type(10.31), bool(0.00), bool(10.31)) # <class 'float'> False True
print(type(True), bool(False), bool(True)) # <class 'bool'> False True

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

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

4 位运算

4.1 原码、反码和补码

二进制有三种不同的表示形式:原码、反码和补码,计算机内部使用补码来表示。
原码:就是其二进制表示(注意,有一位符号位)。
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表示负数。在位运算中符号位也参与运算。

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

通过 << , >> 快速计算n的倍数问题
n << 1 -> 计算 n2
n >> 1 -> 计算 n/2,负奇数的运算不可用
n << m -> 计算 n
(2^m),即乘以 2 的 m 次方
n >> m -> 计算 n/(2^m),即除以 2 的 m 次方
1 << n -> 2^n
通过 ^ 快速交换两个整数。
a ^= b
b ^= a
a ^= b
通过 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

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

一个数的二进制表示可以看作是一个集合(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)
整数在内存中是以补码的形式存在的,输出自然也是按照补码输出。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值