Python程序设计基础及实践(慕课版 第2版)课件全套郭炜 1. Python初探- 17.GUI程序设计_第1页
Python程序设计基础及实践(慕课版 第2版)课件全套郭炜 1. Python初探- 17.GUI程序设计_第2页
Python程序设计基础及实践(慕课版 第2版)课件全套郭炜 1. Python初探- 17.GUI程序设计_第3页
Python程序设计基础及实践(慕课版 第2版)课件全套郭炜 1. Python初探- 17.GUI程序设计_第4页
Python程序设计基础及实践(慕课版 第2版)课件全套郭炜 1. Python初探- 17.GUI程序设计_第5页
已阅读5页,还剩381页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京大学信息学院

郭炜信息科学技术学院学会程序和算法,走遍天下都不怕!实用Python程序设计北京大学信息学院

郭炜信息科学技术学院Python语言基本要素北京大学信息学院

郭炜符号和注释信息科学技术学院

郭炜瑞士布里茨恩湖北京大学信息学院

郭炜程序中的符号

程序中的所有字符都必须是英文字符,不能是中文的字符,注意, :.

',

( "

之类的,都必须是英文字符!不能是中文的!不能在输入中文状态下输入!中文的标点符号看起来一般比英文的更宽。除非就是要输出中文文字,才会在“字符串”中使用中文4北京大学信息学院

郭炜5注释并非需要执行的指令,只是为了编程者方便理解程序之用注释:"#" 开头a = b # 让a和b的值相同北京大学信息学院

郭炜6注释Pycharm中, 选中若干行,Ctrl + '/'

可将这些行都变成注释/都由注释变为非注释北京大学信息学院

郭炜信息科学技术学院变量新疆喀拉峻鳄鱼湾北京大学信息学院

郭炜8变量变量有名字,可以用来存储数据。其值可变。#

让b的值变得和a一样a=

12b=aprint(a+b)a=

"hello"print(a)输出:24hello北京大学信息学院

郭炜变量的命名办法9变量由大小写字母、数字和下划线构成,中间不能有空格,长度不限,不能以数字开头name _doorNum x1 y z a2 Anumber_of_students

MYTYPE变量名最好能够体现变量的含义多单词的变量名,最好第一个单词小写,后面单词首字母大写dateOfBirth

numOfDogs bookPrice北京大学信息学院

郭炜变量的命名办法10变量名是大小写相关的a和A,

name和Name

是不同的变量。有些名字Python预留了,不可用作变量的名字andasassertbreakclasscontinuedefdelelif

else

except execforfinallyfromglobalifimportinislambdanotorpassprintraisereturntrywhilewith

yield.....如果不小心用了,python会报错北京大学信息学院

郭炜信息科学技术学院新疆布尔津五彩滩赋值语句北京大学信息学院

郭炜赋值语句12形式:变量

=

表达式将变量的值变得和“表达式”的值一样变量、数、字符串......都是“表达式”北京大学信息学院

郭炜赋值语句13a=

"he"print(a)#>>heb=

3+2a=

b#a的值变得和b一样print(b)#>>5print(a)#>>5b=b+

a#b的值改为原来b的值加aprint(b)#>>10北京大学信息学院

郭炜赋值语句14a,b=

"he",12print(a,b)#>>he

12a,b=

b,a#交换

a,b的值print(a,b)#>>12

hec,a,b=

a,b,aprint(a,b,c)#>>he12

12a=b=c=

10print(a,b,c)#>>1010

10北京大学信息学院

郭炜信息科学技术学院新疆塞里木湖字符串初步北京大学信息学院

郭炜字符串可以且必须用单引号、双引号或三单引号、三双引号括起来x="I

said:'hello'"print(x) #>>I

said:'hello'#>>Isaid:'he

saidprint('Isaid:"hello"')#>>I

said:"hello"print('''Isaid:'hesaid

"hello"'.''')"hello"'.print("this

\is

\good")#>>thisis

goodprint(

hello,word)字符串太长时,可以分行写#错!没有用引号括起来16北京大学信息学院

郭炜字符串字符串里面不会包含变量s=

1.75print(s)print("Iamsm

tall")#>>1.75#>>Iamsm

tall字符串中的

s

就是个字符,和前面的变量

s

没有关系!!!字符串必须用引号括起来,用引号括起来的就是字符串!a=

4b=

5print("a+b") #>>

a+b 不会打出9!!!!!17北京大学信息学院

郭炜字符串三双引号字符串中可以包含换行符、制表符以及其他特殊字符。para_str=

"""多行字符串可以使用制表符TAB(\t)。也可以使用换行符

[\n]。<HTML><HEAD><TITLE>FriendsCGI

Demo</TITLE></HEAD><BODY><H3>ERROR</H3><FORM><INPUTTYPE=button

VALUE=BackONCLICK="window.history.back()"></FORM></BODY></HTML>"""print(para_str)18多行字符串可以使用制表符TAB( )。也可以使用换行符

[]。<HTML><HEAD><TITLE>FriendsCGI

Demo</TITLE></HEAD><BODY><H3>ERROR</H3><FORM><INPUTTYPE=button

VALUE=BackONCLICK="window.history.back()"></FORM></BODY></HTML>北京大学信息学院

郭炜字符串字符串的下标有n个字符的字符串,其中的每个字符都是长度为1的字符串:从左到右依次编号为

0,1,2...

n-1从右到左依次编号为

-1,-2...-n编号就是下标a=

"ABCD"print(a[-1])#>>Dprint(a[0])#>>Aprint(a[2])#>>C19北京大学信息学院

郭炜字符串不可修改不可以修改字符串中的字符a=

"ABCD"a[2]=

'k'#错,字符串中的字符不能修改20北京大学信息学院

郭炜字符串用"+"连接字符串#>>ABCD1234a=

"ABCD"b=

"1234"a=a+

bprint(a)a=a+

a[1]print(a)21北京大学信息学院

郭炜字符串用"+"连接字符串#>>ABCD1234a=

"ABCD"b=

"1234"a=a+

bprint(a)a=a+

a[1]print(a)#>>ABCD1234B22北京大学信息学院

郭炜字符串用 in

,

not

in

判断子串a=

"Hello"b="Python"print("el"ina)print("th"notin

b)print("lot"in

a)#>>True#>>False#>>False23北京大学信息学院

郭炜信息科学技术学院学会程序和算法,走遍天下都不怕!实用Python程序设计北京大学信息学院

郭炜算术运算和逻辑运算信息科学技术学院2北京大学信息学院

郭炜算术运算信息科学技术学院宁夏中卫沙坡头北京大学信息学院

郭炜算术运算符Python

支持以下算术运算+ 加法- 减法(双操作数),

取相反数(单操作数)* 乘法/%//**除法

,结果是小数。即便能整除也是小数取模(求余数)求商,结果取整数部分,不要余数求幂北京大学信息学院

郭炜算术表达式a=

(3+2)*(6-3)/2print(a)#>>7.5print(10/8)print(10%8)print(15/4)print(15//4)#>>1.25#>>2#>>3.75#>>3print(3.4/2.2)print(3.4//2.2)#>>1.5454545454545452#>>1.0print(2**3)print(-9//4)#>>8#>>-3往小里取整北京大学信息学院

郭炜算术表达式/

计算的结果都是小数,哪怕能整除z=

10/2print(z)#>>5.0-x

相当于

0-xa=

10print(-a) #>>-10等价于

(–a)*3print(-a*3)

#>>-30print(3+-5)

#>>-2北京大学信息学院

郭炜关系运算符逻辑运算符逻辑表达式信息科学技术学院

郭炜韩国济州岛火山口北京大学信息学院

郭炜六种关系运算符用于比较大小相等 ==不等 !=大于 >

小于 <大于等于 >=小于等于 <=比较的结果是bool类型,成立则为True,反之为Falsebool类型数据只有两种取值,True或False关系运算符和bool类型8北京大学信息学院

郭炜#>>True#>>True#>>True#>>True#>>False#>>True#>>True#>>False#>>Trueprint(3<

5)print(4!=

7)a=

4print(2<a<6<8)print(2<a==4<

6)print(2<a>

5)b=a<6print(b)print(b==

1)print(b==

2)b=a>6print(b==

0)a=Trueprint(a==

1)#>>True关系运算符和bool类型9北京大学信息学院

郭炜关系运算符也能比较字符串(按字典序,大小写相关)a=

"k"print(a

=="k")#>>Truea=

"abc"print(a

=="abc")#>>Trueprint(a

=="Abc")#>>Falseprint("abc"<

