课时5:闲聊之Python的数据类型

目录:

一、引言

二、数据类型

  >整型

  >浮点型

  >布尔类型

三、类型转换

四、获得关于类型的信息

五、课时05课后习题及答案

***********

一、引言

***********

大家还记得‘520’和520的区别吗?

没错,带了引号的,无论是单引号还是双引号或者是三引号,都是字符串;但不带引号的,就是数字。字符串相加叫作拼接。

>>> "520"+'1314'
'5201314'
>>> 520+1314
1834

今天来介绍一些Python的数据类型,包括整型、浮点型、布尔类型、复数类型等。

****************

二、数据类型

****************

1、整型

整型说白了,就是平时所见的整数,Python3的整数已经与长整型进行了无缝的结合,现在的Python3的整型类似于Java的BigInteger类型,它的长度不受限制。  

如果说非要有个限制,那只限于计算机的虚拟内存总数。所以用Python3很容易进行大数的计算。

2、浮点型

浮点型就是平时所说的小数。Python区分整型和浮点型的唯一方式,就是看有没有小数点。

谈到浮点型,不得不提E记法,E记法就是平常所说的科学记数法,用于表示特别大和特别小的数。

>>> a=0.000000000000000000025
>>> a
2.5e-20
>>> 150000000000
150000000000
>>> 1.5e11
150000000000.0

这个E的意思是指数,指底数为10,E后边的数字是10的多少次幂。

3、布尔类型

布尔类型事实上是特殊的整型,True相当于整数值1,False相当于整数值0.

>>> True + False
1
>>> True + True
2
>>> True/False
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    True/False
ZeroDivisionError: division by zero

当然把True和False当成1和0来参与这种运算的这种做法是不妥的。

***************

三、类型转换

***************

接下来介绍几个跟数据类型紧密相关的函数:int()、float()、str().

1、int()的作用就是将一个字符串或浮点数转换为一个整数

>>> a = '520'
>>> b = int(a)
>>> a,b
('520', 520)
>>> c = 5.99
>>> d = int(c)
>>> c,d
(5.99, 5)

注意了,如果是浮点数转换为整数,那么Python会采取”截断“处理,就是把小数点后的数据直接砍掉,注意不是四舍五入哦。

补充:

>>> a = int("小甲鱼")
Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    a = int("小甲鱼")
ValueError: invalid literal for int() with base 10: '小甲鱼'

”小甲鱼“是一个字符串,但不是一个表示数字的字符串,它是一个编码,编码跟数字没有关系。所以会报错。

2、float()的作用是将一个字符串或整型转换成一个浮点数(就是小数)

>>> a = "520"
>>> b = float(a)
>>> a,b
('520', 520.0)
>>> c = 520
>>> d = float(c)
>>> c,d
(520, 520.0)

3、str()的作用是将一个数或任意其他类型转换成一个字符串

>>> a = 5.99
>>> b = str(a)
>>> a,b
(5.99, '5.99')
>>> c = str(5e15)
>>> c
'5000000000000000.0'
>>> d = str(15)
>>> d
'15'
>>> c = str(5e19)
>>> c
'5e+19'

****************************

四、获得关于类型的信息

****************************

Python提供了一个函数,可以明确的告诉我们变量的类型,这就是type函数:

>>> type("520")
<class 'str'>
>>> type(5.20)
<class 'float'>
>>> type(520)
<class 'int'>
>>> type(true)
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    type(true)
NameError: name 'true' is not defined
>>> type(True)
<class 'bool'>

我们更建议使用isinstance()这个BIF来确定变量的类型。这个BIF有两个参数:第一个是待确定类型的数据;第二个是指定一个数据类型。

>>> type(True)
<class 'bool'>
>>> a = "小甲鱼"
>>> isinstance(a,str)
True
>>> isinstance(520,float)
False
>>> isinstance(520,int)
True

*******************************

五、课时05课后习题及答案

*******************************

0. 在 Python 中,int 表示整型,那你还记得 bool、float 和 str 分别表示 什么吗?

答:布尔类型,浮点和字符串。

1. 你知道为什么布尔类型(bool)的 True 和 False 分别用 1 和 0 来代替 吗?

