跟上时代的步伐,学一波Python(一)
注:笔记整理自《Python编程:从入门到实践》
1. 环境搭建
OS X系统默认安装了 Python2,我们需要到Python官网下载Python3
Windows系统下需要下载Python2和Python3
Python下载地址
命令行输入 python 和 python3查看和切换python版本
python3
输入python命令后,可以直接在控制台编写代码,也可以使用编辑器。
推荐使用Sublime Text3 编辑器 插件比较多,比较方便
2. 变量和简单的数据类型
2.0 Python关键字与Python内置函数
warning:第一排黑体没有特殊含义,我是markdown新手,表格用的不好,第一排默认是表头,不知道怎么改成普通文本
Python关键字
False | class | finally | is | return |
---|---|---|---|---|
None | continue | for | lambda | try |
True | def | from | nonlocal | while |
and | del | global | not | with |
as | elif | if | or | yield |
assert | else | import | pass | |
break | except | in | raise |
关于缩进
对于Python而言代码缩进是一种语法,Python没有像其他语言一样采用{}或者begin...end分隔代码块,而是采用代码缩进和冒号来区分代码之间的层次。
缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。
示例:
if True:
print("Hello girl!") #缩进一个tab的占位
else: #与if对齐
print("Hello boy!") #缩进一个tab的占位
2.1 变量
创建变量时不需要声明数据类型,直接声明变量名进行赋值
message = "hello world"
age = 13
age = 14
在程序中可随时修改变量的值,而Python将始终记录变量的最新值
2.1.1 变量的命名和使用
在Python中使用变量时,需要遵守一些规则
- 变量名只能包含字母、数字和下划线打头,但不能以数字打头,例如,可将变量命名为message_1,但不能将其命名为1_message。
- 变量名不能包含空格,但可使用下划线来分隔其中的单词。例如,变量名greeting_message可行,但变量名greeting message会引发错误。
- 不要将Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途的单词,如print。
- 变量名应既简短又具有描述性。例如,name比n好,student_name比s_n好,name_length比length_of_persons_name好。
- 慎用小写字母l和大写字母O,因为它们可能被人看错成数字1和0。
2.1.2 使用变量名时避免命名错误
程序存在错误时,Python解释器将竭尽所能地帮助你找出问题所在。程序无法成功地运行时,解释器会提供一个traceback。traceback是一条记录,指出了解释器尝试运行代码时, 在什么地方陷入了困境。下面是你不小心错误地拼写了变量名时,Python解释器提供的traceback:
traceback
往往像这样的小错误很难发现,会浪费不少时间,所以,还是尽量避免吧。
2.2 字符串
字符串 就是一系列字符。在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号,如下所示:
"This is a string."
'This is also a string.'
这种灵活性让你能够在字符串中包含引号和撇号
'I told my friend, "Python is my favorite language!" '
"The language 'Python' is named after Monty Python, not the snake."
"One of Python's strengths is its diverse and supportive community."
2.2.1 使用方法修改字符串的大小写
对于字符串,可执行的最简单的操作之一是修改其中的单词的大小写,如下所示,
首字母大写:
name = "sun wu kong"
print(name.title())
输出结果:
Sun Wu Kong
全部大写或小写:
name = "Zhu Ba Jie"
print(name.upper())
print(name.lower())
输出结果:
ZHU BA JIE
zhu ba jie
2.2.2 合并(拼接)字符串
Python使用加号(+)来合并字符串。
first_name = "Yu"
last_name = "Guan"
full_name = last_name + " " + first_name
print(full_name)
输出结果:
Guan Yu
2.2.3 使用制表符或换行符来添加空白
可在同一个字符串中同时包含制表符和换行符。字符串"\n\t" 让Python换到下一行,并在下一行开头添加一个制表符。
>>> print("Languages:\n\tPython\n\tC\n\tJavaScript")
Languages:
Python
C
JavaScript
2.2.4 删除空白
在程序中,额外的空白可能令人迷惑。对程序员来说,'python' 和'python ' 看起来几乎没什么两样,但对程序来说,它们却是两个不同的字符串。Python能够发
现'python ' 中额外的空白,并认为它是有意义的——除非你告诉它不是这样的。
空白很重要,因为你经常需要比较两个字符串是否相同。例如,一个重要的示例是,在用户登录网站时检查其用户名。但在一些简单得多的情形下,额外的空格也可能令人迷惑。所幸在Python中,删除用户输入的数据中的多余的空白易如反掌。
Python能够找出字符串开头和末尾多余的空白。要确保字符串末尾没有空白,可使用方法rstrip() 。
>>> favorite_language = 'python '
>>> favorite_language
'python '
>>> favorite_language.rstrip()
'python'
>>> favorite_language
'python '
使用rstrip()方法后重新赋值,原值才会改变
>>> favorite_language = favorite_language.rstrip()
>>> favorite_language
'python'
剔除字符串开头的空白,或同时剔除字符串两端的空白,可分别使用方法lstrip() 和strip() :
>>> favorite_language = ' python '
>>> favorite_language.rstrip()
' python'
>>> favorite_language.lstrip()
'python '
>>> favorite_language.strip()
'python'
2.3 数字
2.3.1 整数
在Python中,可对整数执行加(+ )减(- )乘(* )除(/ )运算。
>>>2+3
5
>>>3-2
1
>>>2*3
6
>>>3/2
1.5
在终端会话中,Python直接返回运算结果。Python使用两个乘号表示乘方运算:
>>> 3**2
9
>>> 3**3
27
>>> 10**6
1000000
Python还支持运算次序,因此你可在同一个表达式中使用多种运算。你还可以使用括号来修改运算次序,让Python按你指定的次序执行运算,如下所示:
>>>2+3*4
14
>>>(2+3)*4
20
2.3.2 浮点数
Python将带小数点的数字都称为浮点数 。大多数编程语言都使用了这个术语,它指出了这样一个事实:小数点可出现在数字的任何位置。每种编程语言都须细心设计,以妥善地 处理浮点数,确保不管小数点出现在什么位置,数字的行为都是正常的。
从很大程度上说,使用浮点数时都无需考虑其行为。你只需输入要使用的数字,Python通常都会按你期望的方式处理它们:
>>> 0.1 + 0.1
0.2
>>> 0.2 + 0.2
0.4
>>>2*0.1
0.2
>>>2*0.2
0.4
2.3.3 使用函数str()避免类型错误
在字符串中使用整数时,需要显式地指出你希望Python将这个整数用作字符串。为此,可调用函数str() , 它让Python将非字符串值表示为字符串:
age=23
message = "Happy " + str(age) + "rd Birthday!"
print(message)
输出结果:
Happy 23rd Birthday!
2.3.4 Python 2中的整数
在Python 2中,将两个整数相除得到的结果稍有不同:
>>> python2.7
>>>3/2
1
Python返回的结果为1,而不是1.5。在Python 2中,整数除法的结果只包含整数部分,小数部分被删除。请注意,计算整数结果时,采取的方式不是四舍五入,而是将小数部分直 接删除。
在Python 2中,若要避免这种情况,务必确保至少有一个操作数为浮点数,这样结果也将为浮点数:
>>>3/2
1
>>>3.0/2
1.5
>>>3/2.0
1.5
>>> 3.0 / 2.0
1.5
2.4注释
在Python中,注释用井号(# )标识。井号后面的内容都会被Python解释器忽略。
print("merry christmas") #圣诞节快乐!
输出结果:
merry christmas
3.列表
3.1 修改、添加、插入和删除元素
(1)修改元素:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles[0] = 'ducati'
print(motorcycles)
输出结果:
['honda', 'yamaha', 'suzuki']
['ducati', 'yamaha', 'suzuki']
(2)添加元素:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles.append('ducati')
print(motorcycles)
输出结果:
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha', 'suzuki', 'ducati']
(3)插入元素
motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.insert(0, 'ducati')
print(motorcycles)
输出结果:
['ducati', 'honda', 'yamaha', 'suzuki']
(4)删除元素
使用del语句删除元素:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
del motorcycles[0]
print(motorcycles)
输出结果:
['honda', 'yamaha', 'suzuki']
['yamaha', 'suzuki']
使用方法pop()删除元素:
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.
根据值删除元素:
motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
motorcycles.remove('ducati')
print(motorcycles)
输出结果:
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
3.2 组织列表
3.2.1 使用方法sort()对列表进行永久性排序
sort()方法
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)
输出结果:
['audi', 'bmw', 'subaru', 'toyota']
3.2.2 使用函数sorted()对列表进行临时排序
sorted()函数
cars = ['bmw', 'audi', 'toyota', 'subaru']
print("Here is the original list:")
print(cars)
print("\nHere is the sorted list:")
print(sorted(cars))
print("\nHere is the original list again:")
print(cars)
输出结果:
Here is the original list:
['bmw', 'audi', 'toyota', 'subaru']
Here is the sorted list:
['audi', 'bmw', 'subaru', 'toyota']
Here is the original list again: ['bmw', 'audi', 'toyota', 'subaru']
3.2.3 倒序打印列表
revers()方法:
cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)
cars.reverse()
print(cars)
输出结果:
['bmw', 'audi', 'toyota', 'subaru']
['subaru', 'toyota', 'audi', 'bmw']
3.2.4 确定列表的长度
>>> cars = ['bmw', 'audi', 'toyota', 'subaru']
>>> len(cars)
4
4.操作列表
4.1 遍历整个列表
for循环:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)
输出结果:
alice david carolina
4.1.1 在for循环中执行更多的操作
在for 循环中,想包含多少行代码都可以。在代码行for magician in magicians 后面,每个缩进的代码行都是循环的一部分,且将针对列表中的每个值都执行一次。因 此,可对列表中的每个值执行任意次数的操作。
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")
print("I can't wait to see your next trick, " + magician.title() + ".\n")
由于两条print 语句都缩进了,因此它们都将针对列表中的每位魔术师执行一次。第二条print 语句中的换行符"\n" 在每次迭代结束后都插入一个空行,从而整洁地 将针对各位魔术师的消息编组:
Alice, that was a great trick!
I can't wait to see your next trick, Alice.
David, that was a great trick!
I can't wait to see your next trick, David.
Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.
4.1.2 在for循环结束后执行一些操作
在for 循环后面,没有缩进的代码都只执行一次,而不会重复执行。下面来打印一条向全体魔术师致谢的消息,感谢他们的精彩表演。想要在打印给各位魔术师的消息后面打印 一条给全体魔术师的致谢消息,需要将相应的代码放在for 循环后面,且不缩进:
magicians = ['alice', 'david', 'carolina'] for magician in magicians:
print(magician.title() + ", that was a great trick!")
print("I can't wait to see your next trick, " + magician.title() + ".\n")
print("Thank you, everyone. That was a great magic show!")
开头两条print 语句针对列表中每位魔术师重复执行。由于第三条print 语句没有缩进,因此只执行一次:
Alice, that was a great trick!
I can't wait to see your next trick, Alice.
David, that was a great trick!
I can't wait to see your next trick, David.
Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.
Thank you, everyone. That was a great magic show!
for else语法
(1)触发else
正常结束的循环:
list = [1,2,3,4,5]
for x in list:
print(x)
else:
print("else")
输出结果:
1
2
3
4
5
else
使用continue关键字
list = [1,2,3,4,5]
for x in list:
if x==2:
continue
print x
else:
print("else")
输出结果:
1
3
4
5
else
(2)不触发else
list = [1,2,3,4,5]
for x in list:
if x==3:
break
print x
else:
print("else")
输出结果:
1
2
4.2 创建数值列表
4.2.1 使用函数range()
for value in range(1,5):
print(value)
输出结果:
1
2
3
4
4.2.2 使用range()创建数字列表
numbers = list(range(1,6))
print(numbers)
输出结果:
[1,2,3,4,5]
使用函数range() 时,还可指定步长。例如,下面的代码打印1~10内的偶数:
even_numbers = list(range(2,11,2))
print(even_numbers)
输出结果:
[2,4,6,8,10]
打印1-10的平方:
squares = []
for value in range(1,11):
square = value**2 squares.append(square)
print(squares)
输出结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
4.2.3 对数字列表执行简单的统计计算
有几个专门用于处理数字列表的Python函数。例如,你可以轻松地找出数字列表的最大值、最小值和总和:
>>>digits=[1,2,3,4,5,6,7,8,9,0]
>>> min(digits)
0
>>> max(digits)
9
>>> sum(digits)
45
4.2.4 列表解析
前面介绍的生成列表squares 的方式包含三四行代码,而列表解析让你只需编写一行代码就能生成这样的列表。列表解析 将for 循环和创建新元素的代码合并成一行,并自动附加新元素。
squares = [value**2 for value in range(1,11)]
print(squares)
输出结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
4.3 使用列表的一部分
4.3.1 切片
要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数range() 一样,Python在到达你指定的第二个索引前面的元素后停止。要输出列表中的前三个元素,需 要指定索引0~3,这将输出分别为0 、1 和2 的元素。
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3])
4.3.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
4.3.3 复制列表
要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:] )。这让Python创建一个始于第一个元素,终止于最后一个元素的切片,即复制整个 列表。
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)
输出结果:
My favorite foods are:
['pizza', 'falafel', 'carrot cake']
My friend's favorite foods are: ['pizza', 'falafel', 'carrot cake']
4.4 元组
列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏中的角色列表至关重要。然而,有时候你需要创建一系列不可修
改的元素,元组可以满足这种需求。Python将不能修改的值称为不可变的 ,而不可变的列表被称为元组 。
4.4.1 定义元组
元组看起来犹如列表,但使用圆括号而不是方括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。
dimensions = (200, 50)
print(dimensions[0])
print(dimensions[1])
4.4.2 遍历元祖中的所有值
像列表一样,也可以使用for 循环来遍历元组中的所有值:
dimensions = (200, 50)
for dimension in dimensions:
print(dimension)
输出结果:
200
50
4.4.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
5 if语句
5.1 一个简单的示例
cars = ['audi', 'bmw', 'subaru', 'toyota']
for car in cars:
if car == 'bmw':
print(car.upper())
else:
print(car.title())
输出结果:
Audi
BMW
Subaru
Toyota
5.2 条件测试
每条if 语句的核心都是一个值为True 或False 的表达式,这种表达式被称为条件测试 。
5.2.1 检查是否相等
>>> car = 'bmw'
>>> car == 'bmw'
True
5.2.2 检查是否相等时区分大小写
>>> car = 'Audi' >>>
car == 'audi'
False
>>> car = 'Audi'
>>> car.lower() == 'audi'
True
5.2.3 检查是否不相等
要判断两个值是否不等,可结合使用惊叹号和等号(!= ),其中的惊叹号表示不 ,在很多编程语言中都如此。
requested_topping = 'mushrooms'
if requested_topping != 'anchovies':
print("Hold the anchovies!")
输出结果:
Hold the anchovies!
5.2.5 检查多个条件
1.使用and检查多个条件(且运算,OC中为 && )
要检查是否两个条件都为True ,可使用关键字and 将两个条件测试合而为一;如果每个测试都通过了,整个表达式就为True ;如果至少有一个测试没有通过,整个表达式就
为False 。
>>> age_0 = 22
>>> age_1 = 18
>>> (age_0 >= 21) and (age_1 >= 21)
False
>>> age_1 = 22
>>> (age_0 >= 21) and (age_1 >= 21)
True
2.使用or检查多个条件(或运算,OC中为 || )
关键字or 也能够让你检查多个条件,但只要至少有一个条件满足,就能通过整个测试。仅当两个测试都没有通过时,使用or 的表达式才为False 。
>>> age_0 = 22
>>> age_1 = 18
>>> (age_0 >= 21) or (age_1 >= 21)
True
>>> age_0 = 18
>>> (age_0 >= 21) or (age_1 >= 21)
False
5.2.6 检查特定值是否包含在列表中
有时候,执行操作前必须检查列表是否包含特定的值。例如,结束用户的注册过程前,可能需要检查他提供的用户名是否已包含在用户名列表中。在地图程序中,可能需要检查用户提交的位置是否包含在已知位置列表中。
要判断特定的值是否已包含在列表中,可使用关键字in 。
>>> requested_toppings = ['mushrooms', 'onions', 'pineapple']
>>> 'mushrooms' in requested_toppings
True
>>> 'pepperoni' in requested_toppings
False
5.2.7 检查特定值是否不包含在列表中
还有些时候,确定特定的值未包含在列表中很重要;在这种情况下,可使用关键字not in 。
banned_users = ['andrew', 'carolina', 'david']
user = 'marie'
if user not in banned_users:
print(user.title() + ", you can post a response if you wish.")
输出结果:
Marie, you can post a response if you wish.
5.2.8 布尔表达式
与条件表达式一样,布尔表达式的结果要么为True ,要么为False 。
isLogin = true;
isVip = false;
5.3 if语句
5.3.1 简单的if语句
最简单的if 语句只有一个测试和一个操作:
if conditional_test:
do something
5.3.2 if-else 语句
经常需要在条件测试通过了时执行一个操作,并在没有通过时执行另一个操作;在这种情况下,可使用Python提供的if-else 语句。if-else 语句块类似于简单的if 语句,但 其中的else 语句让你能够指定条件测试未通过时要执行的操作。
age=17
if age >= 18:
print("You are old enough to vote!")
print("Have you registered to vote yet?")
else:
print("Sorry, you are too young to vote.")
print("Please register to vote as soon as you turn 18!")
5.3.3 if-elif-else 结构
常需要检查超过两个的情形,为此可使用Python提供的if-elif-else 结构。Python只执行if-elif-else 结构中的一个代码块,它依次检查每个条件测试,直到遇到通过了的条件测试。测试通过后,Python将执行紧跟在它后面的代码,并跳过余下的测试。
在现实世界中,很多情况下需要考虑的情形都超过两个。
age=12
if age < 4:
print("Your admission cost is $0.")
elif age < 18:
print("Your admission cost is $5.")
else:
print("Your admission cost is $10.")
输出结果:
Your admission cost is $5.
5.3.4 使用多个elif 代码块
可根据需要使用任意数量的elif 代码块。
age = 12
if age < 4:
price = 0
elif age < 18:
price = 5
elif age < 65:
price = 10
else:
price = 5
print("Your admission cost is $" + str(price) + ".")
5.4 使用if 语句处理列表
5.4.1 检查特殊元素
requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']
for requested_topping in requested_toppings:
if requested_topping == 'green peppers':
print("Sorry, we are out of green peppers right now.")
else:
print("Adding " + requested_topping + ".")
print("\nFinished making your pizza!")
5.4.2 确定列表不是空的
requested_toppings = []
if requested_toppings:
for requested_topping in requested_toppings:
print("Adding " + requested_topping + ".")
print("\nFinished making your pizza!")
else:
print("Are you sure you want a plain pizza?")
输出结果:
Are you sure you want a plain pizza?
5.4.3 使用多个列表
available_toppings = ['mushrooms', 'olives', 'green peppers', 'pepperoni', 'pineapple', 'extra cheese']
requested_toppings = ['mushrooms', 'french fries', 'extra cheese']
for requested_topping in requested_toppings:
if requested_topping in available_toppings:
print("Adding " + requested_topping + ".")
else:
print("Sorry, we don't have " + requested_topping + ".")
print("\nFinished making your pizza!")
未完待续...