Python 数据类型
一、整数
Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。
计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。
二、浮点数
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x10^9就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
三、字符串
字符串是以''或""括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。
四、布尔值
布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来。
布尔值可以用and、or和not运算。
and运算是与运算,只有所有都为 True,and运算结果才是 True。
or运算是或运算,只要其中有一个为 True,or 运算结果就是 True。
not运算是非运算,它是一个单目运算符,把 True 变成 False,False 变成 True。
五、空值
空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
(或者# -*- coding:utf-8 -*- )
#coding:utf-8 // 如下字符串包含中文,如果不加这一行,报错:SyntaxError: Non-ASCII character
print('hello worlds打发')
print 'hello,python.'
print 'hello,','python.' //遇到逗号“,”会输出一个空格
print ('hello,python.')
print ('hello,'+'python.')
结果
注释
Python的注释以 # 开头。
变量
在Python程序中,变量是用一个变量名表示,变量名必须是大小写英文、数字和下划线(_)的组合,且不能用数字开头。
在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。
a = 123 # a是整数
print a
a = 'imooc' # a变为字符串
print a
这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。
静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java是静态语言,赋值语句如下(// 表示注释):
int a = 123; // a是整数类型变量
a = "mooc"; // 错误:不能把字符串赋给整型变量
理解变量在计算机内存中的表示也非常重要。当我们写:a = 'ABC'时,Python解释器干了两件事情:
在内存中创建了一个'ABC'的字符串;
在内存中创建了一个名为a的变量,并把它指向'ABC'。
也可以把一个变量a赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据,例如下面的代码:
a = 'ABC'
b = a
a = 'XYZ'
print b # b的值是'ABC',还是'XYZ'呢?
执行a = 'ABC',解释器创建了字符串 'ABC'和变量 a,并把a指向 'ABC':
执行b = a,解释器创建了变量 b,并把b指向 a 指向的字符串'ABC':
执行a = 'XYZ',解释器创建了字符串'XYZ',并把a的指向改为'XYZ',但b并没有更改:
所以,最后打印变量b的结果自然是'ABC'了。
字符串
字符串可以用''或者""括起来表示。字符串本身包含',用"",如果字符串包含",我们就可以用' '。
如果字符串既包含'又包含"怎么办?这个时候,就需要对字符串的某些特殊字符进行“转义”,Python字符串用 \ 进行转义。
比如要表示字符串 Bob said "I'm OK".
可以写为:'Bob said \"I\'m OK\".'
注意:转义字符 \ 不计入字符串的内容中。
常用的转义字符还有:
\n 表示换行
\t 表示一个制表符
\\ 表示 \ 字符本身
如果要表示多行字符串,可以用'''...'''表示:
'''Line 1
Line 2
Line 3'''
Python中整数和浮点数
Python的整数运算结果仍然是整数,浮点数运算结果仍然是浮点数。整数和浮点数混合运算的结果是浮点数。
为什么要区分整数运算和浮点数运算呢?这是因为整数运算的结果永远是精确的,而浮点数运算的结果不一定精确,因为计算机内存再大,也无法精确表示出无限循环小数,比如 0.1 换成二进制表示就是无限循环小数。
print 11/4 # 2
print 11%4 # 3
print 11.0/4 #2.75
Python中布尔类型
布尔运算在计算机中用来做条件判断,根据计算结果为True或者False,计算机可以自动执行不同的后续代码。
在Python中,布尔类型还可以与其他数据类型做 and、or和not运算,请看下面的代码:
a = True
print a and 'a=T' or 'a=F' # 输出a=T
Python把0、空字符串''和None看成 False,其他数值和非空字符串都看成 True。
要解释上述结果,又涉及到** and 和 or 运算的一条重要法则:短路计算**。
1. 在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。
2. 在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。
list
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
构造list非常简单,按照上面的代码,直接用 [ ] 把list的所有元素都括起来,就是一个list对象。通常,我们会把list赋值给一个变量,这样,就可以通过变量来引用list:
classmates = ['Michael', 'Bob', 'Tracy']
由于Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据:
L = ['Michael', 100, True]
一个元素也没有的list,就是空list:
empty_list = []
此外,list中又可以包含list
fan = [["liz",12],
["tom",23],
["Lisa",24]]
print type(fan) # 输出fan的数据类型
Python 索引访问list
L = ['hello', 'hi', 'bye']
print L[0] #输出hello
倒序访问list
我们可以用 -1 这个索引来表示最后一个元素
L = ['hello', 'hi', 'bye']
print L[-1] #输出bye
print L[-2] # 输出hi
print L[-3] # 输出hello
注意访问list,不要越界!
添加新元素
- 向list的尾部添加元素 append
L = ['Adam', 'Lisa', 'Bart']
L.append('Paul')
print L #输出 ['Adam', 'Lisa', 'Bart', 'Paul']
或者
L = L + ['hello']
print L # 输出 ['Adam', 'Lisa', 'Bart','hello']
- 向list指定的位置插入新元素用insert( )方法,接受两个参数,第一个是索引号,第二个是新元素。
L = ['Adam','Lisa','Bart']
想把一个新元素Paul插入到Adam的前面,也就是说Paul将要放在第一位
L.insert(0,'Paul') # 或者L.insert(-3,'Paul')
print L # 输出['Paul', 'Adam', 'Lisa', 'Bart']
从list删除元素
pop()方法总是删掉list的最后一个元素,并且它还返回这个元素。
L = ['Adam','Lisa','Bart','Paul']
L.pop() #输出Paul
print L #['Adam','Lisa','Bart']
如果想要删除的元素不是最后一个,则需要指定它的索引
# 比如想要删除Bart
L = ['Adam','Lisa','Bart','Paul']
L.pop(2) #输出Bart
print L #['Adam','Lisa','Paul']
还有del()方法
fan = [["liz",12],
["tom",23],
["Lisa",24]]
del(fan[1])
print fan
替换元素
对list的某一个索引赋值,就可以直接用新的元素替换掉原来的元素,list包含的元素个数保持不变。
L = ['Adam', 'Lisa', 'Bart']
#想要将Adam和Bart的位置变换一下
L[0] = 'Bart'
print L # 输出['Bart', 'Lisa', 'Bart']
L[-1] = 'Adam'
print L # 输出 ['Bart', 'Lisa', 'Adam']
tuple
tuple和list非常类似,但是tuple一旦初始化就不能修改。访问也是通过下标,用小括号() 表示。
t = ('Adam','Lisa','Bart')
print t # 输出('Adam','Lisa','Bart')
这个 t 就不能改变了,tuple没有 append()方法,也没有insert()和pop()方法。
获取 tuple 元素的方式和 list 是一模一样的,我们可以正常使用 t[0],t[-1]等索引方式访问元素,但是不能赋值成别的元素。
创建单元素tuple
包含0个元素的tuple,也就是空tuple,直接用()表示。
t = ()
print t #输出()
为避免歧义,单元素tuple要多加一个逗号“, ”
t = (1,)
print t # 输出 (1,)
多元素 tuple 加不加这个额外的“,”效果是一样的:
t = (1, 2, 3,)
print t # 输出 (1, 2, 3)
“可变”的tuple
t有3个元素,'a','b'和一个list:['A', 'B']。list作为一个整体是tuple的第三个元素。
t = ('a','b',['A','B'])
print t[2] # 输出 ['A','B']
将list的两个元素改一改
不是说tuple一旦定义后就不可变了吗?怎么现在又变了?
tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每一个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
if语句
直接上例子:
age = 20
if age >= 18:
print 'Your age is',age
print 'adult'
print 'END'
注意:Python的缩进规则,具有相同缩进的代码被视为代码块,进行缩进的时候,记住千万不要混用tab和空格,只许坚持用一种。
if语句后接表达式,然后用: 表示代码块开始
如果你在Python交互环境下敲代码,还要特别留意缩进,并且退出缩进需要多敲一行回车:
>>> age = 20
>>> if age >= 18:
... print 'your age is', age
... print 'adult'
...
your age is 20
adult
if-else
score = 55
if score >= 60:
print 'passed'
else:
print 'failed'
if-elif-else
score = 85
if score >= 90:
print 'excellent'
elif score >= 80:
print 'good'
elif score >= 60:
print 'passed'
else:
print 'failed'
for循环
L = ['Adam', 'Lisa', 'Bart']
for name in L:
print name
while
计算100以内奇数的和
sum = 0
x = 1
while x < 100:
sum = sum + x
x += 2
print sum
break退出循环
用for循环或者while循环,如果要在循环体内直接退出循环,可以使用break语句。
# 计算1至100的整数和
sum = 0
x = 1
while True:
sum = sum + x
x = x + 1
if x > 100:
break
print sum
continue继续循环
在循环过程中,可以用break退出当前循环,还可以用continue跳过后续循环代码,继续下一次循环。
# 计算0-100中的奇数的和
sum = 0
x = 0
while True:
x = x + 1
if x > 100:
break
if x % 2 == 0:
continue
sum = sum + x
print sum
多重循环
对100以内的两位数,请使用一个两重循环打印出所有十位数数字比个位数数字小的数,例如,23(2 < 3)。
for x in [1,2,3,4,5,6,7,8,9]:
for y in [1,2,3,4,5,6,7,8,9]:
if x < y:
print x * 10 +y
dict
d = {
'Adam':95,
'Lisa':85,
'Bart': 59,
'Paul':75
}
访问dict
使用d[key]的形式来查找对应的value。
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
print 'Adam:',d['Adam']
print 'Lisa:',d['Lisa']
print 'Bart:',d['Bart']
# 使用dict本身提供的一个get方法,在Key不存在的时候,返回None
print d.get('Bart') #输出59
print d.get('Paul') #输出None
# 判断key是否存在,用 in 操作符
if 'Lisa' in d:
print d['Lisa']
list的切片
# 索引 0 1 2 3 4 5 6 7
fam = ['ware', 12, 'Tom', 122, 'DS', 13, 'Lisa', 121]
# [起点:终点] 起点对应的包含,终点对应的不包含
print fam[3:5] # 输出[122,'DS']
print fam[1:4] # 输出[12, 'Tom', 122]
# 没有指定起点
print fam[:4] # 输出 ['ware', 12, 'Tom', 122]
# 没有指定终点
print fam[5:] #输出 [13, 'Lisa', 121]
关于list
将x赋给y,拷贝的并不是list 即x的内容,而是x的引用,即地址,x和y在内存中指向的是同一个地址。不管改变x的值,还是y的值,打印出俩者的值都是一样的,因为它们是同一个list。
要想完全创建一个新的list,和x一样的list,可以通过list(x) 或者list的切片方式x[:]
函数
list中的方法
# 获取某个元素的索引
L = ['Lisa','Paul','Bart','Paul']
L.index('Bart') # 输出2
# 某个元素在list中出现的次数
L.count('Paul') # 2
str的方法
将字符串的首字母大写
sister = 'lis'
print sister.capitalize() #输出Lis
# 替换某些字符
sister = sister.replace('s','sa')
print sister #输出lisa
# 获取某个字母在字符串中的索引
print sister.index('i') # 1