"acd")print("abc"<

"abcd")print("abc">

"Abc")#>>True#>>True#>>True关系运算符和bool类型10北京大学信息学院

郭炜or not

三种,操作逻辑运算符用于表达式的逻辑操作,有

and的结果是True或False与: exp1and

exp2当且仅当exp1和exp2的值都为True(或相当于True)时,结果为True(或相当于True)n=

4n>4andn<

5n>=2andn<5andn%2==

0#

false#

trueprint(5and

False)print(4and

True)#>>False#>>True逻辑运算符和逻辑表达式11北京大学信息学院

郭炜或: exp1or

exp2当且仅当exp1和exp2的值都为False(或相当于False)时,结果为False(或相当于False)n=

4n>4orn<

5n<=2orn>

5#True#False逻辑运算符和逻辑表达式12北京大学信息学院

郭炜非: not

expexp值为True(或相当于True)时,

结果为False(或相当于False)exp值为False(或相当于False)时,

结果为True(或相当于True)not4

<5#Falsenot5#Falsenot0#Truenot"abc"#Falsenot""#Truenotnot4<

5[]and4>6 #False#Truenot[1]#False逻辑运算符和逻辑表达式13北京大学信息学院

郭炜print(3<4or4>5and1>2

)print((3<4or4>5)and1>2

)#>>True#>>Falsenot4<5and4

>

6 即 (not4<5)and(4>

6)逻辑运算符的优先级not>and>

or14北京大学信息学院

郭炜print(3+2<5

)print(3+(2<

5))#>>False#>>4 ,因2

<

