Python入门第二课--数据类型、条件语句

Python中整数和浮点数

Python支持对整数和浮点数直接进行四则混合运算,运算规则和数学上的四则运算规则完全一致。
使用括号可以提升优先级,这和数学运算完全一致,注意只能使用小括号,但是括号可以嵌套很多层。
和数学运算不同的地方是,Python的证书运算结果任然是正式,浮点数运算结果仍然是浮点数:
1 + 2 = 3 # ==> 整数 3
1.0 + 2.0 - 3.0 # ==> 浮点数数 3.0
但是整数和浮点数混合匀速三的结果就变成浮点数了: 1 + 2.0 = 3.0
Python的整数除法,即使除不尽,结果仍然是整数,余数直接被扔掉。不过,Python提供了一个秋雨的运算%可以计算余数: 11 % 4 # ==> 3
如果我们要计算11 / 4 的精确结果,按照“整数和浮点数混合运算的结果是浮点数”的法则,把两个数中的一个变成浮点数在运算就没问题了:11.0 / 4 # ==> 2.75

Python 中布尔类型

布尔类型只有True和False两种值,但是布尔类型有以下几种运算:
与运算:只有两个布尔值都为True时,计算结果才为True。
或运算:只要有一个布尔值为True,计算结果就是True.
非运算:把True变为False,或把False变为True。(布尔运算在计算机中用来做条件判断,根据计算结果为True或False,计算机可以自动执行不同的后续代码)
Python把 0 、空字符串 ‘’、和None看成是False,其他数值和非空字符串都看成是True。
短路计算:
1、在计算 a and b 时,如果 a 是False,则根据与运算法则,整个结果必定为 Flase,因此返回a;如果 a 是True,则整个计算结果必定取决于b,因此返回b
2、在计算 a or b 时,如果 a 是True,则根据或运算法则,整个计算结果必定为True,因此返回a;如果a是False,则整个计算结果必定取决于b,因此返回b。
所以,Python解释器在做布尔运算时,只要能提前确定计算结果,它就不会往后算了,直接返回结果。

Python创建list

Python内置的一种数据类型是列表:list。list 是一种有序的集合,可以随时添加和删除其中的元素。
list是数学意义上的有序集合,也就是说,list中的元素是按照顺序排列的。
构造list非常简单,直接用[ ] 把list的所有元素都括起来,就是一个list对象。通常,我们会把list赋值给一个变量,这样,就可以通过变量来引用list:

classmates = [‘Michael’, ‘Bob’, ’Tracy’]
classmates # 打印classmates变量的内容
[‘Michael’, ‘Bob’, ’Tracy’] # 输出的结果
由于Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据:
L = [‘Michael’, 100, True]
一个元素也没有的list,就是空list。

Python按照索引访问list

由于list是一个有序集合,所以,我们可以用一个list按分数从高到底表示出办理的3个同学:

L = ['Adam', 'Lisa', 'Bart’]
若想拿到第 i 个同学的名字就需要这样写:L[i]

Python之倒序访问list

在一个list中我们若想得到最后一名同学的名字,可以用-1这个索引来表示最后一个元素。相应的,其他的一次类推。

Python之添加新元素

将一个新的元素添加到现有的list当中去
第一个方法,就是用list的 append() 方法,把新的元素追加到list的末尾;(append() 方法,总是把新的元素添加到list的尾部)
第二个方法,是 insert() 方法,它接受两个参数,第一个参数是索引号,第二个参数是待添加的新元素;

L = ['Adam', 'Lisa', 'Bart']
L.insert(0, 'Paul')
print L
['Paul', 'Adam', 'Lisa', 'Bart']

Python从list删除元素

如果我们想要删除list中的最后一个元素,我们可以使用pop() 方法删除:

L = ['Adam', 'Lisa', 'Bart', 'Paul']
L.pop()
'Paul'
print L
['Adam', 'Lisa', 'Bart']

pop() 方法总是删掉list的最后一个元素,并且它还返回这个元素,所以我们执行pop() 方法后,会打印出最后一个元素。

pop(i) 表示把list中 索引为 i 的元素删除。

Python中替换元素

对list中的某一个索引赋值,就可以直接用新的元素替换掉原来的元素,list包含的元素个数保持不变。

Python之创建tuple

tuple 是另一种有序的列表,中文翻译为“元组”。tuple和list非常类似。但是,tuple一旦创建完毕,就不能修改了。
创建tuple和创建list唯一不同之处是用 () 替代了 []
tuple 没有 append() 方法,也没有 insert() 方法。
获取tuple元素的方式和list是一模一样的,可以使用索引访问元素,但是不能赋值成别的元素。

Python之创建单元素tuple

tuple和list一样,可以包含 0 个、1 个和任意多个元素。
包含 0 个元素的tuple,也就是空tuple,直接用 () 表示。
() 既可以表示tuple,又可以作为括号表示运算时的优先级,结果(1)被Python解释器计算出结果 1 ,导致我们得到的不是tuple,而是整数 1 。
正式因为用() 定义单元素的tuple有歧义,所以Python规定,单元素tuple要多加一个逗号“,”,这样就避免了歧义:

t = (1,)
print t
(1,)
Python在打印单元素tuple时,也自动添加了一个“,”,为了更明确的告诉你这个一个tuple.

Python之“可变”的tuple

t = ('a', 'b', ['A', 'B'])
注意到 t 有 3 个元素:'a','b'和一个list:['A', 'B']。list作为一个整体是tuple的第3个元素。list对象可以通过 t[2] 拿到:
L = t[2]

然后,我们把list的两个元素改一改:

L[0] = 'X'
L[1] = 'Y'

再看看tuple的内容:

print t
('a', 'b', ['X', 'Y'])

不是说tuple一旦定义后就不可变了吗?怎么现在又变了?
别急,我们先看看定义的时候tuple包含的3个元素:


当我们把list的元素'A'和'B'修改为'X'和'Y'后,tuple变为:


表面上看,tuple的元素确实变了,但其实变的不是 tuple 的元素,而是list的元素。
tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
理解了“指向不变”后,要创建一个内容也不变的tuple怎么做?那就必须保证tuple的每一个元素本身也不能变。

Python之if语句

age = 20
if age >= 18:
print 'your age is', age
print 'adult'
print 'END'
注意: Python代码的缩进规则。具有相同缩进的代码被视为代码块,上面的3,4行 print 语句就构成一个代码块(但不包括第5行的print)。如果 if 语句判断为 True,就会执行这个代码块。
缩进请严格按照Python的习惯写法:4个空格、不要使用tab、更不要混合tab和空格,否则很容易造成索引引起的语法错误。
注意:
If语句后接表达式,然后用 : 表示代码块开始。
如果你在Python交互环境下敲代码,还要特别留意缩进,并且推出缩进需要多敲一行回车:

age = 20
if age >= 18:
... print 'your age is', age
... print 'adult'
...
your age is 20

print t
(1,)
Python在打印单元素tuple时,也自动添加了一个“,”,为了更明确的告诉你这个一个tuple.

#Python之“可变”的tuple
>>> t = ('a', 'b', ['A', 'B'])
注意到 t 有 3 个元素:'a','b'和一个list:['A', 'B']。list作为一个整体是tuple的第3个元素。list对象可以通过 t[2] 拿到:
>>> L = t[2]

然后,我们把list的两个元素改一改:
>>> L[0] = 'X'
>>> L[1] = 'Y'

再看看tuple的内容:
>>> print t
('a', 'b', ['X', 'Y'])

不是说tuple一旦定义后就不可变了吗?怎么现在又变了?
别急,我们先看看定义的时候tuple包含的3个元素:




当我们把list的元素'A'和'B'修改为'X'和'Y'后,tuple变为:




表面上看,tuple的元素确实变了,但其实变的不是 tuple 的元素,而是list的元素。
tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
理解了“指向不变”后,要创建一个内容也不变的tuple怎么做?那就必须保证tuple的每一个元素本身也不能变。

#Python之if语句
>age = 20
if age >= 18:
print 'your age is', age
print 'adult'
print 'END'
注意: Python代码的缩进规则。具有相同缩进的代码被视为代码块,上面的3,4行 print 语句就构成一个代码块(但不包括第5行的print)。如果 if 语句判断为 True,就会执行这个代码块。
缩进请严格按照Python的习惯写法:4个空格、不要使用tab、更不要混合tab和空格,否则很容易造成索引引起的语法错误。
注意:
If语句后接表达式,然后用 : 表示代码块开始。
如果你在Python交互环境下敲代码,还要特别留意缩进,并且推出缩进需要多敲一行回车:
>>> age = 20
>>> if age >= 18:
... print 'your age is', age

... print 'adult'
...
your age is 20
adult

Python之 if-else

当if语句判断表达式的结果为True时,就会执行if 包含的代码块。
if ... else …
if age >= 18:

print 'adult'

else:
print ‘teenager'
利用if … else ...语句,我么可以根据条件表达式的值为True或False,分别执行if代码或或者else代码块。

Python之 if-elif-else

elif 意思就是else if。
特别注意:
这一系列条件判断会从上到下依次判断,如果某个判断为True,执行完对应的代码块,后面的条件判断就直接忽略,不再执行了。

Python之 for循环

Python 的for循环可以依次把list或tuple的每个元素迭代出来:
L = ['Adam', 'Lisa', 'Bart']
for name in L:
print name
注意:name 这个变量是在for循环中定义的,意思是,依次取出list中的每一个元素,并把元素赋值给name,然后执行for循环体(就是缩进的代码块)。

Python之 while循环

和for循环不同的另一种循环是while循环,while循环不会迭代list或tuple的元素,而是根据表达式判断循环是否结束。
N = 10
x = 0
while x < N:
print x
x = x + 1
while 循环每次先判断 x < N ,如果为True,则执行循环体的代码块,否则,退出循环。
在循环体内,x = x + 1 会让x 不断增加,最终应为x < N不成立而退出循环。
如果没有这一个语句,while 循环在判断x < N时总是为True,就会无限循环下去,变成死循环,所以要特别留意while循环的退出条件。

Python之 break退出循环

用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句:
sum = 0
x = 1
while True:
sum = sum + x
x = x + 1
if x > 100:
break
print sum

Python之 continue继续循环

在循环过程中,可以用break退出当前循环,还可以用continue跳过后续循环代码,继续下一次循环。
假设我们已经写好了利用for循环计算平均分的代码:
L = [75, 98, 59, 81, 66, 43, 69, 85]
sum = 0.0
n = 0
for x in L:
sum = sum + x
n = n + 1
print sum / n

现在老师只想统计及格分数的平均分,就要把 x < 60 的分数剔除掉,这时,利用 continue,可以做到当 x < 60的时候,不继续执行循环体的后续代码,直接进入下一次循环:

for x in L:
if x < 60:
continue
sum = sum + x
n = n + 1

Python之 多重循环

在循环内部,还可以嵌套循环,我们来看一个例子:
for x in ['A', 'B', 'C']:
for y in ['1', '2', '3']:
print x + y

x 每循环一次,y 就会循环 3 次,这样,我们可以打印出一个全排列:

A1
A2
A3
B1
B2
B3
C1
C2
C3

Python之什么是dict

用 dict 表示“名字”-“成绩”的查找表如下:
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}

