默默的学python——数据类型
一、Python语言概览
老生常谈了,但是追本溯源有时候会有它意想不到的好处,全在个人悟性了。
Python的作者,Guido von Rossum,确实是荷兰人。1982年,Guido从阿姆斯特丹大学(University of Amsterdam)获得了数学和计算机硕士学位。然而,尽管他算得上是一位数学家,但他更加享受计算机带来的乐趣。用他的话说,尽管拥有数学和计算机双料资质,他总趋向于做计算机相关的工作,并热衷于做任何和编程相关的活儿。
在那个时候,他接触并使用过诸如Pascal、C、 Fortran等语言。这些语言的基本设计原则是让机器能更快运行。所有的编译器的核心是做优化,以便让程序能够运行。为了增进效率,语言也迫使程序员像计算机一样思考,以便能写出更符合机器口味的程序。在那个时代,程序员恨不得用手榨取计算机每一寸的能力。
然而,这种思考方式让Guido感到苦恼。Guido知道如何用C语言写出一个功能,但整个编写过程需要耗费大量的时间 。他的另一个选择是shell。然而,shell的本质是调用命令。它并不是一个真正的语言。比如说,shell没有数值型的数据类型,加法运算都很复杂。总之,shell不能全面的调动计算机的功能。
Guido希望有一种语言,这种语言能够像C语言那样,能够全面调用计算机的功能接口,又可以像shell那样,可以轻松的编程。
1989年,为了打发圣诞节假期,Guido开始写Python语言的编译/解释器。Python来自Guido所挚爱的电视剧Monty Python’s Flying Circus 。他希望这个新的叫做Python的语言,能实现他的理念(一种C和shell之间,功能全面,易学易用,可拓展的语言)。Guido作为一个语言设计爱好者,已经有过设计语言的(不很成功)的尝试。这一次,也不过是一次纯粹的hacking行为。
1991年,第一个Python编译器(同时也是解释器)诞生。它是用C语言实现的,并能够调用C库(.so文件)。从一出生,Python已经具有了:类(class),函数(function),异常处理(exception),包括表(list)和词典(dictionary)在内的核心数据类型,以及模块(module)为基础的拓展系统。
二、数据类型
Number类型
int 整型 (正整形 0 负整型)
float 浮点型即小数
bool 布尔型 (True 真 False假)
插一个
complex 复数类型
#表达方式一:
complexvar = 5 + 6j
complexvar = 3 - 2j
print(type(complexvar))
print(id(complexvar))
#表达方式二:
complex(实数,虚数)
res = complex(14,2)
print(res) => (14,2)
容器数据类型
str 字符串型
'''用引号引起来的就是字符串,三种引号:单引号 双引号 三引号'''
转义字符:\ (1)把有意义的字符转变为无意义的字符
(2)把无意义的字符转变的有意义
\n 或者 \r\n : 代表"换行"意思
\t : 代表"一个缩进"意思
\r : 代表将\r后面得所有字符拉到该行首
至于其他转义字符,这里不多赘述
特征:可以获取,但不可以修改,有序排列
获取字符串中的数据:跟列表list 元组tuple的取值一模一样(正向下标,反向下标)
元字符串
‘’‘元字符串可以让转义字符失效’’’
str1 = r"本来\n无一物"
str2 = r"F:\work\home"
print(str1)
print(str2)
字符串的格式化
“%d %f %s” 语法 : “字符串” % (实际值)
%d 占位符 d代表整型数据,%nd表示占n个位置
str3 = '他买了%d个苹果' % 3
print(str3)
"""输出结果"""
他买了3个苹果
%f 占位符 f代表浮点型数据 默认保留6位小数点,f前面有数值,则根据数值是多少保留对应小数点
str4 = "今天白菜%f一斤" % 2.35
print(str4)
# 结果为:今天白菜2.350000一斤
# %.2f 保留两位小数,存在四舍五入的情况
str5 = "今天白菜%.2f一斤" % 2.356
print(str5)
# 结果为:今天白菜2.36一斤
%s 占位符 代表字符串
str6 = "%s" % "小白"
print(str6)
# 结果为:小白
list 列表型([])
‘’‘特征:可以获取和修改数据,排列有序’’’
列表的修改
tuple 元组型 ( () )
获取元组中的数据 : 跟列表list的取值一模一样 (正向下标,反向下标)
实例(Python 3.0+)
tup1 = (‘Google’, ‘Runoob’, 1997, 2000)
tup2 = (1, 2, 3, 4, 5 )
tup3 = “a”, “b”, “c”, “d” # 不需要括号也可以
type(tup3)
<class ‘tuple’>
tup1 = ()
元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用:
实例(Python 3.0+)
tup1 = (50)
type(tup1) # 不加逗号,类型为整型
<class ‘int’>
tup1 = (50,)
type(tup1) # 加上逗号,类型为元组
<class ‘tuple’>
set 集合型 ({})
集合(set)是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
创建格式:
parame = {value01,value02,...}
或者
set(value)
dict 字典 ( {“aaa”:“bbb”,})
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示:
d = { key1 : value1, key2 : value2, key3 : value3 }
特征 : 可以获取,可以修改,无序排列
底层使用了哈希算法,储存的数据是散列,键值对储存的数据
获取字典当中的数据:可以获取,直接输入冒号左边的键即可取值的数据
修改字典当中的数据:可以修改,直接将要改的值替换掉 键 就可实现修改
一般在命名字典的键时,推荐使用字符串,按照变量命名的字符串.
补充
获取数据类型的函数:type()
获取变量地址的函数:id()
三、四则运算
不过,对于这么多的算术运算符,我建议你先看一遍,有个大致的印象就行。你可以先把这张图保存上,等用的时候再找出来,对应着查阅就可以。
咱们再说说一样的——运算优先级:Python世界的运算优先级,和我们平时的计算优先级是一样的
四、字符串拼接
1、利用三个单引号和+号
这里我用python写了一个用户交互,就是需要用户输入一下name、age、job和salary,之后定义了一个参数info(最外面那三个单引号的作用是多行打印),然后我们再用print打印。就可以把用户输入的参数打印出来了,但是这种方法因为所占存储较大所以并不推荐,具体代码和效果如下:
name=input("name:")
age=input("age:")
job=input("job:")
salary=input("salary:")
info='''
--------info of '''+name+''' -------
Name: '''+name+'''
Age:'''+age+'''
Job:'''+job+'''
Salary:'''+salary+'''
'''
print(info)
输出结果如下图:
2、是利用了%s
这里的%s就相当于java里边的string字符串类型,同样的%d是指数字类型,%f是指浮点类型。%s相当于是一个占位符,我在info的最后,通过%()来依次定义每个占位符上的字符串分别是什么。注意这里的顺序一定不能错。代码如下:
name=input("name:")
age=input("age:")
job=input("job:")
salary=input("salary:")
info='''
--------info of %s -------
Name: %s
Age:%s
Job:%s
Salary:%s
'''%(name,name,age,job,salary)
print(info)
这里还可以有一个拓展,大家看这里的age,我们看着它是个数字对不对,这样,我们来打印一下它的数据类型,输入一下print(type(age)),我们会发现输出的是str,就是字符串。这就说明这里的age默认是字符串的格式。那么怎么让它变成我们想要的数字格式呢?这个时候我们可以用int()方法来强制转换,就是把原来的age=input(“age:”)改成age=int(input(“age:”)) ,这样age就是数字类型了。
输出结果如下图:
3、是利用了{}大括号和里边的参数
注意括号里边并不是变量而是我自己定义的一个参数,所以我这里加了一个下划线,然后最后用了.format()方法来格式化,就是给每个参数赋值,把变量的值赋给了参数,这种方法是比较常用且推荐的。代码和效果如下:
name=input("name:")
age=input("age:")
job=input("job:")
salary=input("salary:")
info2='''
--------info2 of {_name} -------
Name:{_name}
Age:{_age}
Job:{_job}
Salary:{_salary}
''' .format(_name=name,_age=age,_job=job,_salary=salary)
print(info2)
输出结果如下图:
4、最后一种方法和第三种类似
都是利用了大括号{},只不过这里的大括号里边不再是参数,而是数字,这个数字有点类似于数组下标的意思,相当于定义了数组的顺序。在最后我们利用.format() 方法直接定义第0个是哪个变量、第一个是哪个变量…以此类推。代码和效果如下:
name=input("name:")
age=input("age:")
job=input("job:")
salary=input("salary:")
info3='''
--------info2 of {0} -------
Name:{0}
Age:{1}
Job:{2}
Salary:{3}
''' .format(name,age,job,salary)
print(info3)
输出结果如下图:
五、强制类型转换
函数 | 作用 |
---|---|
int(x) | 将x转换成整数类型 |
float(x) | 将 x 转换成浮点数类型 |
complex(real, [,imag]) | 创建一个复数 |
str(x) | 将 x 转换为字符串 |
repr(x) | 将 x 转换为表达式字符串 |
eval(str) | 计算在字符串中的有效 Python 表达式,并返回一个对象 |
chr(x) | 将整数 x 转换为一个字符 |
ord(x) | 将一个字符 x 转换为它对应的整数值 |
hex(x) | 将一个整数 x 转换为一个十六进制字符串 |
oct(x) | 将一个整数 x 转换为一个八进制的字符串 |
标准输入输出
print()函数
# 括号内是数字的情况
print(520)
# 括号内是单引号的情况。
print('一起玩吧')
# 括号内是双引号的情况。
print("一起玩吧")
# 括号内单双引号同时存在的情况。
print("Let's play")
# 当然,括号内也可以是三引号,参考上面单双同时出现的情况就知道了。
之所以现在才说输入输出,是因为这里面实在可以包含太多东西了,不要被上面的这几个例子所迷惑,print可以打印各种数据类型
input()函数
首先,让我们通过一段代码,来看一看input()函数是如何使用的:
input(‘请在以下四个选项【格兰芬多;斯莱特林;拉文克劳;赫奇帕奇】中,输入你想去的学院名字:’)
input('请在以下四个选项【格兰芬多;斯莱特林;拉文克劳;赫奇帕奇】中,输入你想去的学院名字:')
input()函数是输入函数。就上面例子来讲,它需要你输入针对括号内’请在以下四个选项【格兰芬多;斯莱特林;拉文克劳;赫奇帕奇】中,输入你想去的学院名字:'的答案。
所以,当你在函数的括号内写出问题时,input()函数会将此问题原样显示在屏幕上,并在终端区域等待你针对此问题的回答。
可是,我们为什么要在终端处输入回答呢?不输入行不行?
事实上,我们可以把input()函数当作一扇链接现实世界与代码世界的门。
当问题从代码世界传递给我们,可我们却没有回答时,这扇等待输入的input()大门,就会一直处于敞开状态,一直等着你往里送回答。
注意点
对于input()函数来说,不管我们输入的回答是什么,不管你输入的是整数1234,还是字符串『隐形斗篷是我最想拥有的魔法』,input()函数的输入值(搜集到的回答),永远会被【强制性】地转换为【字符串】类型。
这时候就要对输入的数据进行强制类型转换了:choice = int(input(‘请输入您的选择:’))