5相当于1各种运算符的优先级从高到低:算术运算符 +-*///%

**关系运算符 <> == != <= >=逻辑运算符 and or not记不得就勤用

(

)15北京大学信息学院

郭炜信息科学技术学院学会程序和算法,走遍天下都不怕!实用Python程序设计北京大学信息学院

郭炜条件分支语句(if

语句)信息科学技术学院

郭炜美国加州太浩湖北京大学信息学院

郭炜条件分支语句有时,并非所有的程序语句都要被顺序执行到,会希望满足某种条件就执行这部分语句,满足另一条件就执行另一部分语句。这就需要“条件分支语句”3北京大学信息学院

郭炜条件分支语句if

表达式1:语句组1elif

表达式2:语句组2...

#可以有多种个 elifelif

表达式n:语句组nelse:语句组n+1依次计算表达式1、表达式2…只要碰到一个表达式i为真,则执行语句组i(前面为假的表达式对应的语句组不会被执行),且后面的表达式不再计算,后面的语句组也都不会被执行。若所有表达式都为假,则执行语句组n+1注意,缩进的前一行末尾有

'

:'4北京大学信息学院

郭炜可以没有

elif,也可以没有

else,也可以都没有条件分支语句if

表达式1

:语句组1else

:语句组2if

表达式1:语句组1elif

表达式2:语句组2if

表达式1

:语句组1北京大学信息学院

郭炜例题:

写一个判断整数奇偶性的程序,要求输入一个整数,如果是奇数,就输出“It's odd.”,如果是偶数,就输出“It's even.”。ifint(input())%2==1:print("It's

odd")else:print("It's

even")if

语句示例北京大学信息学院

郭炜在一条if语句的某个分支(语句组)里,还可以再写if语句。a=

int(input())ifa>

0:ifa%2:print("good")else:print("bad")输入:4输出:bad输入:3输出:good输入:-1无输出if 语句嵌套北京大学信息学院

郭炜在一条if语句的某个分支(语句组)里,还可以再写if语句。a=

int(input())ifa>

0:ifa%2:print("good")else:print("bad")输入:4无输出输入:3输出:good输入:-1badif 语句嵌套北京大学信息学院

郭炜输出格式控制信息科学技术学院甘肃张掖七彩丹霞(航拍)北京大学信息学院

郭炜输出格式控制字符串中的格式控制符:%s

表示此处要输出一个字符串%d

表示此处要输出一个整数%f

表示此处要输出一个小数%.nf 表示此处要输出一个小数,保留小数点后面n位,四舍六入,五则可能入也可能舍。注意,

'.'......格式控制符只能出现在字符串中!北京大学信息学院

郭炜输出格式控制h=

1.746print("Mynameis%s,Iam%.2fmtall."%

("tom",h))print("Myageis%d." %

18)print("%d%s"%

(18,"hello"))print("%.2f,%.2f"%(5.225,5.325))#>>

5.22,5.33输出:Mynameistom,Iam1.75m

tall.Myageis

18.18hello5.22,5.33北京大学信息学院

郭炜输出格式控制name=

"tom"h=

1.746"Mynameis%s,Iam%.2fmtall."%

("tom",h)是个字符串。比下面这个等价字符串简洁:"Mynameis%s"%name+"Iam%.2fmtall."%

h北京大学信息学院

郭炜信息科学技术学院学会程序和算法,走遍天下都不怕!实用Python程序设计北京大学信息学院

郭炜循环语句信息科学技术学院2北京大学信息学院

郭炜for

循环语句信息科学技术学院

郭炜内蒙古阿斯哈图石林北京大学信息学院

郭炜for循环语句for<variable>in

<sequence>:<statements

1>else:<statements

2>依次对

sequence中的每个值,执行

<statements

1>然后再执行

<statements

2>。通常不需要

else

部分sequence

可以是range(..),也可以是字符串、列表、元组、字典、集合4北京大学信息学院

郭炜for循环语句#[0,5)foriin

range(5):print(i)01234foriinrange(5,9):

#[5,9)print(i)56785北京大学信息学院

郭炜for循环语句for

i

in

range(0,

10,

3)

: #步长3print(i)0369foriinrange(-10,-100,-30)

:print(i)-10-40-706北京大学信息学院

郭炜for循环遍历列表a=['Google','Baidu','IBM','Taobao','QQ']foriin

a:print(i)GoogleBaiduIBMTaobaoQQ7北京大学信息学院

郭炜for循环遍历字符串forletterin

'Taobao':print

(letter)Taobao8北京大学信息学院

郭炜break

语句sites=["Baidu",

"Google","IBM","Taobao"]#listsitefor

site

in

sites: #对sites中的每个值ifsite==

"IBM":print("OK")break #跳出循环print("site:"+

site)else:print("No

break")print("Done!")else子句在循环结束时会执行,但是如果break了,则不会执行9site:Baidusite:

GoogleOKDone!北京大学信息学院

郭炜continue语句forletterin

'Taobao':ifletter==

'o':continue#

字母为 o

时跳过输出# 直接跳到下次循环print

('当前字母 :',

letter)当前字母

:

T当前字母

:

a当前字母

:

b当前字母

:

a10北京大学信息学院

郭炜for循环例题信息科学技术学院

郭炜俄罗斯圣彼得堡圣以撒教堂北京大学信息学院

郭炜例题1. 输入n个整数求和输入第一行是整数n,

n>=

1后面有n行,每行一个整数输出输出后面那n个整数的和样例输入3128样例输出1112北京大学信息学院

郭炜例题1. 输入n个整数求和n=

int(input())total=

0foriin

range(n):#做n次total+=int(input()) #每次读入一行print(total)13北京大学信息学院

郭炜多重循环信息科学技术学院 郭炜美国拱门国家公园北京大学信息学院

郭炜多重循环循环可以嵌套,形成多重循环:foriin

range(n):.....forjinrange(m):..... #内重循环的执行次数一共是n×m次15北京大学信息学院

郭炜例题: 给定正整数n和m,在1至n这n个数中,取出两个不同的数,使得其和是m的因子,问有多少种不同的取法。输出这些取法。16多重循环例题: 取两个数北京大学信息学院

郭炜例题: 给定正整数n和m,在1至n这n个数中,取出两个不同的数,使得其和是m的因子,问有多少种不同的取法。输出这些取法。思路:穷举1-n这n个数中取两个数的所有取法,对每一种取法,判断其和是不是m的因子17多重循环例题: 取两个数北京大学信息学院

郭炜while

循环信息科学技术学院

郭炜荷兰阿姆斯特丹库肯霍夫公园北京大学信息学院

郭炜while循环语句while

逻辑表达式

exp

:语句组1else:语句组2........判断

exp

是否为真,若为真,转2),若为假,转3)执行