我们把名字称为key,对应的成绩称为value,dict就是通过 key 来查找 value。
花括号{}表示这是一个dict,然后按照key : value,写出来即可。最后一个key : value的逗号可以省略。
由于dict也是集合,len()函数可以计算任意集合的大小:

len(d)
3

Python之访问dict

dict中,可以简单的使用d[key]的形式来查找对应的value,这个和list很像,不同之处是,list必须使用索引返回对应的元素,而dict使用key
注意:通过key访问dict的value,只要key存在,dict就返回对应的value。如果key不存在,会直接报错:keyError
要避免keyError发生,有两个方法:
一、先判断一下key是否存在,用in操作符:
if 'Paul' in d:
print d['Paul']
二、使用dict本身提供的一个get方法,在key不存在的时候,返回None:

print d.get('Bart')
59
print d.get('Paul')
None

Python中dict的特点

1、查找速度快。无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。
Dict相对应的缺点是 占用内存大,还会浪费很多内容。list正好相反,占用内存小,但是查找速度慢。
由于dict是按key查找,所以,在一个dict钟,key不能重复。
2、存储的key-value序对是没有顺序的。
3、作为key的元素必须不可变。Python的基本类型如字符串、整数、浮点数都是不可变的。都可以作为key。
不可变的这个限制金作用于key,value是否可变无所谓。
Python更新dict
要把新同学'Paul'的成绩 72 加进去,用赋值语句:

d['Paul'] = 72

Python之 遍历dict

由于dict也是一个集合,所以,遍历dict和遍历list类似,都可以通过 for 循环实现。
直接使用for循环可以遍历 dict 的 key:

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
for key in d:
... print key
...
Lisa
Adam
Bart

由于通过 key 可以获取对应的 value,因此,在循环体内,可以获取到value的值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容