Python编程从入门到实践
Chapter 2 变量和简单数据类型
一、变量
message="Hello Python world"
print(message)
message="Hello Python Crash Course world"
print(message)
Results:Hello Python world
Hello Python Crash Course world
1.变量名的命名和使用
请务必牢记下述有关变量的规则:
(1)变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,但不能以数字打头。
(2)变量名不能包含空格,但可以使用下划线来分隔其中的单词。
(3)不要将Python的关键字和函数名作变量名。
(4)变量名应既简短又具有描述性。
(5)慎用小写字母l和大写字母O,因为它们可能被人错看成数字1和0。
2.使用变量时避免命名错误
二、字符串
字符串是一种数据类型,它就是一系列字符。在Python中,用引号括起来的都是字符串,其中的引号可以是单引号,也可以是双引号,如下所示:
"This is a string"
'This is also a string'
1.使用方法修改字符串的大小写
name.py
name="ada lovelace"
print(name.title())
Ada Lovelace
在print()语句中,方法title()出现在这个变量的后面。方法是Python可对数据执行的操作。在name.title()中,name后面的句点(.)让Python对变量name执行方法title()指定的操作。每个方法后面都跟着一对括号,这是因为方法通常需要额外的信息来完成其工作。这种信息是在括号内提供的。函数title()不需要提供额外的信息,因此他后面的括号是空的。
Summary:1.title()以首字母大写的方式显示每个单词,即将每个单词的首字母都改为大写。
2.upper()将字符串改为全部大写
3.lower()将字符串改为全部小写
2.合并(拼接)字符串
Python使用加号(+)来合并字符串
first_name="ada"
last_name="lovelace"
full_name=first_name+" "+last_name
message="Hello,"+full_name.title()+"!"
print(message)
"Hello,Ada Lovelace!"
3.使用制表符或换行符来添加空白
在编程中,空白泛指任何非打印字符,如空格、制表符和换行符。
制表符:\t
换行符:\n
Example:
print("Language:\n\tPython\n\tC\n\tJavascript")
Languages:
Python
C
Javascript
4.删除空白
‘python’和’python ‘看起来几乎没有什么区别,但对程序而言,它们却是两个不同的字符串。Python能发现 ‘python ‘中额外的空白,并认为它是有意义的——除非你告诉它不是这样的。
Python能够找出字符串开头和末尾多余的空白。要确保字符串末尾没有空白,可使用方法rstrip()
favorite_language='python '
print(favorite_language)
'python '
如果
print(favorite_language.rstrip())
'python'
注意:rstrip()这种删除只是暂时的,接下来再次询问favorite_language的值时,你会发现这个字符串和输入时一样,依然包含多余的空格。
要永久删除这个字符串中的空白,必须将删除操作的结果存回到变量中:
favorite_language='python '
favorite_language=favorite_language.rstrip()
print(favorite_language)
'python'
我们还可以剔除字符串开头的空白,或同时剔除字符串两端的空白。为此,可分别使用方法
lstrip()和strip():
>>>favorite_language=' python '
>>>favorite_language.rstrip()
' python'
>>>favorite_language.lstrip()
'python '
>>>favorite_language.strip()
'python'
5.使用字符串时避免语法错误
程序中包含非法的Python代码时,就会导致语法错误。
三、数字
在编程中,经常使用数字来记录游戏得分、表示可视化数据、存储Web应用信息。
1.整数
(1)在Python中,可对整数执行加(+)减(-)乘(*)除(/)乘方(**)运算。
(2)Python还支持运算优先级,因此你可在同一个表达式中使用多种运算。还可以使用括号来修改运算优先级,让Python按你指定的次序执行运算。
(3)空格不影响Python计算表达式的方式。
2.浮点数
Python将带小数点的数字都称为浮点数。
注意:结果包含的小数位可能是不确定的:
>>>0.2 + 0.1
0.30000000000000004
>>>3 * 0.1
0.30000000000000004
所有语言都存在这个问题,就现在而言,暂时忽略多余的小数位即可。
3.使用函数str()避免类型错误
可调用str(),它让Python将非字符串值表示为字符串(比如下例没有str()会报错):
age=23
message="Happy "+str(age)+"rd Birthday!"
print(message)
Happy 23rd Birthday!
4.注释
在Python在,注释用#标识,#后面的内容都会被Python解释器忽略(仅限这一行代码),如果要多行注释,用三引号””” “””,将要注释的代码插在三引号中间。
Chapter 3 列表简介
一、列表是什么
列表由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有的字母、数字0~9、或所有家庭成员姓名的列表;也可以将任何大写加入了列表中,,其中的元素之间可以没有任何关系。
在Python中,用方括号([])来表示列表,并用逗号来分割其中的元素。
bicycles.py
bicycles=['trek','cannondale','redline','specialized']
print(bicycles)
如果你让Python将列表打印出来,Python将打印列表的内部表示,包括方括号:
['trek','cannondale','redline','specialized']
1.访问列表元素
列表是有序集合,因此要访问列表的任何元素,只需将该元素的位置或者索引告诉Python即可。要访问列表元素,可指出列表的名称,再指出元素的索引,并将其放在方括号内。
bicycles=['trek','cannondale','redline','specialized']
print(bicycles[0])
trek
你还可以对任何列表元素调用第2章介绍的字符串方法。例如:
bicycles=['trek','cannondale','redline','specialized']
print(bicycles[0].title())
Trek
2.索引从0而不是1开始
在Python中,第一个列表元素的索引为0,而不是1。
bicycles=['trek','cannondale','redline','specialized']
print(bicycles[1])
print(bicycles[3])
cannondale
specialized
注:Python为访问最后一个列表元素提供了一种特殊语法。通过将索引指定为-1,可让Python回到最后一个列表元素,索引-2返回倒数第二个列表元素,以此类推。
3.使用列表中的各个值
bicycles=['trek','cannondale','redline','specialized']
message="My first bicycle was a "+bicycles[0].title()+"."
print(message)
My first bicycle was a Trek.
二、修改、添加和删除元素
你创建的大多数列表都将是动态的,这意味着列表创建后,将随着程序的运行增删元素。
1.修改列表元素
motorcycles.py
motorcycles=['honda','yamaha','suzuki']
print(motorcycles)
motorcycles[0]='ducati'
print(motorcycles)
['honda','yamaha','suzuki']
['ducati','yamaha','suzuki']
2.在列表中添加元素
(1)在列表末尾添加元素
使用方法append.()
motorcycles=['honda','yamaha','suzuki']
motorcycles.append('ducati')
print(motorcycles)
['honda','yamaha','suzuki','ducati']
方法append()让动态地创建列表易如反掌,例如,你可以先创建一个空列表,再使用一系列的append()语句添加元素。
motorcycles=[]
motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')
print(motorcycles)
['honda','yamaha','suzuki']
(2)在列表中插入元素
使用方法insert()
motorcycles=['honda','yamaha','suzuki']
motorcycles.insert(0,'ducati')
print(motorcycles)
['honda','yamaha','suzuki','ducati']
3.从列表中删除元素
(1)使用del语句删除元素
如果知道要删除的元素在列表中的位置,可使用del语句
motorcycles=['honda','yamaha','suzuki']
del motorcycles[0]
print(motorcycles)
['yamaha','suzuki']
注:1.使用del可删除任何位置处的列表元素,条件是知道索引;
2.使用del语句将值从列表中删除后,你就无法再访问它了。
(2)使用方法pop()删除元素
方法pop()可删除列表末尾的元素,并让你能够接着使用它:列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。
motorcycles=['honda','yamaha','suzuki']
popped_motorcycle=motorcycles.pop()
print(motorcycles)
print(popped_motorcycle)
['honda','yamaha']
suzuki
(3)弹出列表中任何位置处的元素
motorcycles=['honda','yamaha','suzuki']
first_owned=motorcycles.pop(0)
print('The first motorcycle I owned was a '+first_owned.title()+'.')
The first motorcycle I owned was a Honda.
注:下面有个对于选择del语句还是pop()方法有一个简单的判断标准:如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句;如果你要在删除元素后还能继续使用它,就使用方法pop()。
(4)根据值删除元素
如果不知道要从列表中删除的值所处的位置,只知道要删除的元素的值,可使用方法remove():
motorcycles=['honda','yamaha','suzuki','ducati']
motorcycles.remove('ducati')
print(motorcycles)
['honda','yamaha','suzuki']
注:方法remove()只删除第一个指定的值。如果要删除的值可能在列表中出现多次,就需要使用循环来判断是否删除了所有这样的值。
3.组织列表
(1)使用方法sort()对列表进行永久性排序
方法sort()永久性地修改了列表元素的排列顺序
cars.py
cars=['bwm','audi','toyota','subaru']
cars.sort()
print(cars)
['audi','bwm','subaru','toyota']
你还可以按与字母顺序相反的顺序排列列表元素,为此,只需向sort()方法传递参数reverse=True。下面的示例将汽车列表按语字母顺序相反的顺序排列:
cars=['bwm','audi','toyota','subaru']
cars.sort(reverse=True)
print(cars)
['yoyota','subaru','bmw','audi']
注:sort()对列表元素排列顺序的修改是永久性的。
(2)使用函数sorted()对列表进行临时排序
cars=['bwm','audi','toyota','subaru']
print(sorted(cars))
print(cars)
['audi','bwm','subaru','toyota']
['bwm','audi','toyota','subaru']
注:调用函数sorted()后,列表元素的排列顺序并没有变。
(3)倒着打印列表
使用方法reverse():
cars=['bwm','audi','toyota','subaru']
cars.reverse()
print(cars)
['subaru','toyota','audi','bwm']
注:1.reverse()不是指按与字母字母顺序相反的顺序排列列表元素,而只是反转列表元素的排列顺序
2.方法reverse()永久性地修改列表元素的排列顺序
(4)确定列表的长度
使用函数len()可快速获悉列表的长度
>>>cars=['bwm','audi','toyota','subaru']
>>>len(cars)
4
4.使用列表是避免索引错误
注:发生索引错误却找不到解决办法时,请尝试将列表或其长度打印出来。
Chapter 4 操作列表
一、遍历整个列表
下面先介绍一个例子,使用for循环来打印魔术师名单里的所有名字:
magincians.py
magicians=['alice','david','carolina']
for magician in magicians:
print(magician)
alice
david
carolina
1.深入地研究循环
几个注意的点:1.Python首先读取for循环开始时的第一行代码,再继续到下一行
2.Python在上述例子中执行到列表中的最后一个元素然后结束循环指令,如果没有后续循环外的代码就结束程序
3.Python中的循环范围取决于print之前的缩进,有缩进就属于循环,没有缩进就为循环外的代码
2.在for循环中执行更多的操作
在for语句后面,每个缩进的代码都是循环的一部分,且将针对列表中的每个值都执行一次。
3.在for循环结束后执行一些操作
在for循环后面,没有缩进的代码都只执行一次,且不会重复执行。
二、避免缩进错误
Python根据缩进来判断代码行与前一个代码行的关系。
1.忘记缩进
2.忘记缩进额外的代码行
3.不必要的缩进
4.循环后不必要的缩进
5.遗漏了冒号
三、创建数字列表
1.使用函数range()
Python函数range()让你能够轻松地生成一系列的数字。例如下面使用函数range()来打印一系列的数字:
numbers.py
for value in range(1,5):
print(value)
1
2
3
4
注:函数range()让Python从你指定的第一个值开始数,并在到达你指定的第二个值后停止,因此输出不包含第二个值(这里为5)。
2.使用range()创建数字列表
要创建数字列表,可使用函数list()将range()的结果直接转换为列表。
numbers=list(range(1,6))
print(numbers)
[1,2,3,4,5]
使用函数range()时,还可以指定步长。例如:
even_numbers.py
even_numbers=list(range(2,11,2))
print(even_numbers)
[2,4,6,8,10]
使用函数range()几乎能够创建任何需要的数字集,例如,创建一个列表,其中包含前十个整数的平方:
squares.py
squares[]
for value in range(1,11):
squares.append(value**2)
print(squares)
[1,4,9,16,25,36,49,64,81,100]
3.对数字列表执行简单的统计计算(仅举了几个例子)
最大值:max()
最小值:min()
总和:sum()
4.列表解析
列表解析将for循环和创建新元素的代码合并成一行,并自动附加新元素。
下面示例使用列表解析创建你在前面看到的平方数列表:
squares.py
squares=[value**2 for value in range(1,11)]
print(squares)
[1,4,9,16,25,36,49,64,81,100]
注:要使用这种语法,首先指定一个描述性的列表名,如squares;然后,指定一个左方括号,并定义一个表达式,用于生成你要存储到列表中的值。在这个示例中,表达式为value**2;接下来编写一个for循环,用于给表达式提供值,再加上右方括号。请注意这里的for语句末尾没有冒号。
四、使用列表的一部分
上述第四章讲述的都是如何处理列表的所有元素,你还可以处理列表的部分元素——Python称之为切片。
1.切片
要创建切片,可指定要使用的第一个元素的索引和最后一个元素的索引加1。
players.py
players=['charles','martina','michael','florence','eli']
print(players[0:3])
print(players[1:4])
['charles','martina','michael']
['martina','michael','florence']
注:1.如果你没有指定第一个索引,Python将自动从列表开头开始;若没有指定最后一个索引,同理将一直到末尾。
2.Python支持负数索引的切片
2.遍历切片
如果要遍历列表的部分元素,可在for循环中使用切片。
players=['charles','martina','michael','florence','eli']
print("Here are the first three players on my team:")
for player in players[:3]:
print(player.title())
Here are the first three players on my team:
Charles
Martina
Michael
上述代码没有遍历整个队员列表,而只遍历前三名队员。
3.复制列表
要复制列表,可创建一个包含整个列表的切片,方法时同时省略起始索引和终止索引([:])。例如:
foods.py
my_foods=['pizza','falafel','carrot cake']
friend_foods=my_foods[:]
my_foods.append('cannoli')
friend_foods.append('ice cream')
print("My fovorite foods are:")
print(my_foods)
print("\nMy friend's fovorite foods are:")
print(friend_foods)
My fovorite foods are:
['pizza','falafel','carrot cake','cannoli']
My friend's fovorite foods are:
['pizza','falafel','carrot cake','ice cream']
注:如果我们只是简单的将my_foods赋给friend_foods,就不能得到两个列表。例如:
my_foods=['pizza','falafel','carrot cake']
#这行不通
friend_foods=my_foods
my_foods.append('cannoli')
friend_foods.append('ice cream')
print("My fovorite foods are:")
print(my_foods)
print("\nMy friend's fovorite foods are:")
print(friend_foods)
My fovorite foods are:
['pizza','falafel','carrot cake','cannoli','ice cream']
My friend's fovorite foods are:
['pizza','falafel','carrot cake','cannoli','ice cream']
这种语法实际上是让Python将新变量friend_foods关联到包含在my_foods中的列表,因此这两个变量都指向同一个列表。所以,当我们将 ‘cannoli’添加到my_foods中时,它也将出现在friend_foods中;同样,虽然 ‘ice cream’好像只被加入到了friend_foods中,但它也将出现在两个列表中。(分清楚赋值和副本存储的区别!)
五、元组
列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,但是有时你需要船舰一系列不可修改的元素,元组可以满足这种需求。Python将不能修改的值称为不可变的,而不可变的列表被称为元组。
1.定义元组
元组看起来犹如列表,但使用圆括号而不是方括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。
dimensions.py
dimensions=(200,50)
print(dimensions[0])
print(dimensions[1])
200
50
如果修改元组中的一个元素,例如dimensions[0]=250,那么会导致Python返回类型错误消息。
2.遍历元组中的所有值
像列表一样,也可以使用for循环来遍历元组中的所有值。
3.修改元组变量
虽然不能修改元组的元素,但可以给存储元组的变量赋值。例如:
dimensions=(200,50)
print("Original dimensions:")
for dimension in dimensions:
print(dimension)
dimensions=(400,100)
print("\nModified dimensions:")
for dimension in dimensions:
print(dimension)
Original dimensions:
200
50
Modified dimensions:
400
100