
## 第一章 软件安装与简单操作
## 第二章 字符串操作总结
- 方法
方法是Python可对数据执行的操作。每个方法后面都跟着一对括号,这是因为方法通常需要额外的信息来完成,这种信息是在括号内提供的。例如使用title方法修改字符串大小写
`name="shizy"`
`print(name.title())`
输出Shizy,注意这里方法括号里面没有参数。方法title首字母大写,upper把所有字母大写,lower所有字母小写。
- python使用+号拼接字符串
- n,t分别为字符串添加换行,制表位。
- 方法rstrip()删除字符串右边空白strip是英文剥光的意思。左空白lstrip,左右空白全删除strip。
- 函数str()实现数到字符串转换
## 第三章 列表操作(元素可修改)
- 列表是有序的元素组合。用方括号[]表示,用逗号分隔
`liebiao1=['A','B','C','d']`
- 访问列表(第一个元素索引号0)
`print(libiao1[0])`
- 修改删除添加元素
修改列表元素的语法与访问列表元素的语法类似。要修改列表元素,可指定列表名和要修改的元素的索引,再指定该元素的新值。例如修改第一个元素为a
`libiao1[0]='a'`
- 末尾添加元素(利用方法append())
`libiao1.append('e')`
- 插入元素到任意位置(利用方法insert())
`libiao1.insrt(1,'b')`#在第二个位置插入b元素
#### 删除元素 ####
- 如果知道元素位置(del语句):`del libiao1[0]`
- 使用方法pop():pop()方法可删除列表末尾的元素,并让你能够接着使用它。
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
popped_motorcycle = motorcycles.pop()
print(motorcycles)
print(popped_motorcycle)
也可以使用pop()来删除列表中任何位置的元素,只需在括号中指定要删除的元素的索引
- 如果知道元素值可以使用remove()方法`motorcycles.remove('ducati') print(motorcycles)`
####元素排序####
- 永久排序sort()方法,排序后原始列表顺序永久修改。还可以按与字母顺序相反的顺序排列列表元素,为此,只需向sort() 方法传递参数`reverse=True`
- 临时排序 sorted()函数(不是方法)
- 倒叙打印列表 使用reverse()方法
- 函数len()获取列表长度,以下代码返回4
cars = ['bmw', 'audi', 'toyota', 'subaru']
len(cars)
## 第四章 操作列表
- 遍历列表(冒号与缩进)
liebiao1=['A','B','C','d']
for i in liebiao1:
print(i)
- range(x0,xm,dx)函数不包括最后一个值,步长dx
for value in range(1,5):
print(value)
- list()函数将range结果转换列表格式
- min(),max(),sum()函数对列表操作
- 列表解析:列表解析 将for 循环和创建新元素的代码合并成一行,并自动附加新元素,请注意,这里的for 语句末尾没有冒号。
squares = [value**2 for value in range(1,11)]
print(squares)
- 切片(使用列表的一部分):如果你没有指定第一个索引,将自动从列表开头开始;如果你没有指定第二个索引,将自动从列表到结尾。
print(libiao1([0:2]))
- 列表复制,这么操作的目的是为了得到新列表并进行其他操作,否则会修改掉原列表。
my_foods = ['pizza', 'falafel', 'carrot cake']
❶ friend_foods = my_foods[:]
my_foods.append('cannoli')
friend_foods.append('ice cream')
print("My favorite foods are:")
print(my_foods)
print("nMy friend's favorite foods are:")
print(friend_foods)
上面代码就可以在my_friend添加ice_cream而不会修改原始列表。但是注意1处冒号。去掉冒号两个列表都被修改。
## 第五章 元组操作(tuple不可修改元素)
- 使用圆括号而不是方括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。
dimensions = (200, 50)
print(dimensions[0])
print(dimensions[1])
- 遍历元组
for dimension in dimensions:
print(dimension)
- 修改元组变量: 虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,如果要修改前述矩形的尺寸,可重新定义整个元组:
dimensions = (200, 50)
print("Original dimensions:")
for dimension in dimensions:
print(dimension)
dimensions = (400, 100)
print("nModified dimensions:")
for dimension in dimensions:
print(dimension)
## 第六章 If 语句用法(末尾冒号)
- 假设你有一个汽车列表,并想将其中每辆汽车的名称打印出来。对于大多数汽车,都应以首字母大写的方式打印其名称,但对于汽车名'bmw' ,应以全大写的方式打印。下面的代码遍历一个列表,并以首字母大写的方式打印其中的汽车名,但对于汽车名'bmw' ,以全大写的方式打印:
cars = ['audi', 'bmw', 'subaru', 'toyota']
for car in cars:
if car == 'bmw':
print(car.upper())
else:
print(car.title())
- 检查是否不相等:要判断两个值是否不等,可结合使用惊叹号和等号(!=),其中的惊叹号表示不等。
- 检查多个条件: and 和or。
- 检查特定值是否包含在列表中(in)
requested_toppings = ['mushrooms', 'onions', 'pineapple']
'mushrooms' in requested_toppings
- 检查特定值是否不包含在列表中 (not in)
- 在条件测试通过了时执行一个操作,并在没有通过时执行另一个操作;在这种情况下,可使用Python提供的if-else 语句
- if-elif-else 结构
- 使用多个elif 代码块
- 确定列表不是空的:对于处理的每个列表都做了一个简单的假设,即假设它们都至少包含一个元素。我们马上就要让用户来提供存储在列表中的信息,因此不能再假设循环运行时列表不是空的。有鉴于此,在运行for 循环前确定列表是否为空很重要
## 第七章 字典操作(相当于C语言结构体,花括号表示)
- 在Python中,字典是一系列键—值对 。每个键都与一个值相关联,你可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何Python对象用作字典中的值
alien_0 = {'color': 'green', 'points': 5}
- 键和值之间用冒号分隔,而键—值对之间用逗号分隔
- 访问字典的值:要获取与键相关联的值,可依次指定字典名和放在方括号内的键
alien_0 = {'color': 'green'}
print(alien_0['color'])
- 添加键—值对:字典是一种动态结构,可随时在其中添加键—值对。要添加键—值对,可依次指定字典名、用方括号括起的键和相关联的值。
alien_0 = {'color': 'green', 'points': 5}
print(alien_0)
alien_0['x_position'] = 0
alien_0['y_position'] = 25
- 修改字典中的值:要修改字典中的值,可依次指定字典名、用方括号括起的键以及与该键相关联的新值。
- 删除键—值对:对于字典中不再需要的信息,可使用del 语句将相应的键—值对彻底删除。使用del 语句时,必须指定字典名和要删除的键。
del alien_0['points']
print(alien_0)
- 遍历字典 所有的键—值对(利用liems()方法)
user_0 = {
'username': 'efermi',
'first': 'enrico',
'last': 'fermi',
}
for key, value in user_0.items():
print("nKey: " + key)
print("Value: " + value)
- 遍历字典中的所有键(利用方法keys())
- 按顺序遍历字典中的所有键:字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。这不是问题,因为通常你想要的只是获取与键相关联的正确的值。要以特定的顺序返回元素,一种办法是在for 循环中对返回的键进行排序。为此,可使用函数sorted() 来获得按特定顺序排列的键列表的副本。
- 遍历字典中的所有值,可使用方法values()。对于有很多相同值的重复项可以结合set函数
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
print("The following languages have been mentioned:")
for language in set(favorite_languages.values()):
print(language.title())
- 字典列表的嵌套使用
alien_0 = {'color': 'green', 'points': 5}
alien_1 = {'color': 'yellow', 'points': 10}
alien_2 = {'color': 'red', 'points': 15}
aliens = [alien_0, alien_1, alien_2]
for alien in aliens:
print(alien)
- 字典字典嵌套使用
## 第八章 while循环
- 函数input():函数input() 接受一个参数:即要向用户显示的提示 或说明,让用户知道该如何做.
message = input("输入一个整数:")
print(message)
- 使用int() 函数来获取数值输入。使用函数input() 时,Python将用户输入解读为字符串。利用int转换为整数。
- 求模运算符 (%)是一个很有用的工具,它将两个数相除并返回余数。
- while循环
current_number = 1
while current_number <= 5:
print(current_number)
current_number += 1
- 使用break 退出循环
while True:
city = input(prompt)
if city == 'quit':
break
else:
print("I'd love to go to " + city.title() + "!")
- 在循环中使用continue:要返回到循环开头,并根据条件测试结果决定是否继续执行循环,可使用continue语句,它不像break 语句那样不再执行余下的代码并退出整个循环
## 第九章 函数
- 定义函数
def greet_user():
"""显示简单的问候语"""
print("Hello!")
greet_user()
这个示例演示了最简单的函数结构。使用关键字def 来告诉Python你要定义一个函数。这是函数定义 ,向Python指出了函数名,还可能在括号内指出函数为完成其
任务需要什么样的信息。在这里,函数名为greet_user() ,它不需要任何信息就能完成其工作,因此括号是空的(即便如此,括号也必不可少)。最后,定义以冒号结尾。紧跟在def greet_user(): 后面的所有缩进行构成了函数体。❷处的文本是被称为文档字符串 (docstring)的注释,描述了函数是做什么的。文档字符串用三引号括起,Python使用它们来生成有关程序中函数的文档。
- 函数传递参数:向函数传递信息(实参和形参)
def greet_user(username):
"""显示简单的问候语"""
print("Hello, " + username.title() + "!")
greet_user('jesse')
- 位置实参,根据参数顺序指定参数:是传递给函数的名称—值对。你直接在实参中将名称和值关联起来了,因此向函数传递实参时不会混淆。关键字实参让你无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途。
def describe_pet(animal_type, pet_name):
"""显示宠物的信息"""
print("nI have a " + animal_type + ".")
print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet(animal_type='hamster', pet_name='harry')
- 编写函数时,可给每个形参指定默认值 。在调用函数中给形参提供了实参时,Python将使用指定的实参值;否则,将使用形参的默认值。因此,给形参指定默认值后,可在函数调用中省略相应的实参。使用默认值可简化函数调用,还可清楚地指出函数的典型用法。
def describe_pet(pet_name, animal_type='dog'):
"""显示宠物的信息"""
print("nI have a " + animal_type + ".")
print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet(pet_name='willie')
- 函数返回值
def get_formatted_name(first_name, last_name):
"""返回整洁的姓名"""
full_name = first_name + ' ' + last_name
return full_name.title()
- 传递列表:向函数传递列表很有用,这种列表包含的可能是名字、数字或更复杂的对象(如字典)。在函数中修改列表将列表传递给函数后,函数就可对其进行修改。在函数中对这个列表所做的任何修改都是永久性。
- 传递任意数量的实参(形参*toppings ,但不管调用语句提供了多少实参,这个形参都将它们统统收入囊中)。形参名*toppings 中的星号让Python创建一个名为toppings 的空元组,并将收到的所有值都封装到这个元组中。
def make_pizza(*toppings):
"""打印顾客点的所有配料"""
print(toppings)
make_pizza('pepperoni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')
- 结合使用位置实参和任意数量实参。如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。Python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。
- 导入整个模块。要让函数是可导入的,得先创建模块。模块 是扩展名为.py的文件,包含要导入到程序中的代码。
- 导入特定的函数`from module_name import function_name`, `from module_name import function_0, function_1, function_2`
- 使用as 给函数指定别名
- 导入模块中的所有函数:使用星号(* )运算符可让Python导入模块中的所有函,`from pizza import *`
## 第十章 python类(面向对象)慢慢体会哦
- 创建和使用类
使用类几乎可以模拟任何东西。下面来编写一个表示小狗的简单类Dog ——它表示的不是特定的小狗,而是任何小狗。对于大多数宠物狗,我们都知道些什么呢?它们都有名字和年龄;我们还知道,大多数小狗还会蹲下和打滚。由于大多数小狗都具备上述两项信息(名字和年龄)和两种行为(蹲下和打滚),我们的Dog 类将包含它们。这个类让Python知道如何创建表示小狗的对象。编写这个类后,我们将使用它来创建表示特定小狗的实例。
- 创建Dog 类
根据Dog 类创建的每个实例都将存储名字和年龄。每条小狗蹲下(sit())和打滚(roll_over())的能力.
class Dog():
❷ """一次模拟小狗的简单尝试"""
❸ def __init__(self, name, age):
"""初始化属性name和age"""
❹ self.name = name
self.age = age
❺ def sit(self):
"""模拟小狗被命令时蹲下"""
print(self.name.title() + " is now sitting.")
def roll_over(self):
"""模拟小狗被命令时打滚"""
print(self.name.title() + " rolled over!")
在❶处,我们定义了一个名为Dog 的类。根据约定,在Python中,首字母大写的名称指的是类。这个类定义中的括号是空的,因为我们要从空白创建这个类.
- 类中的函数称为方法. 类中的函数称为方法 ;你前面学到的有关函数的一切都适用于方法,就目前而言,唯一重要的差别是调用方法的方式。❸处的方法__init__() 是一个特殊的方法,每当你根据Dog 类创建新实例时,Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。
- 我们将方法__init__() 定义成了包含三个形参:self 、name 和age 。在这个方法的定义中,形参self 必不可少,还必须位于其他形参的前面。我们将通过实参向Dog() 传递名字和年龄;self 会自动传递,因此我们不需要传递它。每当我们根据Dog 类创建实例时,都只需给最后两个形参(name 和age )提供值。
- Dog 类还定义了另外两个方法:sit() 和roll_over() (见❺)。由于这些方法不需要额外的信息,如名字或年龄,因此它们只有一个形参self
- 根据类创建实例
可将类视为有关如何创建实例的说明。Dog 类是一系列说明,让Python知道如何创建表示特定小狗的实例。下面来创建一个表示特定小狗的实例
my_dog = Dog('willie', 6)
❷ print("My dog's name is " + my_dog.name.title() + ".")
❸ print("My dog is " + str(my_dog.age) + " years old.")
这里使用的是前一个示例中编写的Dog 类。在❶处,我们让Python创建一条名字为'willie' 、年龄为6 的小狗。遇到这行代码时,Python使用实参'willie' 和6 调用Dog 类中的方法__init__() 。方法__init__() 创建一个表示特定小狗的示例,并使用我们提供的值来设置属性name 和age 。方法__init__() 并未显式地包含return 语句,但Python自动返回一个表示这条小狗的实例。我们将这个实例存储在变量my_dog 中。在这里,命名约定很有用:我们通常可以认为首字母大写的名称(如Dog )指的是类,而小写的名称(如my_dog )指的是根据类创建的实例。
- 访问属性.要访问实例的属性,可使用句点表示法。在❷处,我们编写了如下代码来访问my_dog 的属性name 的值:
- 调用方法
my_dog = Dog('willie', 6)
my_dog.sit()
my_dog.roll_over()
要调用方法,可指定实例的名称(这里是my_dog )和要调用的方法,并用句点分隔它们。遇到代码my_dog.sit() 时,Python在类Dog 中查找方法sit() 并运行其代码。
- 使用类和实例
- 继承:编写类时,并非总是要从空白开始。如果你要编写的类是另一个现成类的特殊版本,可使用继承 。一个类继承 另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类 ,而新类称为子类 。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。
- 下面来创建一个简单的ElectricCar 类版本,它具备Car 类的所有功能:
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self, miles):
self.odometer_reading += miles
❷ class ElectricCar(Car):
"""电动汽车的独特之处"""
❸ def __init__(self, make, model, year):
"""初始化父类的属性"""
❹ super().__init__(make, model, year)
❺ my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
首先是Car 类的代码(见❶)。创建子类时,父类必须包含在当前文件中,且位于子类前面。在❷处,我们定义了子类ElectricCar 。定义子类时,必须在括号内指定父类的名称。方法__init__() 接受创建Car 实例所需的信息(见❸)。❹处的super() 是一个特殊函数,帮助Python将父类和子类关联起来。这行代码让Python调用ElectricCar 的父类的方法__init__() ,让ElectricCar 实例包含父类的所有属性。父类也称为超类 (superclass),名称super因此而得名。
## 第十一章 文件操作
- 读取整个文件。要读取文件,需要一个包含几行文本的文件。下面首先来创建一个文件,它包含精确到小数点后30位的圆周率值,且在小数点后每10位处都换行:
with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents)
- 函数open()接受一个参数:要打开的文件的名称。函数open() 返回一个表示文件的对象。在这里,open('pi_digits.txt') 返回一个表示文件pi_digits.txt 的对象;Python将这个对象存储在我们将在后面使用的变量中。关键字with 在不再需要访问文件后将其关闭。在这个程序中,注意到我们调用了open(),但没有调用close() ;你也可以调用open() 和close() 来打开和关闭文件,但这样做时,如果程序存在ug,导致close() 语句未执行,文件将不会关闭。
- 逐行读取
filename = 'pi_digits.txt'
❷ with open(filename) as file_object:
❸ for line in file_object:
print(line)
-文件写入:要将文本写入文件,在调用open() 时需要提供另一个实参,告诉Python你要写入打开的文件
filename = 'programming.txt'
❶ with open(filename, 'w') as file_object:
❷ file_object.write("I love programming.")
在这个示例中,调用open() 时提供了两个实参(见❶)。第一个实参也是要打开的文件的名称;第二个实参('w' )告诉Python,我们要以写入模式 打开这个文件。打开文件时,可指定读取模式 ('r' )、写入模式 ('w' )、附加模式 ('a' )或让你能够读取和写入文件的模式('r+' )。如果你省略了模式实参,Python将以默认的只读模式打开文件。
如果你要写入的文件不存在,函数open() 将自动创建它。然而,以写入('w' )模式打开文件时千万要小心,因为如果指定的文件已经存在,Python将在返回文件对象前清空该文件。
- 写入多行。要让每个字符串都单独占一行,需要在write() 语句中包含换行符n。
- 异常处理
- 分析文本.方法split() 以空格为分隔符将字符串分拆成多个部分,并将这些部分都存储到一个列表中
- 存储数据 JSON
- 函数json.dump() 接受两个实参:要存储的数据以及可用于存储数据的文件对象
----------
#*------------------实战项目-----------------*