语句组1,回到1)执行

语句组24)继续往下执行 ........19北京大学信息学院

郭炜while循环语句while

逻辑表达式

exp:语句组1........判断

exp

是否为真,若为真,转2),若为假,转3)执行

语句组1,回到1)3) 继续往下执行 ........20北京大学信息学院

郭炜while循环语句示例例题:

输入一个正整数n,从小到大输出它的所有因子n=

int(input())x=

1whilex<=

n:ifn%x==

0:print(x,"

",end="")x+=

115

↙135

1521北京大学信息学院

郭炜循环综合例题信息科学技术学院 郭炜旧金山九曲花街北京大学信息学院

郭炜例题 求斐波那契数列第k项菲波那契数列是指这样的数列:

数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数k,要求菲波那契数列中第k个数是多少。输入:输入一行,包含一个正整数k。(1<=

k

<=

46)输出:输出一行,包含一个正整数,表示菲波那契数列中第k个数的大小样例输入19样例输出418123北京大学信息学院

郭炜解法:迭代,不停地由已知推未知k=

int(input())if k==1ork==

2:print(1)else:a1=a2=

1foriinrange(k-2):a1,a2=

a2,a1+a2print(a2)例题 求斐波那契数列第k项北京大学信息学院

郭炜信息科学技术学院1学会程序和算法,走遍天下都不怕!实用Python程序设计北京大学信息学院

郭炜函数和递归信息科学技术学院2北京大学信息学院

郭炜函 数信息科学技术学院

郭炜黄山北京大学信息学院

郭炜为什么需要函数4“函数”:

将实现了某一功能,并需要在程序中多处使用的代码包装起来形成一个功能模块(即写成一个“函数”),那么当程序中需要使用该项功能时,只需写一条语句,调用实现该功能的“函数”即可。不同的程序员可以分别写不同的函数,拼起来形成一个大程序北京大学信息学院

郭炜函数的定义5def

函数名(参数1,

参数2

……):语句组(即“函数体”)也可以没有参数:def

函数名():语句组(即“函数体”)北京大学信息学院

郭炜函数调用和return语句6调用函数:函数名(参数1,参数2,……)对函数的调用,也是一个表达式。函数调用表达式的值,由函数内部的return语句决定。return语句语法如下:return

返回值return语句的功能是结束函数的执行,并将“返回值”作为结果返回。“返回值”是常量、变量或复杂的表达式均可。如果函数不需要返回值,return语句就直接写:return北京大学信息学院

郭炜函数调用和return语句7return

语句作为函数的出口,可以在函数中多次出现。多个return语句的“返回值”可以不同。在哪个return语句结束函数的执行,函数的返回值就和哪个return语句里面的“返回值”相等。北京大学信息学院

郭炜函数使用实例1 : Max函数8def

Max(x,y):ifx>

y:return

xelse:return

y#函数到此结束n=Max(4,6)print(n,Max(20,n))print(Max("about","take"))6

20take形参实参=北京大学信息学院

郭炜函数使用实例2 : 判断是否是素数的函数def

IsPrime(n):ifn<=1orn%2==0andn!=

2:return

Falseelifn==

2:return

Trueelse:foriin

range(3,n,2):ifn%i==

0:return

Falseifi*i>

n:breakreturn

Trueforiin

range(100):if(

IsPrime(i)):print(i,end="

")23571113171923293137414347535961677173798389

997北京大学信息学院

郭炜函数的缺省参数允许有些参数有默认值,即调用的时候如果不给出这些参数,这些参数的值就自动取默认值。deff(x,y=1,z=

2):print(x,y,z)f(0)#>>01

2f(0,100)#>>0100

2f(0,200,300)#>>0200

300f(0,z='a')#>>01

af(0,y='a')#>>0a

2f(y='a',z=4)#>>runtime

error10北京大学信息学院

郭炜函数中的变量一个函数内部定义(赋值)的变量,在这个函数外部不能使用不同函数中的同名变量不会互相影响函数中的变量和全局变量(在函数外面定义的变量)同名的情况(假设都叫x

):如果没有对

x

赋值,函数中的

x

就是全局的

x如果对x

赋值,且没有特别声明,则在函数中全局的x不起作用,函数中的x就是只在函数内部起作用的

x函数内部可以用globalx

声明函数里的

x

就是全局变量

x北京大学信息学院

郭炜def

f0():print("x

in

f0:",x)

#这个x是全局的xdef

f1():x

=

8 #这个x是局部的x,不会改变全局的xprint("xinf1:",x)deff2():global

x #说明本函数中的x都是全局的xprint("xinf2:",x)x=

5print("xinf2:",x)def

f3():print("x

in

f3=",x)#出错。因后面有赋值而被当作局部的x,此处没赋值就先使用了x=

9x

=

4 #全局的xf0()#>>xinf0:4f1()#>>xinf1:8print(x)#>>4xinf2:

5f2()

#>>x

inf2:

4

下一行:print(x)

#>>5f3()

#出错北京大学信息学院

郭炜python内置函数13len("123")

len([2,3,4])x

是列表,如x

是列表,如max([2,3,5])min([2,3,5])int(x)float(x)str(x)ord(x)chr(x)abs(x)len(x)max(x)min(x)max(x1,x2,x3...)min(x1,x2,x3...)print(max(1,2,3))#>>3print(min("ab","cd","af"))#>>ab北京大学信息学院

郭炜python内置函数14exit()type(x)结束程序运行返回x的类型print(type("123")) #>><class'str'>print(type([1,2,3]))#>><class'list'>x=

"223"print(type(x)==

type([1,2]))#>>False北京大学信息学院

郭炜递归的概念信息科学技术学院

郭炜冰岛维克镇海角北京大学信息学院

郭炜递归一个概念的定义中用到了这个概念本身,这就叫递归用递归的方式定义"n的阶乘"“1的阶乘”是1“n的阶乘”就是

n

乘以

“(n-1)的阶乘”第二句中用到了阶乘这个需要定义的概念16北京大学信息学院

郭炜递归一个函数,自己调用自己,就是递归。和调用别的函数无本质区别,可以看作是调用另一个同名同功能函数def

Factorial(n):

#函数返回n的阶乘ifn<2

:return

1

#

终止条件else:returnn*

Factorial(n-1)17北京大学信息学院

郭炜递归print(Factorial(4))print(Factorial(5))#>>24#>>120递归函数需要有终止条件,否则就会无穷递归导致程序无法终止甚至崩溃递归定义也需要有终止条件,否则无法让人明表。例如"n的阶乘

"的定义中的:“1的阶乘”是118北京大学信息学院

郭炜F(4)4*F(3)F(3)F(2)F(1)3*F(2) 2 2*F(1) 1 return

1624def

F(n):

#函数返回n的阶乘ifn<2

:return

1;#

终止条件else:returnn*F

(n-1)每一层调用的n的值不同,不会互相影响。理解成调用别的同名同功能函数,即可很自然理解这一点北京大学信息学院

郭炜递归求斐波那契数列第

n

项的函数def

Fib(n):ifn==1orn==

2:return

1else:return

Fib(n-1)+Fib(n-2)20北京大学信息学院

郭炜递归例题:上台阶信息科学技术学院

郭炜木兰围场泰丰湖北京大学信息学院

郭炜递归例题:上台阶上台阶问题:有n级台阶,每步可以走一级或两级,问有多少种不同的走法def

ways(n):ifn==

1:return

1elifn==

2:return

2else:return

ways(n-1)+ways(n-2)#第一步走一级的走法+第一步走2级的走法print(ways(4)) #>>522北京大学信息学院

郭炜递归例题:汉诺塔问题(Hanoi)信息科学技术学院河北草原天路北京大学信息学院

郭炜古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求输出移动的步骤。汉诺塔问题(Hanoi)北京大学信息学院

郭炜defHanoi(n,

src,mid,dest):#将src座上的n个盘子,以mid座为中转,移动到dest座if(

n

==

1)

:

#只需移动一个盘子#

直接将盘子从src移动到dest即可print(src+ "->"+dest)return#递归终止estn个盘子的汉诺搬家,需要移动盘子2n-1次T(n)=2*

T(n-1)汉诺塔问题(Hanoi)n=

3A->CA->BC->BA->CHanoi(n-1,src,dest,mid)

#先将n-1个盘子从src移动到mid

B->Aprint(src+

"->"

+

dest)

#再将一个盘子从src移动到dest

B->CHanoi(n-1,mid,src,dest)

#最后将n-1个盘子从mid移动到d

A->Cn=

int(input())Hanoi(n,'A','B',

'C');北京大学信息学院

郭炜信息科学技术学院1学会程序和算法,走遍天下都不怕!实用Python程序设计郭 炜北京大学信息学院

郭炜Python组合数据类型(一)字符串和元组信息科学技术学院2北京大学信息学院

郭炜Python变量的指针本质信息科学技术学院 郭炜瑞士马特洪峰北京大学信息学院

郭炜Python中的变量都是指针Python中所有可赋值的东西,即可以出现在赋值号"="

左边的东西,都是指针指针即代表内存单元的地址将指针称作

“箭头",更容易理解。所有变量都是箭头,指向内存某处对变量进行赋值的本质,就是让该变量(箭头)指向某个地方4北京大学信息学院

郭炜534ab对变量进行赋值,意味着将变量指向某处Python中的变量都是指针a=

3b=

4北京大学信息学院

郭炜Python中的变量都是指针用一个变量对另一个变量赋值意味着让两个变量指向同一个地方634aba=

b北京大学信息学院

郭炜is

运算符和

==

的区别7ais

b 为True

说a和b

指向同一个地方a==

b 为True

说明a和b指向的地方放的的东西相同,但是a和b不一定指向相同的地方a

=

b

会使得a和b指向同一个地方3北京大学信息学院

郭炜is

运算符和

==

的区别x

is

y

表示x和y是否指向同一个地方x

==

y

表示x和y的内容是否相同a=

[1,2,3,4]b=

[1,2,3,4]8a[1,2,3,4][1,2,3,4]print(print(c=

aaa==isb)b)#>>True b#>>False cprint(a==c)#>>Trueprint(aisc)#>>True北京大学信息学院

郭炜is

运算符和

==

的区别a[2]=

"ok"print(c) #>>[1,2,'ok',

4]9a[1,2,'ok',4]b[1,2,3,4]c因为a和c指向同一个地方,所以修改a[2],c[2]也变。a[2]和c[2]是同一个东西北京大学信息学院

郭炜字符串的转义字符信息科学技术学院

郭炜梵蒂冈北京大学信息学院

郭炜转义字符'\'

及其后面的某些字符会构成转义字符,即两个字符当一个字符看#\n \t \"

都是“转义字符”代表print("hello\nworld\tok\"1\\2")换行,制表符,

双引号,斜杠输出:helloworld ok"1\2字符,包括\n这样的转义字符,只能出现在字符串里面,必须用引号括起来!print(a\nb)

不合法,不会打出

a的值,然后换行,再打出b的值11北京大学信息学院

郭炜转义字符规定 '\'

不转义的字符串print(r'ab\ncd')#>>ab\ncdr

表示字符串里面的\就是\,不会和后面的字符合并起来看待12北京大学信息学院

郭炜字符串的切片(子串)信息科学技术学院

郭炜富士山北京大学信息学院

郭炜字符串切片(子串)详解字符串的切片(也叫子串,即连续的一部分)a[x:y]表示字符串a里从下标x到下标y那一部分的子串(不包括下标y的那个字符)a="ABCD"print(a[1:2])#>>B区间是左闭右开,终点不算print(a[0:-1])#>>ABCprintprint(a[-3:-1])(a[2:])#>>BC#>>CD终点省略就是一直取到最后一个字符print(a[:3])#>>ABC起点省略就是从头开始取print("abcd"[2:3])#>>c14北京大学信息学院

郭炜字符串切片(子串)详解a[x:y:z]表示,从a[x]取到a[y](a[y]不算),每z个字符取一个,最后拼起来。z为负数则代表倒着取x,y可以省略。x,y全省略表示从头取到尾或从尾取到头print("1234"[3:1:-1])

#>>43可用于反转字符串print("abcde"[::-1]) #>>edcbaprint("12345678"[1:7:2])

#>>246print("12345678"[7:1:-2])

#>>864字符串切片的用法也适用于元组和列表!15北京大学信息学院

郭炜字符串的函数信息科学技术学院

郭炜美国加州1号公路北京大学信息学院

郭炜字符串函数count 求子串出现次数s='thisAAbb

AA's.count('AA') #

返回2,AA出现2次len 字符串长度s=

'1234'len(s)#417北京大学信息学院

郭炜字符串函数upper,

lower

转大写、小写s=

"abc"print(s.upper())#>>ABCprint(s)#>>abc•18北京大学信息学院

郭炜字符串函数find,rfind,index,

rindex在字符串中查找子串,返回找到的位置(下标)。找不到的话,find返回-1,index

引发异常s="1234abc567abc12"print(s.find("ab"))

#>>4

,"ab"第一次出现在下标4print(s.rfind("ab"))

#>>10#find从头开始找,rfind从尾巴开始找。返回第一个找到的位置try

:s.index("afb")

#找不到"afb"因此会产生异常exceptExceptionas

e:print(e)#>>substringnot

found19北京大学信息学院

郭炜字符串函数find

还可以指定查找起点s="1234abc567abc12"print(s.find("12",4)) #>>13

指定从下标4处开始查找20北京大学信息学院

郭炜字符串函数replace

替换s="1234abc567abc12"b

=

s.replace("abc","FGHI")

#b由把s里所有abc换成FGHI而得print(b)print(s)#>>

1234FGHI567FGHI12#>>

1234abc567abc12print(s.replace("abc",""))#>>123456712isdigit(),

islower(),

isupper()

判断字符串是否是数,是否全是小写等startswith,

endswith

判断字符串是否以某子串开头、结尾21北京大学信息学院

郭炜字符串函数isdigit(),

islower(),

isupper()

判断字符串是否全是数,是否全是小写等print("123.4".isdigit())#>>Falseprint("123".isdigit())#>>Trueprint("a123.4".isdigit())#>>Falseprint("Ab123".islower())#>>Falseprint("ab123".islower())#>>True22北京大学信息学院

郭炜字符串函数startswith,

endswith

判断字符串是否以某子串开头、结尾print("abcd".startswith("ab"))#>>Trueprint("abcd".endswith("bcd"))#>>Trueprint("abcd".endswith("bed"))#>>False23北京大学信息学院

郭炜字符串函数strip()

返回除去头尾空白字符(空格,

'\r'

'\t' '\n')后的字符串lstrip()

返回除去头部(左端)空白字符后的字符串rstrip()

返回除去尾部(右端)空白字符后的字符串print("

\t1234\n

".strip()) #>>12

34print("

\t12345".lstrip()) #>>1234

524北京大学信息学院

郭炜字符串函数strip(s),

lstrip(s),

rstrip(s)

返回除去两端、左端、右端

在s

中出现的字符后的字符串print("takeab

\n".strip("ba

\n")) #>>take#去除两端 'b','a','

','\n'print("cd\t12345".lstrip("d\tc"))#>>1234

5#去除左端 'd','\t','c'25北京大学信息学院

郭炜元 组信息科学技术学院

郭炜华山北京大学信息学院

郭炜元组一个元组由数个逗号分隔的值组成,前后可加括号元组不能修改,即不可增删元素,不可对元素赋值,不可修改元素顺序(如排序)t=12345,

54321,

'hello!' #t是一个元组print(t[0])print(t)#>>12345#>>(12345,54321,

'hello!')u

=

t,

(1,

2,

3,

4,

5)

#u有两个元素,都是元组print(u) #>>((12345,54321,'hello!'),(1,2,3,4,

5))print(u[0][1])#>>54321print(u[1][2])#>>3t[0]

=

88888 #运行错误,元组的元素不能赋值27北京大学信息学院

郭炜元组元组的元素的内容有可能被修改。例如,如果元素是列表,就可以修改该列表v

=

("hello",[1,

2,

3],

[3,

2,

1])

#

[1,2,3]是列表v[1]

=

32 #运行错误,元组元素不可修改成指向别的v[1][0]

=

'world' #可以#>>('hello',['world',2,3],[3,2,

1])#>>