计算机只认识二进制数,所以所有的编程语言最终都会转换成简单的二进制序列给CPU按照一定的规则解析。 由于二进制只有两个数:0 和 1,因此用 0 和 1 来表示False和True再适合不过了,因为不用浪费资源在转换的过程上!

2. 使用 int() 将小数转换为整数,结果是向上取整还是向下取整呢?

小数取整会采用比较暴力的截断方式,即向下取整。

>>> int(5.3)
5
>>> int(5.9)
5

3. 我们人类思维是习惯于“四舍五入”法,你有什么办法使得 int() 按照“四 舍五入”的方式取整吗?

int() 固然没那么“聪明”,但机器是死的,人是活的!

5.4 “四舍五入”结果为:5,int(5.4+0.5) == 5

5.6 “四舍五入”结果为:6,int(5.6+0.5) == 6

>>> int(5.4+0.5)
5
>>> int(5.6+0.5)
6

4. 取得一个变量的类型,视频中介绍可以使用 type() 和 isinstance(),你更 倾向于使用哪个?

type()与isinstance()的区别

共同点:两者都可以判断对象类型

不同点:对于一个 class 类的子类对象类型判断,type就不行了,而 isinstance 可以。

>>> a = 'hello'
>>> type(a)
<class 'str'>
>>> isinstance(a,str)
True
>>> isinstance(a,int)
False

5. Python3 可以给变量命名中文名,知道为什么吗?

Pyhton3 源码文件默认使用utf-8编码(支持中文),这就使得以下代码是合法的:

>>> 小可爱 = '蒋蒋'
>>> print(小可爱)
蒋蒋

动动手

0.针对视频中小甲鱼提到的小漏洞,再次改进我们的小游戏:当用户输入错误 类型的时候,及时提醒用户重新输入,防止程序崩溃。

Python 的字符串内建函数举例:

isdigit()
如果字符串只包含数字则返回 True 否则返回 False..
isupper()
如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
代码:
import random
times = 3
secret = random.randint(1,10)
print('-----------------------我爱鱼C工作室-------------------------')
guess = 0
print('不妨猜一下小甲鱼现在心里想的是哪个数字:',end='')
while (guess != secret) and (times > 0):
	temp = input()
	while not temp.isdigit():
		temp = input('抱歉,您的输入有误,请输入一个整数:')
	guess = int(temp)
	times = times - 1
	if guess == secret:
		print('卧槽,你是小甲鱼心里的蛔虫吗?!')
		print('哼,猜中了也没有奖励!')
	else:
		if guess > secret:
			print('哥,大了大了~~~')
		else:
			print('嘿,小了小了~~~')
		if times > 0:
			print('再试一次吧:' , end='')
		else:
			print('机会用光咯T_T')
print("游戏结束,不玩啦^_^")

运行结果:
-----------------------我爱鱼C工作室-------------------------
不妨猜一下小甲鱼现在心里想的是哪个数字:dfsdf
抱歉,您的输入有误,请输入一个整数:5.4
抱歉,您的输入有误,请输入一个整数:5
卧槽,你是小甲鱼心里的蛔虫吗?!
哼,猜中了也没有奖励!
游戏结束,不玩啦^_^

***Repl Closed***

1.写一个程序,判断给定年份是否为闰年。(注意:请使用已学过的 BIF 进行灵活运用)

这样定义闰年的:能被4整除但不能被100整除,或者能被400整除都是闰年。

自己写的代码:
inputyear = input('请输入一个年份:')
while not inputyear.isdigit():
	inputyear = input('抱歉,您输入有误,请输入一个整数:')
judgeyear = int(inputyear)
if judgeyear%4 == 0 and judgeyear%100 != 0 or judgeyear%400 == 0:
	print(str(judgeyear) + '是闰年')
else:
	print(str(judgeyear) + '不是闰年')

运行结果:
请输入一个年份:dfdfgfg
抱歉,您输入有误,请输入一个整数:5.6
抱歉,您输入有误,请输入一个整数:2019
2019不是闰年

***Repl Closed***

小甲鱼的代码:

2. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!

发表回复