《Python编程》_入门到实践.writing

得来全不费功夫,绝知此事要躬行!

第一章 起步

好饭不怕晚。

下载网址www.org.com,根据电脑系统下载即可。安装好Python,继续下载Sublime Text文本编辑器。

装好软件,打开新世界。

第二章 变量和简单数据类型

2.1变量

变量名只能包含字母,数字,下划线,不能以数字打头,不能包含空格,尽量简单且具有描述性。

#print(message),message即为变量。

2.2使用变量名时避免发生命名错误

像这样:

print(message)✅ 
print(mesage)

程序无法运行时,解释器将提供一个traceback。指出解释器尝试运行代码时,在什么地方陷入了困境。很多编程错误都很简单,只是在程序的某一行输错一个字符。

d8c4b2aed8bb4f69b57c7a8ee9f69b40.jpeg

2.3字符串

字符串时一系列字符,用括号括起的都是字符串,可以是单引号和双引号。

2.3.1使用方法修改字符串大小写

name后面的句点(.),让python对变量name执行方法title()指定的操作。title()将每个单词首字母大写
name=“alice"
Print(name.title())

2.3.2 在字符串中使用变量

要在字符串中插入变量的值,可在前引号前加上字母f,再将要插入的变量放在花括号内。这种字符串名为f字符串。
First_name=“sun"
Last_name=“wu kong"
Full_name=f”{first_name}{last_name}"
Print(full_name)
Print(f”hello,{full_name.title()}")

2.3.3 添加空白

在编程中, 空白泛指非打印字符,如空格,制表符或换行符。添加制表符:\t;添加换行符:\n。

2.3.4 删除空白

空白很重要,经常需要比较两个字符串是否相同。一个重要应用,在用户登陆网站时检查用户名。

删除末尾空白:rstrip(); 删除开头空白:lstrip; 删除两边空白:strip。

cd4246b8a21a431d897a330a68a2b911.jpeg

2.4 数

Python 可对整数(int)执行+,-,*,/ 运算。带小数点的数称为浮点数(float)。

第三章 列表简介

3.1 列表

列表由一系列按特定顺序排列的元素组成。列表通常包含多个元素,因此给列表指定一个表示复数的名称。在Python中,用方括号[]表示列表,并用逗号分隔其中的元素。

3.1.1 访问列表元素

fruits=[’apple’,’pear’,’banana']
Print(fruits[0]).                      #索引

3.1.2 索引从0开始

列表第一个元素索引为0,最后一个元素为-1。使用列表中的值可以使用f字符串。

fruits=[‘apple’,’pear’,’banana’]
Print(f”my favorite fruit is {fruits[0]}.")

3.2 修改,添加,删除列表元素

在列表中修改元素,可指定列表名和要修改元素的索引,再指定该元素的新值。

fruits=[‘apple’,’pear’,’banana']
fruits[0]=‘watermelon'

在列表中增加元素,可使用append(),将元素增加至末尾;或者使用insert,将元素插入至任意位置。

fruits.append(’strewbary')
Fruits.insert(0,’Hami melon')

在列表中删除元素,可使用del, pop(), remove()语句。

del fruits[1]              #默认末尾元素
favorite=fruits.pop(0)     #默认弹出末尾元素,可指定任意元素,删除后可继续使用

Too_sweet=‘watermelon'
fruits.remove(too_sweet)

3.3 列表排序

在列表排序中,sort()使列表按字母正序排列;加reverse条件,字母倒序排列。永久改变。

cars=[‘audi’,’bmw’,’ferrari']
cars.sort()
cars.sort(reverse=True)

列表排序还可使用sorted,做临时改变。

Print(sorted(cars))

反转列表(不按字母),使用reverse,永久改变,恢复需再次反转。

cars.reverse()
print(cars)

确定列表长度,使用len()。

print(Len(cars))

09c067c5a2274c7daf2e8dca81fdb486.jpeg

第四章 操作列表

4.1 遍历整个列表

遍历列表的所有元素,需要对表中每个元素执行相同操作,可使用for循环。使用单数和复数名称,可帮助判断代码处理是单个列表元素或整个列表。

characters=[‘鲁智深’,’杨志’,'武松']
for character in characters:
    Print(character)

执行更多操作,使用f字符串引用列表元素。

characters=[‘鲁智深’,’杨志’,'武松']
for character in characters:
    Print(f”{character}大侠,相见恨晚!")

for 循环,缩进代码循环,未缩进代码不循环。

invites=[’Steve jobs’,’lill gates’,’elon musk',]
for invite in invites:
    Print(f”{invite} professor coming!")
Print(“let us welcome!")

4.2 创建数值列表

创建数值列表,range()函数可生成任何需要的数集。指定两个参数,在第二个停止;指定一个参数,从0开始,到指定数停止。

for value in range(1,4):
    Print(value)
for value in range(3)
    Print(value)

用range()创建数字列表。

numbers=list(range(9))
Print(numbers)

squares=[]
for value in range(4):
    square=value**2
    Squares.append(square)
Print(squares)

列表统计运算。

digits=list(range(10))
print(digits)
print(min(digit))
print(max(digit))
print(sum(digit))

用步长创建列表。

Odd_numbers=list(range(1,11,2))   #用步长创建奇数列表
    Print(odd_numbers)

用列表解析创建,列表解析将for循环和创建新元素的代码合并成一行,并自动附加新元素。

odd_numbers=[(2*value-1) for value in range(1,6)]
Print(odd_numbers)

4.3 使用列表的一部分:切片

创建切片,可指定要使用的第一个元素和最后一个元素的索引。与range()函数一样,在到达第二个索引之前的元素后停止。

invests=[‘house’,’bond’,’stock']
Print(invest[:2])        #从开头索引
Print(invest[2:])        #索引到结尾
Print(invest[-1:])       #负数从末尾倒数开始索引

遍历切片。

for invest in invest[:2]
    Print(invest)

复制切片,使用切片创建副本。

My_wants=[‘lovers’,’cars’,’health']
His_wants=my_wants[:]

4.4 元组

列表适合存储可能变化的数据集。列表是可修改的有时候创建不可修改的元素,可以用元组。元组使用圆括号表示。元组由逗号表识,如果定义一个只包含一个元素的元组,必须在这个元素后加逗号。

元组不能修改元素,可以给存储元组的变量

第五章 if 语句

if 语句处理特殊情形

cars=[‘audi’,’bens’,’bmw',]
for car in cars:
    if car ==‘bmw'
        Print(car.upper())
    Else:
        Print(car.title())
==判断两个值相等,!=判断两个值不相等。
条件语句中可包含各种数学比较,小于,小于等于,大于,大于等于。
检查多个条件可使用and 和or。
检查特定值是否包含在列表中,可使用 in 和 not in。

使用if 语句,满足条件执行,否则不执行;使用if-else语句,总会执行其中一个操作。

#If-else 结构
age=19
if age > 19:
    Print(“you are old enough to vote.")
Else:
    Print(“you are not old enough to vote")

#if-elif-else 结构
age=18
If age <4:
    price=0
Elif 4 < = age <18:
    price=25
Else:
    price=40
Print(f“you should pay{price} dollars.")

#测试多个条件,执行多个代码块,可只用if语句,而不用elif,else。
wants=[‘lovers’,’cars’,’house']
If ‘lovers’ in wants:
    Print(“lovers is important in my life.")
if ‘cars’ in wants:
    Print(“cars is important in my life.")

#确定列表是否为空
Requested_toppings=[]
    for requested_topping in requested_toppings:
        Print(“add {requested_topping}")
    Print(“finished your pizza.")
    Else:
        Print(“\nyou want a plain pizza?")

#使用多列表
Odd_numbers=list(range(1,11,2))     #10以内奇数
even_numbers=list(range(0,11,2)     #10以内偶数
for even_number in even_numbers:
    If even_number in odd_numbers:
        Print(f“{even_number} is odd. ")
    Else:
        Print(f”{even_number} is even.")

第六章 字典

6.1 字典

字典是一系列键值对。每个键与一个值相关联,可以使用键来访问相关的值。与键相关的值可以是数,字符串,列表,乃至字典。字典用花括号{ }表示,键值对是两个相关联的值,键和值之间用冒号分隔,字典中储存任意多键值对。

Alien_0={‘color’:’green’,’point’:5}

6.2 使用字典

访问字典中的值,可依次指定字典名和放在字典中的键。

Alien_0={‘color’:’green’,’point’:5}
Print(alien_0[‘color'])

字典是一种动态结构,可随时添加键值对。添加键值对时,可依次指定字典名,用方括号括起来键和相关的值。

alien_0[’speed’]=’slow'

创建空字典,再分行添加键值对。

Alien_0={}
Alien_0[‘color’]=‘red'
Alien_0[‘point’]=100

修改字典中的值,依次指定字典名,用方括号括起来的键,以及与该键关联的新值。

Alien_0[‘color’]=‘blue'

#机器人位移例子
Alien_0={‘x_position’:0,’y_position’:0,’speed’:’slow'}
if alien_0[’speed’]=’slow’:
    increase=3
Else:
    increase=10
Alien[x_position] +=increase
Print(alien_0)

删除键值对,可使用del,使用del语句,必须指定字典名和要删除的键。

del alien[‘color']

由类似对象组成的字典,可以用多行定义。在输入花括号后按回车键,在下一行缩进四个空格,指定第一个键值对,并在后面加一个逗号。以此类推,定义好字典,在最后一个键值对的下一行添加右花括号,缩进四个空格。

Favorite_language={
    ‘alice’:’python'
    ‘bob’:’c'
    ‘dave’:’java'
    }

使用get()访问值,当字典中指定的键不存在,使用get(),返回一个默认值,避免引发程序错误。

Alien_0={‘color’:’red’,’speed’:’slow'}
Point_value=ailen_0.get(‘point’,’no point value assigned')

#如果第二个值未指定,返回none
point_value=alien_0.get(‘point’,)

6.3 遍历字典

User_0={
    ‘username’:’fermi’,
    ‘first’:’Enrico',
    ‘last’:’fermi’,  
    }
For key,value in user_0.items():
    Print(f”keys:{key}")
    Print(f”values:{value}")

特定顺序遍历字典中的元素,可使用函数sorted()。

for name in sorted(user_0.keys()):
    Print(name)

遍历字典中的所有值,为剔除重复,可使用集合set,集合中的元素都是独一无二的。集合和字典都用花括号定义,当花括号内没有键值对时,定义的很可能是集合。

for name in set(user_0.keys()):
    Print(name)

6.4 嵌套

有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。

#字典存储外星人信息
alien_0={‘color’:’red’,’points’:5}
alien_1={‘color’:’green’,’points’:’10'}

#创建外星人列表
aliens=[alien_0,alien_1]

#遍历列表中外星人
for alien in aliens:
     Print(alien)

符合现实的情况是,创建元素远大于三个,可以使用range()生成。

经常需要在列表中包含大量字典,其中每个字典都包含特定对象的众多信息。当列表中,所有字典结构相同时,可以遍历列表,以相同的方式处理其中每个字典。

43d03ec4041c4ac9a2a04543471ce3cd.jpeg

字典中存储列表,每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。

pizza={
    ‘crust’:’’:thick,
    ’topping’:[‘’,’mushrooms’,’extra cheese']
    }

d371b1ac250746afa8c49f63fafbfe44.jpeg

Page_98页,改进方案调试成功,Sarah喜欢的语言单独行打印,其他人分行打印。

a61ee1331b634532b9d9f2676b0aa341.jpeg

在字典中储存字典,多个用户的用户名作为键,用户信息作为相关值。

0afafb48e630488ea6417252b1dac356.jpeg

第七章 用户输入和while循环

7.1 函数input()

函数input()让程序停止,等待用户输入一些文本,获取用户输入后,将其赋给一个变量,方便使用。

使用input(),函数需要接受一个参数,即要向用户显示某些提示,让用户知道如何做。

使用int()可以获取数值输入,用来做数值比较。如age=int(age),height=int(height)。

处理数值信息还可以使用求模运算符%,它将两个数相除并返回余数。可用作判断奇偶数。

43ce44824586444fbbc0c145bd880bdc.jpeg#人机交互程序运行时,可单独建立文件夹,储存程序,用python运行,并实现交互。

7.2 while 循环

for 循环用于针对集合中的每个元素都执行一个代码块,while循环则不断运行,直到指定的条件不满足为止。

设置退出:

定义退出值,通过检查条件,执行while循环所需要的比较,程序运行或结束。

1662da61d4e44a8c8fcefc51155cf811.jpeg

在要求很多条件都满足才继续运行的程序中,使用标志,定义变量,判断整个程序是否处于活动状态。可以让程序在True时继续运行,在任何事件导致标志值为False时程序停止运行。

ca45d1d938a24868a8e66b2c19473c80.jpeg

break 和continue

要立即退出while循环,不再运行循环中余下的代码,不管条件测试结果如何,可使用break语句。

0a8d7250003e4aa1a07ad81d77e07c8f.jpeg

要返回循环开头,并根据条件测试结果决定是否继续执行循环,可使用continue语句。

f557dd5581404781bb1ac7733aa037f7.jpeg

7.3 使用while 循环处理列表和字典

在遍历列表的同时进行修改,可使用while循环。通过将while循环同列表和字典结合起来,可收集,存储并组织大量输入。

在列表之间移动元素:

ab6a2de823c148bebd8debf56e009dbd.jpeg

删除特定值的列表元素:

e47f374ab38a4f1aaa51938c20ca8fb2.jpeg

使用户输入信息填充字典:

4c9fd88430e343cf9cd5073ad888286b.jpeg

第八章 函数

8.1 定义函数

函数结构使用def 告诉python要定义一个函数,并向python指出函数名,在括号内指出完成任务需要的信息,最后以冒号结束。

函数定义后的缩进体构成了函数体。(可以给函数加注释)

调用函数让python 执行函数的代码。调用函数,可依次指定函数名以及用括号括起的必要信息。

def greet_user():
    """显示简单的问候语"""
    print("hello!")
greet_user()

向函数传递信息

定义函数时,可在函数名括号内加入变量名,并在调用函数时,将信息传递给变量。变量称为形参,传递的信息称为实参。

def greet_user(username):
    Print(f”hello ,{username.title()}")
Greet_user(‘bob')

#username 形参;bob 实参。

8.2 传递实参

函数定义可能包含多个形参,函数调用也可能包含多个实参。向函数传递实参,可以使用位置实参和关键字实参。实参由变量名和值组成,还可使用列表和字典。

位置实参:基于顺序将实参与形参关联。

d194f1b45a2e4b25bf3d5e4dcab4b9fd.jpeg

关键字实参:关键字实参传递给函数名称值对,直接在实参中将名称与值关联。

718e3870472b46879c0237bdea042aa8.jpeg

默认值:编写函数可给每个形参指定默认值。先列没有默认值的形参,再默认值形参。

27066054834c4c89a69369bf5ce3e9fc.jpeg

8.3 返回值

函数可以处理一些数据,返回一个或一组值。函数返回的值称为返回值,在函数中,使用return语句将值返回到调用函数的代码行。

7723959f61594786b7fe313fffcf57d4.jpeg

让实参变为可选:只需要在必要时提供额外信息,可使用默认值让实参变为可选。

6055ef63cec342dba0f6774fa327fbbd.jpeg

返回字典:函数可返回任何类型的值,包括列表和字典等复杂结构。

fa1d39a261a5451e9a01d6bb9749ed7d.jpeg

使用循环和退出:加入while语句和if语句。

b0b13ff25dba4c0e91cbb564c099b0d5.jpeg

8.4 传递列表

向函数传递列表很有用,其中可能包含名字,数或更复杂对象。将列表传递给函数后,函数就能直接访问内容,提高处理列表的效率。

f9bee1f021f746fb8c6ade6265a7604d.jpeg

修改列表:

7cd1caacebe34458b7e83ad8a109f583.jpeg

调用副本:

31c4f5777c414bcbae2ad84618d727e8.jpeg

8.5 传递任意数量实参

使用*,**传递任意数量实参与键值对。必须在函数定义中将接纳任意数量实参的形参放在最后。先匹配位置实参和关键字实参,将余下的实参收集到最后一个形参中。

4acfae75ec4e4a97a95928750352f62b.jpeg

59d58ebbcf784cf599949d5ad0863469.jpeg

8.6 模块

9d531062420f44d4b1c9a29f055959b4.jpeg

第九章 类

面向对象编程是最有效的软件编写方法之一,对象编程中,常编写类,并基于类创建对象。编写类时,定义大类的通用行为,基于类创建的对象都自动具备这种通用行为,然后赋予每个对象独特的个性。

9.1 创建和使用类

python中,首字母大写的名称指的是类。定义中没有圆括号。

方法__init__()

类中的函数称为方法,方法中开头和末尾有两个下划线。

方法__init__包含三个形参:selfsame,age。形参self必不可少,创建Dog实例时,将自动传入实参self。每个与实例相关联的方法调用都自动传递实参self,让实例能够访问类中的属性和方法。

以self为前缀的变量可供类中的所有方法使用,可以通过类中任何实例来访问,这样可通过实例访问的变量称为属性。

根据类创建实例:


9.2 使用类和实例

类编写好,大部分时间将花在实例上,后来的一个重要任务是修改实例的属性。可以直接修改实例的属性,也可以编写方法以特定方式修改。

创建Car类。

给属性指定默认值。

修改属性的值。

9.3 继承

编写类时,可使用继承。一个类继承另一个类时,将自动获得另一个类的所有属性和方法。原有的类称为父类,新的类称为子类。子类继承父类的所有属性和方法,同时可以定义自己的属性和方法。

子类的方法__init__

在既有类的基础上编写新类时,通常要调用父类的方法__init__()。这将初始化父类方法中定义的所有属性,从而让子类包含这些属性。

给子类定义属性和方法:

重写父类的方法:

对于父类中的方法,都可以进行重写,可在子类中定义一个与要重写的父类方法同名的方法。

将大类拆分为小类,并将小类作为大类的属性:

9.4 导入类

python允许将类存储在模块中,然后在主程序中导入所需的模块。

导入类是一种有效的编程模式,可以导入单个类;在同一模块存储多个类并导入;可以导入整个模块,也可以分别从不同模块中导入类。导入类时,可使用别名from…import…as...

9.5 python 标准库

python标准库是一组模块,可以使用标准库中的任何函数和类。

From random import randint    #randint()将两个整数作为参数,随机返回一个位于两个整数之间的整数。
From random import choice     #choice()将列表或元组作为参数,随机返回其中一个元素。

第十章 文件和异常

10.1 从文件中读取数据

要使用文本文件中的信息,首先要将信息读取到内存中,可以一次性读取文件全部内容,也可以每次一行的方式逐步读取。

可以使用相对文件路径打开其中的文件。相对文件路径让python到指定位置查找,该位置是相对于当前运行程序所在的目录。

还可使用绝对文件路径将准确位置告诉python,可读取系统中任何地方的文件。最简单的做法是,将数据文件储存在程序文件所在的目录,或者储存在程序文件所在目录下的一个文件夹中。

逐行读取文件内容。

创建一个包含文件各行内容的列表,并读取文件内容。

使用文件中内容。

10.2 写入文件

写入文件可保存数据,写入文件先调用open(),第一个实参为要打开的文件的名称,第二个实参为写入模式。写入模式可指定为读取模式(‘r’),写入模式(’w’),附加模式(’a’),读写模式(’r+’)。如果忽略模式实参,默认为只读模式。

10.3 异常

python使用异常的特殊对象管理程序执行期间发生的错误。每当发生错误时,python会创建异常对象。如果编写了处理该异常的代码,程序将继续运行;如果未处理,程序将显示traceback。

异常是使用try-except代码块处理的。使用try-except代码块时,即便出现异常,程序也将继续运行,显示编写的友好错误信息。

通过将可能引发错误的代码放在try-expect代码块中,可提高程序抵御错误的能力。依赖try代码块成功执行的代码都应放到else代码块中。

处理FlieNotFoundError异常。

分析文本。

使用多个文件。

静默失败。可以使用pass语句,在程序发生异常时保持静默,像什么没发生一样运行。

10.4 存储数据

模块json可以将简单的python数据结构转储到文件中,并在程序再次运行时加载文件中的数据。

使用json.dump()存储,使用json.load()读取。

保存和读取用户生成的数据。

重构

通过改进代码,将其划分为一系列完成具体工作的函数,这样的过程称为重构。重构让代码更清晰、更易于理解、更容易扩展。

c4cbea53149d4d43981573004e067040.jpeg

第十一章 测试代码

编写测试,可确定代码面对各种输入都能按照要求的那样工作。

11.1 测试函数

学习测试,必须有要测试的代码。python提供了一种自动测试函数输出的高效方式。

单元测试和测试用例

模块unittest提供了代码测试工具。单元测试用于核实函数的某个方面没有问题。测试用例是一组单元测试,核实函数在各种情形下的行为都符合要求。良好的测试用例考虑到了函数可能收到的各种输入,包含所有情形的测试。全覆盖的测试用例包含一整套单元测试,对于大型项目,进行全覆盖测试很难。

要为函数编写测试用例,可先导入unittest和要测试的函数,再创建一个继承unittest.TestCase的类。这个类必须继承unittest.TestCase类,这样python才知道如何运行编写的测试。NameTestCase只包含一个方法,用于测试get_formatted_name()的一个方面。运行test_name_function.py时,所有以test_开头的方法都将自动运行。

self.assertEqual()断言方法:unittest类最有用的功能之一,断言方法核实得到的结果是否与期望的结果一致。

测试未通过时,不要修改测试,而应修改导致测试不能通过的代码,找出导致函数行为不符合预期的修改。

添加测试:

11.2 测试类

各种断言方法:

方法用途
assertEqual(a,b)核实a==b
assertNotEqual(a,b)核实a !=b
assertTrue(x)核实x为True
assertFalse(x)核实x为False
assertIn(item, list)核实item在list中
assertNotIn(item, list)核实item不再list中

测试类:

9ed690b640ec4c72ad602b1a2e6fccf9.jpeg

方法setUp():

方法setUp()只需要创建对象一次,就能在每个测试方法中使用。测试编写的类时,方法setUp()让测试方法编写起来更容易。

5eff9a4ccee4404bbf9986a86c55a7b9.jpeg第一部分终结,go!​​​​​​​

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值