3求长度#>>([1,2],[1,

2])print(v)print(len(v))t=

[1,2]d=

(t,t)print(d)t[0]=

'ok'print(d)#>>(['ok',2],['ok',

2])28北京大学信息学院

郭炜元组元组的元素的内容有可能被修改。例如,如果元素是列表,就可以修改该列表t[0]=

'ok'#>>(['ok',2],['ok',

2])print(d)t=8print(d)#>>(['ok',2],['ok',

2])29北京大学信息学院

郭炜元组单元素的元组empty=

() #空元组singleton='hello',print(len(empty))print(len(singleton))#注意末尾的,如果没有,就不是元组而是字符串了#>>0#>>1x

=

('hello',) #无逗号则x为字符串print(x)#>>('hello',)30北京大学信息学院

郭炜元组用下标访问元组,以及元组切片用法和字符串一样tup1=('Google','Runoob',1997,

2000)tup2=(1,2,3,4,5,6,7

)print(tup1[0])print

(tup2[1:5])print(tup2[::-1])#>>Google#>>(2,3,4,

5)#>>(7,6,5,4,3,2,

1)print(tup2[-1:0:-2]) #>>(7,5,

3)31北京大学信息学院

郭炜元组可以对元组进行连接组合tup1=(12,34.56);tup2=('abc',

'xyz')#

创建一个新的元组tup3=tup1+

tup2print(tup3)#>>(12,34.56,'abc',

'xyz')tup3

+=

(10,20)

#

等价于tup3=tup3+(10,20),新建了一个元组print(tup3)#>>(12,34.56,'abc',

'xyz',10,20)32北京大学信息学院

郭炜元组元组运算和迭代x=(1,2,3)*

3print(x)#>>(1,2,3,1,2,3,1,2,

3)#>>Trueprint(3in

(1,2,3))foriin

(1,2,3):print(i,end=

"")#>>12333北京大学信息学院

郭炜元组赋值x=

(1,2,3)b=

xprint(bisx)

#

true is

表示两个操作数是否指向同一个东西,即是否是同一个对象x

+=

(100,) #

等价于

x

=

x

+

(100,)新建了一个元组print(x)#(1,2,3,100)print(b)#(1,2,3)34北京大学信息学院

郭炜元组比大小两个元组比大小,就是逐个元素比大小,直到分出胜负。如果有两个对应元素不可比大小,则出 runtime

error。print((1,'a',12)<

(1,'b',7))print((1,'a')<

(1,'a',13))print((2,'a')>

(1,'b',13))print((2,'a')<

('ab','b',13))#>>True#>>True#>>True#runtime

error35北京大学信息学院

郭炜信息科学技术学院1学会程序和算法,走遍天下都不怕!实用Python程序设计北京大学信息学院

郭炜Python组合数据类型(二)列表信息科学技术学院2北京大学信息学院

郭炜信息科学技术学院

郭炜列表基本操作冰岛杰古沙龙冰河湖北京大学信息学院

郭炜列表的增删和修改列表可以增删元素,列表的元素可以修改,列表元素可以是任何类型empty

=[] #[]

表示空表list1=['Pku','Huawei',1997,

2000];list1[1]

=

100

#列表元素可以赋值#>>['Pku',100,1997,

2000]#删除元素 list1.pop(2)

等效print

(list1)dellist1[2]print

(list1)#>>['Pku',100,

2000]list1+=

[100,110]#添加另一列表的元素100和110,在list1原地添加,没有新建一个列表list1.append(200)

#添加元素 200,

append用于添加单个元素4北京大学信息学院

郭炜列表的增删和修改print(list1) #>>['Pku',100,2000,100,110,

200]list1.append(['ok',123])

#添加单个元素print(list1)#>>['Pku',100,2000,100,110,200,['ok',

123]]a=['a','b',

'c']n=[1,2,

3]x=[a,

n] #a若变,x也变a[0]=

1print(x)print(x[0])#>>[[1,'b','c'],[1,2,

3]]#>>[1,'b',

'c']print(x[0][1])

#>>b5北京大学信息学院

郭炜列表相加列表相加可以得到新的列表a=

[1,2,3,4]b=

[5,6]c=a+

bprint(c)#>>[1,2,3,4,5,6]a[0]=

100print(c)#>>[1,2,3,4,5,6]6北京大学信息学院

郭炜列表和+=对列表来说,a+=b

a=a+b不同b=a=

[1,2]a+=

[3]print(a,b)#b和a指向相同地方,在a末尾添加元素,b也受影响#>>[1,2,3][1,2,

3]a

=

a

+

[4,5]

#对a重新赋值,不会影响到bprint(a)#>>[1,2,3,4,5]print(b)#>>[1,2,3]7北京大学信息学院

郭炜列表乘法#>>[True,True,

True]print([True]*

3)a=

[1,2]b

= a*

3print(b)print([a*3])c=[a]*3print(c)a.append(3)print(c)print(b)#>>[1,2,1,2,1,

2]#>>[[1,2,1,2,1,

2]]#>>[[1,2],[1,2],[1,

2]]#>>[[1,2,3],[1,2,3],[1,2,

3]]#>>[1,2,1,2,1,

2]8北京大学信息学院

郭炜列表的切片列表的切片返回新的列表,用法和字符串切片相同a=

[1,2,3,4]b=

a[1:3]#>>[2,

3]print(b)b[0]=

100print(b)print(a)#>>[100,

3]#>>[1,2,3,

4]print(a[::-1])#>>[4,3,2,

1]print([1,2,3,4,5,6][1:5:2]) #[2,4]print(a[:]) #>>[1,2,3,4]9北京大学信息学院

郭炜列表比大小两个列表比大小,就是逐个元素比大小,直到分出胜负。如果有两个对应元素不可比大小,则出 runtime

error。print([1,'a',12]<

[1,'b',7])print([1,'a']<

[1,'a',13])print([2,'a']>

[1,'b',13])print([2,'a']<

['ab','b',13])#>>True#>>True#>>True#runtime

error10北京大学信息学院

郭炜列表的遍历lst=

[1,2,3,4]forxin

lst:print(x,end="

")x=

100print(lst)#不会修改列表的元素#>>[1,2,3,

4]foriin

range(len(lst)):lst[i]=

100print(lst) #>>[100,100,100,

100]11北京大学信息学院

郭炜信息科学技术学院

郭炜列表基本应用河南云台山北京大学信息学院

郭炜列表应用例题:校门外的树某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。13北京大学信息学院

郭炜列表应用例题:校门外的树输入第一行有两个整数L(1

<=L<=

10000)和M(1<=M

<=100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。14北京大学信息学院

郭炜列表应用例题:校门外的树样例输入5003150300100200470471样例输出29815北京大学信息学院

郭炜列表应用例题:校门外的树16为True表示坐标i的树还在s=

input().split()L,M=

int(s[0]),int(s[1])good=[True]*(L+1)#good[i]foriin

range(M):s=

input().split()start,end=int(s[0]),int(s[1])forkinrange(start,end+

1):good[k]

=

False

#坐标k处的树被移走了print(sum(good))#sum是python函数,可以求列表元素和#True就是1,False就是0北京大学信息学院

郭炜信息科学技术学院

郭炜用排序函数对简单列表排序新加坡金沙酒店北京大学信息学

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论