python基础
- 1 数据类型
- 1.1 基本数据类型
- 1.2 数据类型的转换
- 2 运算符
- 2.1 算术运算符
- 2.2 关系运算符
- 2.3 逻辑运算符
- 2.4 位运算
- 3 格式化输出
- 4 进制转换
1 数据类型
1.1 基本数据类型
python不用单独定义数据类型,需要某个变量直接赋值就可以使用。赋值赋什么它就是什么类型,并且后赋值的会覆盖先赋值。
a = 100
print(a)
print(type(a))
a = 0.1
print(a)
print(type(a))
a = 'hello'
print(a)
print(type(a))
1.2 数据类型的转换
a = 100
print(type(a)) # int
print(float(a)) # 100.0
print(str(a)) # 100
print(bool(a)) # True
b = 1.9
print(type(b)) # float
print(int(b)) # 1
print(str(b)) # 1.9
print(bool(b)) # True
c = True
print(type(c)) # bool
print(int(c)) # 1
print(float(c)) # 1.0
print(str(c)) # 1.9
d = '1.9'
print(type(d)) # str
# print(int(d)) 类型转换只能一次(字符串——>浮点型——>整型)两次所以报错!
print(float(d)) # 1.9
print(bool(d)) # True
2 运算符
2.1 算术运算符
a = 1
b = 2
print(a + b)
print(b - a)
print(a * b)
print(a ** b) # a的b次方
print(a / b)
print(a // b) # a整除b
print(a % b) # a除以b的余数
2.2 关系运算符
a = 1
b = 2
print(a < b) # True
print(a > b) # False
print(a == b) # False
print(a != b) # True
x = 'abd'
y = 'abc'
print(x == y) # 逐个比较每个字符的ASCII码
print(x < y)
score = float(input('输入你的成绩:'))
# 注意,input所有键盘输入的内容都是字符串类型的
print(60 <= score <= 100) #输出True或False
2.3 逻辑运算符
# and :与 (有一侧为假即为假)
a = 1
b = 2
print(b and a) # 1,两边都是非0的数,就打印后一个
c = 0
print(c and a) # 0,and两边只要有一边有0,结果就为0
# or :或 (有一侧为真即为真)
print(a or b) # 1,两边都是非0的数,就打印前一个
print(c or b) # 2,or两边只要有一边不为0,就打印不为0的数
# not
flag = True
print(not flag) # False
print(a > c) # True
print(not a > c) # False
2.4 位运算
n1 = 0b0110 # 6
n2 = 0b1100 # 12
print(n1 & n2)
# 与运算:二进制进行运算,同真(1)则真(1),只有都是1时结果是1
# 0b0110
# 0b1100
# --------
# 0b0100 # 4
print(n1 | n2)
# 或运算:二进制进行运算,同假(0)则假(0),只有都是0时结果是0
# 0b0110
# 0b1100
# --------
# 0b1110 # 14
print(n1 ^ n2)
# 异或运算:二进制进行运算,只有不相同时为1,相同即为0
# 0b0110
# 0b1100
# --------
# 0b1010 # 10
前置知识:
计算机操作都是对补码进行操作,正数的补码就是原码,负数的补码要进行计算。
已知十进制负数,求二进制负数的计算:例如-7
(1) 原码(注意不要忘记符号位):1000 0000 0000 0000 0000 0000 0000 0111
(2) 反码(原码除符号位其他都取反):1111 1111 1111 1111 1111 1111 1111 1000
(3) 补码 (反码+1):1111 1111 1111 1111 1111 1111 1111 1001
-7的二进制也就是 (3) 中得出的。
已知二进制的负数,求对应的十进制:例如拿到-7的二进制(补码),1111 1111 1111 1111 1111 1111 1111 1001
(1) 拿到的是补码,首先减一:1111 1111 1111 1111 1111 1111 1111 1000
(2) 然后求得反码: 1000 0000 0000 0000 0000 0000 0000 0111
(3) 最后求得十进制:122+121+1*20 = 7,再加上符号位就是-7。
特别注意:取反时符号位不变,符号位即最高位
n1 = 0b0110
print(~n1)
# 取反:
# (1)原码(因为是正数,原码和补码相同):0000 0000 0000 0000 0000 0000 0000 0110
# (2)取反:0111 1111 1111 1111 1111 1111 1111 1001
# (3)取反后得到的是一个负数的补码,所以需要转换成原码才能转换成十进制
# (4)补码减一得到反码:0111 1111 1111 1111 1111 1111 1111 1000
# (4)反码取反得到原码:0000 0000 0000 0000 0000 0000 0000 0111
n = 0b00001100 # 12
print(n << 2) # 48 相当于乘以2的2次方
print(n << 3) # 96 相当于乘以2的3次方
print(n >> 2) # 3 相当于处以2的2次方
print(n >> 3) # 1 相当于处以(整除)2的3次方
3 格式化输出
name = '千颂伊'
age = 30
print('她最喜欢' + str(age) + '岁的' + name)
print('她最喜欢%d岁的%s' % (age, name))
4 进制转换
n = 149
result = bin(n) # 十进制转二进制,0b10010101
result = oct(n) # 十进制转八进制,0o225
result = hex(n) # 十进制转十六进制,0x95
注意:是0b、0o、0x。(0是数字零,不是字母欧)
十六进制转二进制:
0x558
0b 0101(5) 0101(5) 1000(8)
0xbac
0b 1011(b) 1010(a) 1100©
十六进制转八进制(先转成二进制):
0x558
0b 0101(5) 0101(5) 1000(8)
0o 010(2) 101(5) 011(3) 000(0)
八进制转二进制:
0o 726
0b 111(7) 010(2) 110(5)
二进制转十六进制:
0b 1000 1010 0101 0111
0x 8 a 5 7
二进制转八进制:
0b 1000 1010 0101 0111
0o 1 0 5 1 2 7