数据类型
最常用的数据类型有三种——字符串(str)、整数(int)和浮点数(float)
字符串str:用引号括起来的文本,不论是 ‘富贵’ 还是’1+2’都是字符串。
整数型int:没有小数点的数字,比如 30,-30
浮点型float:带小数点的数字,比如 30.0,-30.0 ,在科学计数法中,会试用E(或e)来表示10的指数,如e2表示102
3.6e2 = 3.610 = 360.0 3.6e-2 = 3.610= 0.036
布尔值bool:True、False,这里注意他们的写法,如果写成true或TRUE都是错误的,必须是首字母大写。如果不确定一些值的类型可以使用 print(bool(0)) 进行查看。下面给出一些常见的布尔类型:
bool(0) # 整数0被转化为Flase
bool(1) # 非0整数为true
bool('') #(空字符串)被转化为Flase
bool(' ') # 其他非空字符串被转化为true
bool([]) # 空列表被转化为Flase
bool({}) # 空字典被转化为Flase
bool("False") # 其他非空字符串被转化为true
bool(None) # 和0一样,是Flase,但是一定是开头大写
另外浮点数的计算会出现误差,因为计算机在运行计算的时候,会先把计算数值转化成二进制(0和1组合),然后再进行计算然后取整,所以计算时候就会有小尾巴。如何对十进制转二进制有兴趣,可以点击查看。
如果你不知道一个值属于什么类型,我们可以用 print(type(“x”)) 可以查询变量的数据类型,比如:
print(type('3'))
print(type(3))
print(type(3.0))
结果是:
<class 'str'>
<class 'int'>
<class 'float'>
我们知道了数据类型之后,我们该如何进行计算呢?
数学计算
python的计算优先级与平时一样(先乘除后加减,先括号内后括号外)
#常规的四则运算
print(10+3.0) # 结果13.0,当有浮点数参与,结果是浮点数
print(10-3.0) # 结果7.0
print(10*3)
print(10/2) 结果 5.0 # 除法结果总是浮点数
print(0.1+0.2-0.3) #结果是 5.551115123125783e-17 这就是上面说的小尾巴
# //和%的结果永远是整数
print(5//2) #整除 结果是2,不四舍五入,只留整数部分。
print(5 % 2) #取余数,返回是1,看不懂怎么计算可以看下面的详解
print(4 % 2) #取余数,没有余数返回值0,可以%2是否为0判断奇偶数
print(5**2) #幂,返回是5的2次幂 结果25
print(round(2.9)) #四舍五入 结果是3
print(abs(-2.9)) #取绝对值,结果是2.9
# 特殊运算符的先后顺序(从左到右)**、* / % //、+ -
print(20.5 % 2**3//4)
=20.5%8//4
=4.5//4
=1
# 复合赋值运算 + - * / %
a =a+5 等于 a+=5
小技巧:可以通过 help(abs) 来获取用法.
函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:
a = abs # 变量a指向abs函数
print(a(-1)) # 所以也可以通过a调用abs函数
f = float
print(f(666)) # 结果666.0
数据拼接
数据的拼接使用的是加号,并且它们都必须是字符串类型。
不同类型的数据不能直接拼接,比如 ‘我’+3+’岁’ 就是错误的表达,必须把3变为字符串或者使用转义字符。比如下面第4行,ac是字符串,b是整数,所以需要str()转换为字符串进行拼接。
a = '我'
b = 3
c = '岁'
print(a+str(b)+c)
# _____________________________________________________
# 下面是同样实现空格效果的两种写法:
first = "jiao"
last = "chenglong"
# 第一种:常规的空格
full1 = first + " " + last
# 第二种:使用格式化字符串f实现
full2 = f"{first} {last}"
# 打印出来
print(full1)
print(full2)
数据转换
前面我们已经介绍了数据的三种类型,所以现在应该清楚他们的缩写,比如字符串 str,整数 int ,浮点数 float 。那他们能否互转呢?答案是可以的,但是也有一些限制。
str() 转换成字符串
str()函数,不管这个数据是中文、数字、标点还是火星文,只要放到括号里,就能成为字符串类型。
print(str(number))
print('007')
#也可以用引号转换
number = '007'
#他们两个结果是一样的
int() 转换成整数
**
int()函数,要注意整数是进行直接取整,小数是去掉小数末尾(没有四舍五入),但是对于文字类和小数字符串类型是无法转化的。
注意:int()函数无法转换小数形式的字符串,只能通过浮点数转然后在用int。
#整数类字符串 结果是3,请记住只有整数类字符串可以转
print(int('3'))
#浮点数 结果是3,直接去掉尾数而非四舍五入
print(int(3.8))
#字符串和小数类字符串无法转换
print(int('富贵'))
print(int('3.6'))
#小数类字符串正确的转化方法:先转float,然后在使用int,结果是3
print(int(float('3.6')))
float() 转换成浮点数
**
请注意文字类字符串是不可能转换成浮点数的。
#浮点数字符串 结果是3.0和3.5
print(float('3'))
print(float('3.5'))
#文字类字符串无法转换
print(float('富贵'))
**
来一道烧脑题吧:(根据下面前三行的变量,写出要的结果。)}试着我们上面学过的拼接和类型转换,完成下面的习题。要求答案是 “人工智障说:3.8+1等于4 ”。
我们来分解一下,因为‘人工智障说:3.8+1等于’这个已经有了是c赋值的,我们只需要拼接就行,关键是4是怎么来的,(3.8+1或者3,8取整+1)然后取整对不对,因为’3.8’是小数类字符串不能取整(上个例子第9行),所以只能用浮点数3.8+1进行取整,这时候答案是4,但又考虑到和c的文字进行拼接,所以又转换成字符串。
a = '3.8'
b = 1
c = '人工智障说:3.8+1等于'
#下面是答案,先不要看,试着自己想想。
print(c+str(int(float(a)+b)))
这里遗忘最多的就是 ‘3.8’ 看起来是浮点数,其实是字符串,并且只能转换为浮点数。
格式化字符串 f “…”
F-string(Python 3.6+)
适用于3.6以上的版本
age = 36
result = f"小明今年{age}岁了!"
print(result)
format
age = 36
name = '小明'
result = "{}今年{}岁了!".format(name, age) # 不给值,会自动按照顺序填入
print(result) # 小明今年36岁了!
age = 36
name = '小明'
result = "{1}今年{0}岁了!".format(age,name) # 给值,会按照填的顺序填入
print(result) # 小明今年36岁了!
%(已弃用)
它包含 %s 字符串显示 、%f 浮点数显示、%d 整数显示(注意哦,整数不是%i)。因为没有上面的灵活,并且会让代码看起来很乱,已经不用了。只做了解,看到别人这样的写法知道什么意思。
用法都是先占位后给变量,如果是多个,用括号并且一一对应的关系排列。
age = 36
name = '小明'
print('小明今年%d岁了!' % age)
print('%s今年%d岁了!' % (name, age))
格式化数字 {pi:.2f}
简化版
pi = 3.1415926
# F-string(Python 3.6+)
# 冒号之后跟小数点,4代表保留四位,f表示float浮点数,这里得出的结果是会四舍五入
result = f"圆周率{pi:.4f}是一个无限循环小数"
print(result) # 圆周率3.1416是一个无限循环小数
# format
result = "圆周率{:.2f}是一个无限循环小数".format(pi)
print(result) # 圆周率3.14是一个无限循环小数
完整版
# 以下几个参数必须在精度(小数点)之前设置
# 【宽度】设置两段的间距
pi = 3.1415926
result = f"圆周率{pi:50.4f}是一个无限循环小数"
print('\n')
print(result)
# 【符号】有 + -两种符号,没什么用
pi = 3.1415926
result = f"圆周率{pi:+20.4f}是一个无限循环小数"
print(result)
pi = 3.1415926
result = f"圆周率{pi:-20.4f}是一个无限循环小数"
print(result)
# 【对齐】,默认向右对齐:左对齐(<)右对齐(>)居中显示(^)
pi = 3.1415926
result = f"圆周率{pi:<30.4f}是一个无限循环小数"
print(result)
result = f"圆周率{pi:>30.4f}是一个无限循环小数"
print(result)
result = f"圆周率{pi:^30.4f}是一个无限循环小数"
print(result)
# 【填充】把左右空白区域用什么字符填充,常用星号
pi = 3.1415926
result = f"圆周率{pi:*<50.4f}是一个无限循环小数"
print(result)
# 【类型 - 百分数】
pi = 3.1415926
result = f"圆周率{pi:%}是一个无限循环小数" # 直接加百分号
print(result)
pi = 3.1415926
result = f"圆周率{pi:.2%}是一个无限循环小数" # 2位小数的百分号
print(result)
pi = 3.1415926
result = f"圆周率{pi:.0%}是一个无限循环小数" # 0位小数的百分号
print(result)
# 【类型 - 其他进制】
pi = 25
result = f"二进制 +# {pi:#b}"
print(result)
pi = 25
result = f"二进制 {pi:b}"
print(result)
pi = 25
result = f"八进制 +# {pi:#o}"
print(result)
pi = 25
result = f"八进制 {pi:o}"
print(result)
pi = 25
result = f"十六进制 +# {pi:#x}"
print(result)
pi = 25
result = f"十六进制 {pi:x}"
print(result)
# 上面我们用的都是 F-string,也可以使用format,前面给类型,后面占位
pi = 3.1415926
pipi = 3.6666
result1 = "圆周率{:.2f}".format(pi)
print(result1)
# 如果是多个值会默认从前往后带入,也可以给序号
result2 = "圆周率{0:.2f}+{1:.2f}".format(pi, pipi)
print(result2)
result3 = "圆周率{1:.2f}+{0:.2f}".format(pi, pipi)
print(result3)
结果是: