《Python编程:从入门到实践》每章小结

第二章 变量和简单数据类型
对于给定变量赋值,在程序中可以随时改变该变量值,而python将始终记录变量的最新值。
数据的类型:
字符串:用’’或者””括起来的都是字符串,字符串的常用函数:
方法Title(),通常用法:**.title()——首字母大写 lower()——全部小写;upper()——全部大写
+,通常是用于合并字符串。
\t:制表符,用于在字符串前添加空格
\n:换行符,用于换行
\n\t:,用于换到下一行,并在下一行开头添加一个制表符
方法Rstrip():删除字符串末尾的空白,该删除是暂时的
Lstrip():删除字符串开头的空白
Strip():删除字符串两端的空白
数据:
整数,可对整数执行加(+)减(-)乘(*)除(/)运算。
浮点数,
对于数字有时需要用str()方法来避免类型错误

第三章 列表
names=[,]
列表形式:[,],列表中可以放任何元素。列表是从0开始索引,列表末的索引一般为-1,列表的命名最好是带s。
对列表进行修改:
修改列表元素:可以直接对指定元素进行修改,例如:names[2]=’
列表中添加元素:1.可以利用append()方法在列表最后添加元素,例如names.append(‘
’)
2.利用insert()方法在列表的指定位置添加元素,例如names.insert(2,’****’)
列表中删除元素:1.del语句删除!指定位置的元素,例如del names[2]
2.使用方法pop()删除列表指定位置的元素(默认值为列表最末元素),并将该元素返回给pop(),所以pop()是一个有值返回的方法。例如:pop_name=names.pop(2)
3.删除特定已知的元素,直接使用方法remove()。例如:names.remove(‘**’),值得注意的是,当特定元素出现多次,remove()仅删除第一个出现的值,因此全部删除需要使用for循环
组织列表:1.对列表按字母顺序排列,并且该排列改变是永久的,可使用sort()方法。例如:names.sort(),names.sort(reverse=True),表示按字母的反顺序排列
2.对列表进行暂时性更改,使用的是sorted()函数!sorted(names)
请注意方法与函数的调用方式不同!书中对该部分并没有详细解释!方法的调用是name.sort(),而函数的调用方法是sorted(names)。并且函数与方法的作用域并不相同:以sort()和sorted()为例,sort()对列表的改变是永久性的,sorted()的改变是暂时性的。但是对于该问题在后续的自定义函数上还存在问题!
3.倒着打印函数,使用方法reverse,例如:names.reverse(),print(names)
4.确定列表的长度:使用函数len()确定列表长度,其将返回列表长度。

第四章 操作列表
names=[,]
遍历列表:for循环 例如:for name in names:
利用函数创建数值列表:1.range()函数回生成一系列数字,例如range(1,10)表示会返回从1到9一系列数字,即返回(1,2,3,4,5,6,7,8,9),注意range返回的数值是到第二个数值即10前的一位数;
2.list()函数可以直接将range()函数的结果直接转换为列表,即list(range(1,10))返回的将是[1,2,3,4,5,6,7,8,9]
列表切片:对于列表,想仅仅使用列表的一部分可以使用切片,格式如下:names[1:4]表示仅取names列表中的索引1-3的数字!(格外注意,表示在第二个值终止,只能取到第二个值-1的索引)其中names[:4]默认从第0个索引开始取;而names[1:]表示取到末尾所有元素
利用切片可以复制列表:令name_copy=names[:],对names列表建立了副本,因此不具有一致性
元组:不可变的列表函数:dimensions=(200,50)表示不可变列表函数,因此不能通过demensions(0)=500来改变第一个元素,但可以通过直接修改来改变这个函数,例如:demensions=(100)

第五章 if语句
if语句的判断:if语句后续条件如果满足,则会返回true,从而执行条件后的语句,如果不满足则会返回false,执行else后的语句。这种要么返回True要么返回False的语句被称为布尔表达式。
条件测试语句:
条件测试表达式
==:相等(注意大小写会认为是不相等)
!=:不相等

=、<=:分别表示大于等于或小于等于
in、not in:分别表示包含、不包含
and:检查多个条件均满足
Or:检查多个条件有一个满足

If相关语句:

  • 1:最简单,只有一个if语句:
age=18
If age <= 18:
    print(****)

简单的if语句中,Python会现对条件测试进行判断,如果条件满足,则执行if语句后紧跟的代码行,如果不满足则会忽略。

  • 2:if-else语句:与简单的if语句不同,当条件测试不满足时,将会执行else后的语句。要注意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!")

-3:if-elif-else语句:该语句的逻辑是,若if后的条件测试得到满足,则执行if后的语句,若if后条检测是未满足,则判断是否满足elif后的条件测试,如果满足,则执行elif后的语句,否则执行else后的语句。注意在这种语句中elif是可以根据需要使用任意数量的

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.")

if函数的应用
和for结合,处理列表。其中要明确在if语句中,将列表名用在条件表达式中时,Python将在列表至少包含一个元素时返回True,而列表为空时返回False。

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?")

第六章 字典

  • 字典基础内容

字典最为特别的是其为一系列键—值对。例如alien_0 = {‘color’: ‘green’, ‘points’: 5},‘color’: 'green’就为一对键—值,Python认为alien_0[‘color’]=‘green’
添加字典的键—值对:直接字典名[添加的键]=添加的值
修改字典的键相对应的值:直接字典名[键]=新值

alien_0 = {'color': 'green', 'points': 5}
alien_0['points']=6
alien_0['x_position']=6
print(alien_0)

删除字典的某一个键—值:del 字典名[键] del语句删除将会将对应的键-值彻底删除
较长的字典的格式

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    }
  • 遍历字典
    1.遍历字典的键-值:这种情况下用到方法items(),items()将返回键-值对列表
favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    }
for a,b in favorite_languages.items():
    print(a+‘:’+b)

2.只遍历字典中的键:使用方法keys(),其将返回键,但是该键返回是无序的
如果想返回有序的键要使用函数sorted()来获取按特定顺序排列的键的列表的副本

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    }
for a in favorite_languages.keys():
    print(‘key’+‘:’+a)
for a in sorted(favorite_languages.keys()):
    print(‘key’+‘:’+a)

3.只想遍历字典中的值,使用方法values(),该方法将返回字典中的值列表
对于字典中的值,有一个与键不同的地方,在于值有可能会重复,而键不会,因此想创造不含重复项的值列表,则使用函数set()

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    }
for b in favorite_languages.values():
    print(‘value’+‘:’+b)
for a in set(favorite_languages.values()):
    print(‘value’+‘:’+b)
  • 字典嵌套
    可以在字典中嵌套列表,也可以在列表中嵌套字典,也可以在字典中嵌套字典。其中可以发现对于字典,值是可以有多种多样的形式的。
#列表中元素为字典,列表中嵌套字典
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]
#字典中嵌套列表:字典的值对应的是列表
pizza = {
    'crust': 'thick',
    'toppings': ['mushrooms', 'extra cheese'],
    }
#字典中嵌套字典
users = {
    'aeinstein': {
        'first': 'albert',
        'last': 'einstein',
        'location': 'princeton',
         },
    'mcurie': {
        'first': 'marie',
        'last': 'curie',
        'location': 'paris',
         },
     }

第七章用户输入和函数

  • 用户输入:函数input()用于用户输入,并将用户输入返回给函数,值得注意的是一般会默认返回字符串,因此如果要使用数字或浮点类型则需要用int()进行转换。
  • while循环:while循环表示当while后的条件满足时,将一直执行while后的语句。 在下面的代码块中,将input()与while结合起来,注意到用了"+=",这个表明将prompt=prompt+"\nEnter ‘quit’ to end the program. ",因此在后续input()中prompt已经是一个两排的语句了。看第二遍才注意到这个细节。
prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "
message = ""
while message != 'quit':
    message = input(prompt)
    print(message)

由于while语句中当测试条件为True时,会不断运行后续语句,因此设计如何终止该程序是很重要的。使用标志中断while后的语句。一般这种标志是命令为True,之后再指出何种情况下该标志变成False,变为False后语句中断

prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "
active=True
while active:
    message = input(prompt)
    if message!= 'quit':
       print(message)
    else:
       active=False 

或者直接使用break来中断该语句。

prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "
while True:
    message = input(prompt)
    if message!= 'quit':
       print(message)
    else:
       break

continue语句:将会忽略包含在while语句中continue后的语句,而是返回while开头,重新执行while语句

current_number = 0
while current_number < 10:
    current_number += 1
    if current_number % 2 == 0:
        continue
#当current_number可以被2整除时,执行continue,也就是忽略print()而是从while条件重新开始
    print(current_number)
  • while语句应用于列表,可以解决for循环不适用于修改列表的情况,而用while可以修改列表,while可以用于在列表中移动元素,删除指定元素remove(),或者增加字典的键-值

第八章 函数

  • 定义函数
    定义函数包括函数名称,形参,函数执行的语句。其中形参不是必须的,可以没有形参,但若有形参要注意形参顺序和名称,以免在实参传递过程中出现错误。
    在实参传递过程中最常见的就是基于实参顺序,将实参关联到形参,也就是所谓的位置实参。def name(a,b)的函数定义中,调用函数name(“gui”,“pyto”)中通过位置一致性将实参"gui"传递给形参a,而将"pyto"传递给形参b。
    另一种传递也可以直接将形参标明,传递给函数名称-值对。这样可以无需考虑函数调用中的实参顺序。如上可以使用关键字实参调用函数 name(b=“pyto”,a=“gui”)
    在实参传递中有一种可以设定默认值,直接赋予形参一个默认值。在调用函数中给形参提供了实参时, 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() + ".")

在传递实参中,注意实参可以是列表

def greet_users(names):
"""向列表中的每位用户都发出简单的问候"""
    for name in names:
        msg = "Hello, " + name.title() + "!"
        print(msg)
usernames = ['hannah', 'ty', 'margot']
greet_users(usernames)

可以通过toping的形参,将所有实参传递过去,形参名toppings中的星号让Python创建一个名为toppings的空元组,并将收到的所有值都封装到这个元组中。
而这种可以接受任意数量实参的形参可以与一般形参相结合,但是必须在定义中将该形参放在最后,以确保现通过位置实参传递给正常形参,在将剩余的实参收集到最后一个形参中。

def make_pizza(size, *toppings):
"""概述要制作的比萨"""
    print("\nMaking a " + str(size) +
            "-inch pizza with the following toppings:")
    for topping in toppings:
        print("- " + topping)
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

函数除了能够执行print以外,也可以给函数返回值。在函数中,使用return将特定的值返回给函数。这个特定的值可以是任何类型的值,可以是字符串也可以是列表,也可以是字典。

def build_person(first_name, last_name, age=''):
"""返回一个字典,其中包含有关一个人的信息"""
    person = {'first': first_name, 'last': last_name}
    if age:
        person['age'] = age
    return person
  • 导入函数模块
    函数模块是扩展名为.py的文件,仅包括函数。
    函数模块的导入:(注意要在同一目录下)
    导入整个函数模块:import module_name;使用模块具体函数:module_name.function_name()
    导入函数模块的某个函数:from module_name import function_0, function_1, function_2,使用该函数时可以直接调用,不用在模块名称
    导入模块的所有函数:from module_name import *,使用模块函数时无需加模块名称,直接调用
    使用as给函数制定别名:from module_name import function_name as fn
    使用as给函数制定别名:import module_name as mn

第九章类
学会如何创建类,使用class创建类,使用方法__init__定义类的形参,其中__init__中必定包括self这一形参,因为self会接受实例的所有实参,在将其传递到具体实参。以self为前缀的变量可供类中所有方法使用。而在其他方法中如果除__init__外不需要其他参数,则直接用self替代,如果需要则需要提供新的形参

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 update_odometer(self, mileage):
      """将里程表读数设置为指定的值"""
         self.odometer_reading = mileage  
 #该方法中增加了新的参数,mileage,该参数只能在update方法中使用
 my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
#调用类中的方法
       

创建类中,可以设定默认值,通过在__init__()方法中设定默认值,有两种方法,第一通过self.属性=默认值设定,也可以直接在__init__()中设定直接将属性=默认值;之后可以直接通过具体实例.属性=其他值修改默认值,也可以在类中设定方法,修改默认值:
def 方法(self,值):
self.属性=值
类中的函数被称为方法(方法和函数的区别在于是否在类中定义?)
创建类后,可创建相应实例,通过**句点.**可以访问实例的属性、调用相关方法。

  • 类是可以直接继承,继承时要注意原类要包含在其中,具体继承方法
    创建子类时,父类必须包含在当前文件中,且位于子类前面
    Class 子类(父类):
    def init(self,父类属性,增加属性):
    supre ().init(父类属性)
    其中最值得注意的是super()方法,其使子类包含父类所有属性
class ElectricCar(Car):
"""电动汽车的独特之处"""
     def __init__(self, make, model, year):
"""初始化父类的属性"""
    super().__init__(make, model, year)
#让Python调用ElectricCar的父类的方法__init__(),让ElectricCar实例包含父类的所有属性。
    self.battery_size = 70 
#增加不同于父类的属性
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name()

子类可以单独增加属性及方法。也可以重写父类方法,只需定义相同的方法名称,能够覆盖父类方法;
同时注意到可以将实例用作属性,也就是定义某个属性为一个类的实例:
self.battery=Battery()
调用该参数时是调用该实例,因此需要指明具体的方法:my_car.battery.describe_battery().

class Car():
--snip--
class Battery():
"""一次模拟电动汽车电瓶的简单尝试"""
    def __init__(self, battery_size=70):
 """初始化电瓶的属性"""
        self.battery_size = battery_size
     def describe_battery(self):
"""打印一条描述电瓶容量的消息"""
         print("This car has a " + str(self.battery_size) + "-kWh battery.")
 
class ElectricCar(Car):
"""电动汽车的独特之处"""
    def __init__(self, make, model, year):
"""
初始化父类的属性,再初始化电动汽车特有的属性
"""
        super().__init__(make, model, year)
        self.battery = Battery()
  #该battery属性直接调用了上面的类的实例,但有一个一问就是如果Battery实例是有多个参数,并且有参数没有默认值的话,那这种调用能够成功吗,或者说可行吗
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()

类可以构成模块,在具体实例中可以通过:from car import Car, 该语句可以从car模块中导入Car类,该方法不仅可以在实例中导入类,也可以在模块中导入模块。
该方法为面向对象编程。

第十章
本章学习从指定路径中读取文件、写入文件。对应语句为:with open(filename,’w’) as file:
其中’w’、’a’、’r’分别对应写入模式、附加模式、读取模式,如果没有这个参数则默认读取模式。As 后的file作为对象,在with模块下使用该名称表明直接对该文件进行了编辑。
其中如若编辑的对象位置与.py位置一致,则filename=’*.txt’;如果是在.py的位置的文件夹中,则filename=’wenjianjia*.txt’
在只读模式下,常用的函数有:read()——是指读取文件的全部内容,由于read()会返回到达文件末尾返回一个空字符串,所以经常结合rstrip()使用
Readline():从文件中读取每一行,并将其储存在一个列表中,这表明readline()返回的是一个以文件每一行为元素的列表
在写入模式下,常用的函数有:write():将字符串写入文件,python只能将字符串写入文本文件,注意在write中加入换行符\n
本章学习如何在出现异常时继续运行,而不是报错,即处理异常。通过try—except—else来进行异常处理。
Try:后面接着有可能出现异常的python语句
Except ZeroDivisionError:except后跟着例外的事项,之后在该模块下跟着例外情况或者说出现制定异常下应该进行的处理,pass或者别的
Else:不一定会使用,表明在try代码块成功执行下的代码。
本章学习引用模块,之后进行储存或者下载数据。
引用json模块:import json,之后就可以进行下载或者储存数据库
储存数据库:json.dump(要储存的数据,可用于储存数据的文件对象),这一般会配合着with…open使用,要储存的数据可以是字符串、列表
下载数据:json.load(下载的文件名称),其返回数据。
本章学习了一些处理方法:
Try—except—else与while相结合;
分析文本,通过方法split()以空格为分隔符将字符串分拆程多个部分,并将这些部分都储存到一个列表中。
保存和读取用户生成的数据。

第11章
单元测试:针对某个函数,用于核实函数某个方面没有问题
测试用例是一组单元测试,这些测试和在一起核实函数在各种情形下的行为都符合要求。
步骤:引入模块unittest:import unittest
引入要检测的函数:from **.py import **(函数名称)
引用单元检测的类:class TestCase(unittest.TestCase): 其中子类的命名可以随意,但最好包含test
测试函数的一个方面:def test_
(self):
(要注意一定要以Test开头,这样运行该PY文件时会自动运行test开头的部分))
之后可以给要监测的部分以实参
Self.assertEqual(函数给于实参后的运行结果,‘本应运行结果’)该方法为断言方法,用于核实函数结果与期待结果是否一致
运行文件中的测试:unittest.main()
具体实例:
import unittest
from name_function import get_formatted_name
class NamesTestCase(unittest.TestCase):
“”“测试name_function.py”""
def test_first_last_name(self):
“”“能够正确地处理像Janis Joplin这样的姓名吗? “””
 formatted_name = get_formatted_name(‘janis’, ‘joplin’)
 self.assertEqual(formatted_name, ‘Janis Joplin’)
unittest.main()

对类进行测试
与对函数进行测试大体是相同的,首先要增加对多个断言方法:
assertEqual(a,b) 判断A=B
assertNotEqual(a,b) 判断A!=B
assertTure(X) 判断X是否为ture
assertFalse(X) 判断X是否为false
assertIn(item,list) 核实item在list中
assertNotIn(item,list) 核实item不在list中
其次增加了setUp()方法,setUp()会率先被运行,然后在运行以test打头的方法,setUp完成两件事:第一,给类以具体参数,二,给类参数以变量。由于该方法中的变量需在后续中使用,因此必须在变量前加self.以确保能够将变量储存在属性中。
import unittest
from survey import AnonymousSurvey
class TestAnonymousSurvey(unittest.TestCase):
“”“针对AnonymousSurvey类的测试”""
def setUp(self):
“”"
创建一个调查对象和一组答案,供使用的测试方法使用
“”"
question = “What language did you first learn to speak?”
 self.my_survey = AnonymousSurvey(question)(给于要测试的类具体参数)
 self.responses = [‘English’, ‘Spanish’, ‘Mandarin’](给于参数变量)
def test_store_single_response(self):
“”“测试单个答案会被妥善地存储”""
self.my_survey.store_response(self.responses[0])
self.assertIn(self.responses[0], self.my_survey.responses)
def test_store_three_responses(self):
“”“测试三个答案会被妥善地存储”""
for response in self.responses:
self.my_survey.store_response(response)
for response in self.responses:
self.assertIn(response, self.my_survey.responses)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值