数据类型
上海真的太热了,我觉得我离烧烤只差一撮孜然了......
数据类型
好!
首先来思考一下
什么是数据类型,为什么要对数据分类。
回想一下什么是变量,变量就是用来描述世间万物的状态的,那么世间万物中的任何一个都有很多属性,举个栗子
这里有个小伙子叫nick,身高接近160,体重130,喜欢吃仙人掌和钢丝球,这里的身高和体重都是可以用数字来形容的,可是喜欢吃的东西呢?很明显不行。这时候就引出了数据类型这个概念。
不同的的数据类型
数字类型
字符串类型
列表类型
字典类型
布尔类型
数字类型
一、整型(int)
1.1作用
用来表示人的年龄、各种号码等等
2.2定义
age = 18
完事儿
print(id(age))
print(type(age))
print(age)
4530100848
<class 'int'>
18
二、浮点型(float)
2.1作用
这就是用来表示有小数点的数据,不用过多解释。
2.2定义
salary = 2.1 # salary=float(2.1)
print(id(salary))
print(type(salary))
print(salary)
4569240656
<class 'float'>
2.1
整型和浮点型都可以用来加减乘除和逻辑判断。
字符串(str)
1.1作用
就是表示那些名字啊、爱好啊之类的,如nick吃钢丝球
1.2定义
字符串嘛,就是字符连起来的串串,羊肉串就是羊肉连起来的串串,字符串可放在单引号里,也可以放在单引号里。
name1 = 'nick'
name2 = "egon"
print(id(name1))
print(type(name1))
print(name1)
4418849624
<class 'str'>
nick
不加单双引号会报错哦
1.3如何用
问题来啦问题来啦
如果,我的字符串里面有引号呢。这个时候只需要注意,字符串里有单引号,那包括字符串的就应该用双引号,反则反之。
当两种引号都存在的时候,就上大杀器那就是三引号,单双都行,这个三引号还有个很屌的功能,就是它赋予了字符串换行的功能,如下:
name3 = """nick
chan"""
print(name3)
nick
chan
来和你们讲一下字符串的拼接对内存的使用情况。
我再来举一个栗子
你和一个人被通知要住到一块儿去,你会同意让他住你家吗?他也不会让你住他家,于是,这里就有了一个新家,给你们两个住。然后你们两个的家就会被空出来啦。
自己体会。
字符串的运算:字符串只能乘数字,不可以加减。
name = 'nick '
print(name * 10)
nick nick nick nick nick nick nick nick nick nick
关于字符串大小的比较,日后再讲,我没栗子了。
列表(list)与字典(dict)
讲完了字符串,就来侃侃列表和字典吧,为什么把这两个放一起讲呢,因为我认为这俩兄弟还是比较相像的,放在一起讲会比较好区分。
列表:他可以一次性存储很多数据,这些数据可以是很多数据类型,当然也可以是列表或字典。
字典:他有着他弟弟列表不具有的优点,那就是它是通过键值的形式来存储的。
列表形式:
在[]内用逗号分隔开任意类型的值。
hobby = 'read'
hobby_list = [hobby, 'run', 'girl']
print(id(hobby_list))
print(type(hobby_list))
print(hobby_list)
4558605960
<class 'list'>
['read', 'run', 'girl']
字典形式:
在{}内用逗号分隔开多个元素,每一个元素都是key: value的格式,其中value是任意格式的数据类型,key由于具有描述性的作用,所以key通常是字符串类型。
user_info = {'name': 'nick', 'gender': 'male', 'age': 19,
'company_info': ['oldboy', 'shanghai', 50]}
print(id(user_info))
print(type(user_info))
print(user_info)
4396183344
<class 'dict'>
看明白两者的相同点和不同点了吗?什么!不懂?那我来给你唠唠
列表就是能存很多数据,他通过下标来取数据,第一个就是0,第二个就是1,第n个就是n-1。但是如果一个列表有一千个数据,你要怎么取到中间的数据呢?难不成你一个个点过去?所以这个时候字典就更适合了,它可以通过键值,就是对数据的描述来取值,中间的如果是个体重,你就可以通过weight这个键值来取数据,除非设计这个字典的人他是瞎几把设计的键值,嘿嘿。
这个例子感觉不太好。。。。。。
如何取出列表的数据?
hobby_list = ['read', 'run', 'girl']
# 索引序号 0 1 2
# 取出第二个爱好
print(hobby_list[1])
run
如何取出字典的数据?
# 字典套列表
user_info = {'name': 'nick', 'gender': 'male', 'age': 19,
'company_info': ['oldboy', 'shanghai', 50]}
print(user_info['name'])
print(user_info['company_info'][0])
nick
oldboy
#这是一个列表套字典的例子
students = [
{'name': 'nick', 'age': 19},
{'name': 'egon', 'age': 18}
]
print(students[0]['name'])
nick
# 字典套字典
user_info = {'name': 'nick', 'gender': 'male', 'age': 19, 'company_info': {
'c_name': 'oldboy', 'c_addr': 'shanghai', 'c_num_of_employee': 50}}
print(user_info['name'])
print(user_info['company_info']['c_name'])
nick
oldboy
布尔值(bool)
我一直在想为什么叫布尔值,难道发明的人叫布尔?可不是吉多发明的python吗?
直到我看到了bool....b o o l.
感受到哲学的力量了吗?
布尔值只有两个,就是True和False。对和错。
注意一下,Python中的所有数据都自带布尔值,要么True要么False,只用记住只有0、None、空、False的布尔值为False,其余全都是True。
print(bool(0))
print(bool(None))
print(bool(''))
print(bool([]))
print(bool({}))
print(bool(False))
False
False
False
False
False
False
解压缩
来来来同志们♂我们来讲一下解压缩是什么
我们在使用列表的时候要取多个值怎么做呢?
name_list = ['nick', 'egon', 'jason']
x = name_list[0]
y = name_list[1]
z = name_list[2]
print(f'x:{x}, y:{y}, z:{z}')
???这样取??有这功夫?
name_list = ['nick', 'egon', 'jason', ]
x, y, z = name_list
print(f'x:{x}, y:{y}, z:{z}')
x:nick, y:egon, z:jason
这才是标准姿势啊!
可是如果我们只想要其中部分而不是全部呢?
有请嘉宾 “ _ ” 上台!
不想要的,用下划线就行啦。
name_list = ['nick', 'egon', 'jason', 'tank']
x, y, z, a = name_list
x, _, z, _ = name_list # _相当于告诉计算机不要了,不能以_开头和结尾
还能有一个更骚的操作,只可意会不可言传。
name_list = ['nick', 'egon', 'jason', 'tank', 'kevin', 'jerry']
x, y, _, _, _, z = name_list
x, y, *_, z = name_list
写程序不是用来装逼的,关键是创造价值。python追求的是简洁性,代码不要写的太长了。因此字典也是可以的,但是字典解压缩的是key。
info = {'name': 'nick', 'age': 18}
x, y = info
print(x, y)
name age
虽然说我们需要的只是部分,但是解压缩拿出来的数据都是全部的,其他的数据全都在下划线中,变成了列表的形式。
Python与用户交互
为什么交互我就不说了吧,难道把程序写出来让他自己玩耍吗?至少现在还是需要人机交互的,给程序输入数据。比如去银行ATM取钱,你总得输入密码吧,如果是抢劫那就另当别论了。
name = input('请输入你的姓名:')
pwd = input('请输入你的密码:')
print(type(name))
print(type(pwd))
请输入你的姓名:nick
请输入你的密码:123
<class 'str'>
<class 'str'>
input()就是让你输入的方法,作用就是用来接收你的输入值,然后赋值给变量。
注意,无论你输入的是什么类型的数据,经过该方法之后都会变为字符串类型,到时候按照需要进行强制转换就好了。