第二章 变量和简单的数据类型
2.1 注释
- 单行注释:
Python中单行注释以’#'开头。#!/usr/bin/python3 #coding=utf-8 # 这是一个注释 print("Hello, World")
- 多行注释:
多行注释用三个单引号(’’’)或者三个双引号(""")将注释括起来。
在Pycharm中注释的快捷键:command + /#!/usr/bin/python3 #coding=utf-8 ''' 这是多行注释,用三个单引号 这是多行注释,用三个单引号 这是多行注释,用三个单引号 ''' print("Hello, World!") `` ```python #!/usr/bin/python3 #coding=utf-8 """ 这是多行注释,用三个双引号 这是多行注释,用三个双引号 这是多行注释,用三个双引号 """ print("Hello, World!")
2.2 变量的命名和使用
-
命名规则
- 变量名只能包含字母、数字和下划线。变量名可以字母或者下划线打头,但不能以数字打头。
- 变量名不能包含空格,但可以使用下划线来分隔其中的单词。例如: get_message。
- 不要将Python关键字和函数名当做变量名。
- 类名:首字母大写,单词直接连接在一起。如:ConfigUtil 。
- 全局变量名:大写字母,单词之间用_分割 。如:COLOR_WRITE 。
- 普通变量:小写字母,单词之间用_分割。
- 普通函数:与普通变量一样,小写字母,单词之间用_分割。
- 模块名:全小写字母,不适用下划线。
-
驼峰命名法
- 小驼峰命名:第一个单词以小写字母开头,其余单词首字母大写 , 如:theFirstName。
- 大驼峰命名:所有单词首字母均大写 , 如:TheFirstName。
2.3 字符串
-
在Python 中,用引号括起来的都是字符串,其中引号可以为单引号,也可以为双引号。
如果想表示出Let‘s go:-
可以使用嵌套引号,即外层使用双引号
-
转义字符
-
-
使用方法修改字符串的大小写
- .litle( ) 以首字母大写的方式显示每个字符。
- .upper( ) 以大写字母方式显示每个字符。
- .lower( ) 以小写字母方式显示每个字符。
-
字符串的拼接
- Python 使用加号(+)来合并字符串。
first_name = 'zhao' last_name = 'zihao' full_name = first_name + last_name
- Python 使用加号(+)来合并字符串。
-
使用制表符或换行符来添加空白
- 制表符 \t
- 换行符 \n
- 同一字符串中同时包含制表符和换行符 \t\n
-
删除空白
- 删除字符串末尾的空白,使用方法rstrip( )。
- 删除字符串开头的空白,使用方法lstrip( )。
- 删除字符串两端的空白,使用方法strip()。
-
.split()方法
- .split( ) 默认情况下.split( )方法将字符串按照空白字符分割,并返回一个字符串列表。
a = 'i love you' b = a.split() print(b) >>>['i', 'love', 'you']
- 也可以使用自定义字符对字符串进行分割。
a = '1,2,2,3,4,5,6' b = a.split(',') print(b) >>>['1', '2', '2', '3', '4', '5', '6']
- 还可以指定分割次数
a = '1,2,2,3,4,5,6' b = a.split(',',3) print(b) >>>['1', '2', '2', '3,4, 5, 6']
- 还支持.rsplit()方法,从字符串结尾开始分割。
- .split( ) 默认情况下.split( )方法将字符串按照空白字符分割,并返回一个字符串列表。
-
查看变量的数据类型
- 变量的数据类型可以使用函数type()来得到。
a=123 b=1.23 c='i love you' d=[1,2,3,4] e={'name':'xiaoming'} f=(1,2,3,4) lists = [a,b,c,d,e,f] for i in lists: print(type(i))
<class 'int'> <class 'float'> <class 'str'> <class 'list'> <class 'dict'> <class 'tuple'>
- 变量的数据类型可以使用函数type()来得到。
2.4 数字
-
在python中,可对整数执行加、减、乘、除。
-
数字类型主要包括五种:整形(int)、浮点型(float)、布尔型(bool)、复数型(complex)。
3.整数的其他表示方式:二进制、十进制、十六进制、科学计数法(2e10)。
-
运算符号及其优先级
- (),括号
- **,幂运算
- *、/、//、%,乘、除、整数除法、取余。
- +、-,加、减。
- 不同优先级的组合按照优先级次序计算,同一优先级按照先后次序计算。
-
使用函数 str ( ) 避免类型错误。
TypeError: must be str, not int。
类型错误。在字符串中使用数字时,需要显示地指出你希望Python 将这个数字作为字符串。可以使用 str ( )函数,将非字符串值表示为字符串。
first_name = 'zhao' last_name = 'zihao' age = 23 full_name = first_name + last_name + ' ' +str(age)
-
Python 2中的整数
在Python 2中,将两个整数相除得到的结果稍有不同。print(3/2)
Python返回结果为 1 ,而不是1.5 。
在Python 2 中 ,整数除法的结果只包含整数部分,小数部分被删除,并不是四舍五入。
在Python 2 中若要避免这种情况,务必确保至少有一个操作数为浮点数,这样结果也将为浮点数。
2.5 列表
-
列表简介
- 列表能够在一个地方存储成组的信息,列表由一些列按特定顺序排列的元素组成。
- 鉴于列表通常包含多个元素,给列表指定一个表示复数的名称,例如:names。
- 在Python中,使用方括号( [ ] )来表示列表,并用逗号分隔其中的元素。
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
-
访问列表中的元素
- 通过索引访问列表元素
bicycles = ['trek', 'cannondale', 'redline', 'specialized'] print(bicycles[0]) print(bicycles[-1])
- 索引从0开始而不是从1开始。
- Python为访问最后一个列表元素提供了一种特殊的方法。将最后一个元素索引指定为-1。
- 如果索引大于元素个数,就会出现索引错误,即:
IndexError: list index out of range
- 仅当列表为空的时,bicycles[-1]才会导致错误。
- 通过索引访问列表元素
-
修改、添加和删除元素
-
修改元素
要修改列表元素,可指定列表名和要修改的元素的索引。bicycles = ['trek', 'cannondale', 'redline', 'specialized'] bicycles[0] = 'love'
-
在列表中添加元素
- 在列表末尾添加元素,使用方法append(‘STR’)
bicycles = ['trek', 'cannondale', 'redline', 'specialized'] bicycles.append( 'favorite' )
- 你可以先创建一个空的列表,再使用方法append(‘STR’)添加元素。
bicycles = [] bicycles.append( 'favorite' ) bicycles.append( 'cannondale' ) bicycles.append( 'redline' )
- 在列表中插入数据,使用方法insert()。
bicycles = ['trek', 'cannondale', 'redline', 'specialized'] bicycles.insert ( 0 ,'love' ) bicycles.insert ( 索引 ,数据 )
- 在列表末尾添加元素,使用方法append(‘STR’)
-
从列表中删除元素
-
使用del语句删除元素
如果知道要删除的元素在列表中的位置,可以使用del语句。bicycles = ['trek', 'cannondale', 'redline', 'specialized'] del bicycles [0]
-
删除列表中末尾的元素,并接着使用它的值,可使用方法pop( )。
bicycles = ['trek', 'cannondale', 'redline', 'specialized'] shanchu = bicycle.pop( )
-
弹出列表中任意位置处的元素,可以使用方法pop( ),并制定要删除元素的索引即可。
bicycles = ['trek', 'cannondale', 'redline', 'specialized'] shanchu = bicycle.pop(3)
-
根据值删除元素,可以使用remov()方法。
bicycles = ['trek', 'cannondale', 'redline', 'specialized'] bicycle.remove('trek')
注意:remov()方法只删除第一个指定的值,如果要删除多个重复的值,就需要使用循环来判断是否删除了所有这样的值。
-
如果从列表中删除一个元素,且不再以任何方式使用它,就使用del语句。如果要将删除后的元素继续使用,就是用方法pop( )。
-
-
组织列表
-
使用方法sort() 对列表按照字母升序永久性排序
bicycles = ['trek', 'cannondale', 'redline', 'specialized'] bicycle.sort() print(bicycle) >>> 'cannondale', 'redline', 'specialized', 'trek'
-
向方法sort() 传递参数reverse =True即可按照字母顺序降序排序。
bicycles = ['trek', 'cannondale', 'redline', 'specialized'] bicycle.sort(reverse =True)
-
使用函数sorted( )对列表进行临时排序。
bicycles = ['trek', 'cannondale', 'redline', 'specialized'] print(bicycle.sorted())
注意:调用函数sorted( )后,列表元素的排列顺序并没有变。
-
向方法sorted() 传递参数reverse =True即可按照字母顺序降序排序。
bicycles = ['trek', 'cannondale', 'redline', 'specialized'] print(bicycle.sorted(reverse = True))
-
倒着打印列表,可使用函数reverse() 。
bicycles = ['trek', 'cannondale', 'redline', 'specialized'] print(bicycle.reverse())
注意:函数reverse()并不是按照字母相反顺序,而是反转列表元素的排列顺序。
-
使用函数len( )确定列表的长度。
bicycles = ['trek', 'cannondale', 'redline', 'specialized'] len(bicycle)
-
-
2.6 操作列表
-
使用for循环遍历整个列表
magicians = ['alice', 'david', 'carolina'] for magician in magicians: print(magician.title() + ", that was a great trick!")
这行代码让Python从列表magicians中取出一个元素,并将其存储在变量magician中。
-
避免缩进错误
Python根据缩进来判断代码行与前一个代码行的关系。for循环格式:
for iterating_var(单数变量名称) in sequence(复数变量名称): statements(s) 注意缩进且第一行代码后冒号不能丢。
-
忘记缩进 (语法错误)
for dimension in dimensions: print(dimension) IndentationError: expected an indented block
-
忘记缩进全部代码或者缩进不必要的代码(逻辑错误)
这是一个逻辑错误,循环能够运行且不会报错,只有缩进的代码行进行了循环。for dimension in dimensions: print(dimension) dimension += 'my_dog'
-
不必要的缩进
age = 23 message = "Happy " + str(age) + "rd Birthday!" print(message) IndentationError: unexpected indent
-
遗漏了冒号
for dimension in dimensions print(dimension) SyntaxError: invalid syntax 语法错误
-
-
创建数值列表
-
使用函数range()
for value in range(1,6): print(value)
函数range()从指定的一个元素开始,并在到达指定的第二个元素值后停止,因此输出不会包含第二个元素值。即函数循环了M - N( 6 - 1 = 5 ) 次。
-
使用函数range()创建数字列表
使用函数list()将range()的结果直接转化为列表。
numbers = list(range(0,10))
-
使用函数range()时,还可以指定步长。
numbers = list(range(0,10,2)) print(numbers) >>>[0, 2, 4, 6, 8]
-
两个星号 ( ** ) 表示乘方运算。
squares = [] for value in range(1,11): square = value**2 squares.append(square) # 等效 squares.append(value**2) print(squares)
-
对数字列表执行简单的统计计算。
even_numbers = [2, 4, 6, 8, 10] print(max(even_numbers)) >>> 10 print(min(even_numbers)) >>> 2 print(sum(even_numbers)) >>> 30
-
解析列表
前面介绍生成列表平方方式包含多行代码,而解析列表只需要编写一行代码。
解析列表将for循环和创建新元素的代码合并成一行,并且自动附加新元素。new_list = [value**2 for value in range(1,5)]
- 首先指定一个描述性的列表名,如:new_list 。
- 指定一个左括号并定义一个表达式,用于生成你要存储到列表中的值。如:value**2。
- 编写一个for循环,用于给表达式提供值,再加上一个右括号。注意,这里的for语句末尾是没有冒号的。
-
-
使用列表一部分
-
切片
要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数range() 一样,Python在到达你指定的第二个索引前面的元素后停止。要输出列表中的前三个元素,需要指定索引0~3,这将输出分别为0 、1 和2 的元素。players = ['charles', 'martina', 'michael', 'florence', 'eli'] print(players[0:3])
如果没有指定第一个索引,Python将自动从列表开头开始:
players = ['charles', 'martina', 'michael', 'florence', 'eli'] print(players[:4])
要让切片终止于列表末尾,也可使用类似的语法。
players = ['charles', 'martina', 'michael', 'florence', 'eli'] print(players[1:])
要输出最后三个元素,可使用切片players[-3:] :
players = ['charles', 'martina', 'michael', 'florence', 'eli'] print(players[-3:])
-
遍历切片
要遍历列表的部分元素,可在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())
-
复制列表
要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:] )
两个列表变量指向不同内存地址。my_foods = ['pizza', 'falafel', 'carrot cake'] friend_foods = my_foods[:]
倘若我们只是简单地将 列表一 赋给 列表二 ,就不能得到两个列表。例
friend_foods = my_foods
两个列表指向同一个内存地址。
-
2.7 元组
列表是可以修改的,表非常适合用于存储在程序运行期间可能变化的数据集。
Python将不能修改的值称为不可变的 ,而不可变的列表被称为元组 。
-
定义元组
元组看起来犹如列表,但使用圆括号而不是方括号来标识。定义元组后,就可以使用索引来访问其元素。
dimensions = (200, 50) print(dimensions[0]) print(dimensions[1])
尝试更改元组dimensions中的一个元素:
dimensions = (200, 50) dimensions[0] = 250 Traceback (most recent call last): File "dimensions.py", line 3, in <module> dimensions[0] = 250 TypeError: 'tuple' object does not support item assignment
-
遍历元组中的所有值
像列表一样,也可以使用for 循环来遍历元组中的所有值:
dimensions = (200, 50) for dimension in dimensions: print(dimension)
-
修改元组的变量
虽然不能修改元组的元素,但可以给存储元组的变量赋值,即为给元组变量赋值是合法的:dimensions = (200, 50) dimensions = (400, 100) for dimension in dimensions: print(dimension)