1、Slide 1-1Python程序设计程序设计循环结构循环结构Slide 1-2Python程序设计程序设计循环结构循环结构2023-2-16Slide 1-3Python程序设计程序设计循环结构循环结构2023-2-16对于对于我们人类,循环是不自然的,谁没事儿会给自己编个循环像机器人一我们人类,循环是不自然的,谁没事儿会给自己编个循环像机器人一样生活样生活呢?呢?计算机计算机最擅长的就是重复,不是最擅长的就是重复,不是吗?吗?一个循环就是一组重复执行的一个循环就是一组重复执行的语句语句用用循环的想法来设计计算的循环的想法来设计计算的过程过程Python提供了两种类型的循环语句:提供了两种类
2、型的循环语句:while循环和循环和for循环循环while循环是一种条件控制循环,根据条件的真假来控制循环是一种条件控制循环,根据条件的真假来控制for循环是一种计数器控制循环,会重复特定的次数循环是一种计数器控制循环,会重复特定的次数Slide 1-4Python程序设计程序设计循环结构循环结构2023-2-16while循环循环语法语法如下:如下:while 条件条件:循环体循环体条件条件两边没有圆括号,两边没有圆括号,:是是while语句的组成部分语句的组成部分循环体循环体由语句由语句构成,必须相对于构成,必须相对于while向右向右缩进(一般缩进(一般是向右缩进是向右缩进4个空格个空
3、格)。)。通过缩进,通过缩进,Python能够识别能够识别出出循环体循环体是隶属于是隶属于while的的对循环体的一次执行称为一个循环周期。对循环体的一次执行称为一个循环周期。while循环循环中中,在每个循环周期前进行条件检测,如果一开始,在每个循环周期前进行条件检测,如果一开始条件检测的结果为条件检测的结果为“假假”,则循环体一次都不,则循环体一次都不执行执行Slide 1-5Python程序设计程序设计循环结构循环结构2023-2-16Slide 1-6Python程序设计程序设计循环结构循环结构2023-2-16如何用计算机解?如何用计算机解?用一个用一个变量变量total保存保存累加
4、和,其初始值为累加和,其初始值为0对于对于1、2、3、100中的每一个整数中的每一个整数i,依次把它加入到,依次把它加入到total中中第第1次,次,total为为0、i为为1,total+i为为1,结果保存回,结果保存回total第第2次,次,total为为1、i为为2,total+i为为3,结果保存回,结果保存回total第第100次,次,total为为4950、i为为100,total+i为为5050,结果保存回,结果保存回total问题抽象为统一的形式:问题抽象为统一的形式:total=total+i,采用,采用while循环重复地计算循环重复地计算Slide 1-7Python程序设
5、计程序设计循环结构循环结构2023-2-16【例例】编写编写程序程序,用户,用户从键盘输入若干个整数,输出它们的和。从键盘输入若干个整数,输出它们的和。用变量用变量total保存保存累加和,其初始值为累加和,其初始值为0键盘上输入的整数键盘上输入的整数value,依次把它加入到,依次把它加入到total中中问题抽象为统一的形式:问题抽象为统一的形式:total=total+value,采用,采用while循环重复地计算循环重复地计算输入输入的整数的整数数量数量未知未知,要,要自己设计自己设计循环结束条件循环结束条件引入引入一个用来结束循环的特殊一个用来结束循环的特殊标志(哨兵),标志(哨兵),
6、在循环执行过程中,遇到该标志,循在循环执行过程中,遇到该标志,循环就结束环就结束了。标志了。标志不能是用户要累加的整数不能是用户要累加的整数值。值。0不会不会对最后的累加和产生影响对最后的累加和产生影响。本题用来本题用来结束循环的标志是结束循环的标志是0Slide 1-8Python程序设计程序设计循环结构循环结构2023-2-16【例例】编写编写程序程序,用户,用户从键盘输入若干个整数,输出它们的和。从键盘输入若干个整数,输出它们的和。通用通用的方法是引入用来结束循环的特殊标志的方法是引入用来结束循环的特殊标志EOF通常在通常在Windows中中,输入,输入Z(Ctrl+Z)表示)表示EOF
7、,在在Mac OS X和和Linux/Unix中,中,输入输入D(Ctrl+D)表示)表示EOF。Python中,输入中,输入D(Ctrl+D)表示)表示EOF在循环输入数据过程中,若遇到在循环输入数据过程中,若遇到EOF,则会抛出,则会抛出EOFError异常,通过使用异常,通过使用try-except异常处理机制捕获该异常,结束循环异常处理机制捕获该异常,结束循环Slide 1-9Python程序设计程序设计循环结构循环结构2023-2-16【例例】编写编写程序,要求用户从键盘输入一个正整数程序,要求用户从键盘输入一个正整数n,求,求n!,n!=12n。用变量用变量mul保存累乘积,保存累
8、乘积,其初始值其初始值为为1对于对于1、2、3、n中的每一个整数中的每一个整数i,依次将依次将i和和mul相乘相乘第第1次,次,mul为为1、i为为1,mul*i为为1,结果保存回,结果保存回mul第第2次,次,mul为为1、i为为2,mul*i为为2,结果保存回,结果保存回mul问题抽象为统一的形式:问题抽象为统一的形式:mul=mul*i,采用,采用while循环重复地计算循环重复地计算Slide 1-10Python程序设计程序设计循环结构循环结构2023-2-16【例例】编写编写程序程序,随机生成一个,随机生成一个0,100之间的整数(称为神秘数),提示用户之间的整数(称为神秘数),提
9、示用户连续输入数字,直至其与神秘数相等;对于用户输入的数字,会提示它比神秘连续输入数字,直至其与神秘数相等;对于用户输入的数字,会提示它比神秘数大或小,便于用户更明智地选择下一个输入的数字。数大或小,便于用户更明智地选择下一个输入的数字。Slide 1-11Python程序设计程序设计循环结构循环结构2023-2-16使用一个控制变量控制循环执行的次数,这种类型的循环被称为计数器控使用一个控制变量控制循环执行的次数,这种类型的循环被称为计数器控制的循环制的循环for循环的语法循环的语法for var in sequence:循环体循环体循环体由语句循环体由语句构成构成,必须相对,必须相对于于f
10、or向右向右缩进(一般是向右缩进缩进(一般是向右缩进4个空格)。通个空格)。通过缩进,过缩进,Python能够识别出循环体是能够识别出循环体是隶属于隶属于for的的序列序列sequence中保存着一组中保存着一组元素元素,元素的个数决定了循环重复的次数,因此,元素的个数决定了循环重复的次数,因此,for循环的循环次数是确定的。循环的循环次数是确定的。for循环依次从序列中取出元素,赋予变量循环依次从序列中取出元素,赋予变量var,var每取序列每取序列sequence中的一个元素值,就执行一次循环体中的一个元素值,就执行一次循环体Slide 1-12Python程序设计程序设计循环结构循环结构
11、2023-2-16range函数的参数必须为整数函数的参数必须为整数range(a)等价于等价于range(0,a),产生连续整数序列:,产生连续整数序列:0、1、.、a 1range(a,b),产生连续整数序列:,产生连续整数序列:a、a+1、.、b 2、b 1range(a,b,k),k为步长,若为步长,若k为正数,产生整数序列:为正数,产生整数序列:a、a+k、a+2k、.,最后一,最后一个数必须小于个数必须小于b;若;若k为负数,产生整数序列:为负数,产生整数序列:a、a+k、a+2k、.,最后一个数,最后一个数必须必须大于大于bSlide 1-13Python程序设计程序设计循环结构
12、循环结构2023-2-16【例例】编写程序,求编写程序,求1+2+3+.+100的和。的和。【例例】编写程序,要求用户从键盘输入一个正整数编写程序,要求用户从键盘输入一个正整数n,求,求n!,n!=12n。Slide 1-14Python程序设计程序设计循环结构循环结构2023-2-16一一个循环语句的循环体个循环语句的循环体中包含另中包含另一个循环语句时,就称为一个循环语句时,就称为嵌套循环嵌套循环嵌套循环嵌套循环由一个外层循环和一个或多个内层循环组成。外层循环由一个外层循环和一个或多个内层循环组成。外层循环每循环一每循环一次都次都会重新进入内层循环会重新进入内层循环,并重新开始执行内层循环
13、,并重新开始执行内层循环【例例】编写程序,显示乘法口诀表。编写程序,显示乘法口诀表。Slide 1-15Python程序设计程序设计循环结构循环结构2023-2-16pass语句其实是空语句,不做任何事情,只起占位的作用语句其实是空语句,不做任何事情,只起占位的作用break语句用于某种语句用于某种情况发生时情况发生时提前结束循环。提前结束循环。循环中的循环中的break总是需要和总是需要和if语语句配合句配合使用使用正常情况下执行正常情况下执行20次循环。实际执行了次循环。实际执行了14次次循环。在第循环。在第14次循环时次循环时,total的的值大于值大于100了,执行了,执行break语
14、句,结束循环,输出语句,结束循环,输出结果结果Slide 1-16Python程序设计程序设计循环结构循环结构2023-2-16continue语句用语句用来使程序执行流程跳过当次循环,继续下一次循环。循环中的来使程序执行流程跳过当次循环,继续下一次循环。循环中的continue一般也需要和一般也需要和if语句配合语句配合使用使用continue语句和语句和break语句的区别是:语句的区别是:continue只只结束当次结束当次循环的执行,继续下循环的执行,继续下一次,而不是终止整个循环。而一次,而不是终止整个循环。而break则是结束整个循环的则是结束整个循环的执行执行正常情况下执行正常情
15、况下执行20次循环。但在第次循环。但在第10、11次次循环时,会执行循环时,会执行continue语句,跳语句,跳过当次过当次循循环,环,continue后面的后面的语句语句total=total+i不会不会执行,即执行,即i的值的值10和和11不会累加不会累加到到total中中,继,继续下一次续下一次循环循环Slide 1-17Python程序设计程序设计循环结构循环结构2023-2-16【例例】1百元买百元买1百只鸡,其中公鸡百只鸡,其中公鸡5元元1只、母鸡只、母鸡3元元1只、小鸡只、小鸡1元元3只,要求每种鸡只,要求每种鸡都必须有,则公鸡、母鸡和小鸡应各买几只都必须有,则公鸡、母鸡和小鸡
16、应各买几只。穷举法基本穷举法基本思想是不重复、不遗漏地列举所有可能情况,从中寻找满足条件的结果思想是不重复、不遗漏地列举所有可能情况,从中寻找满足条件的结果。用用穷举法来解决的问题应具有两个特点:有明显的穷举范围且穷举的数目应该是有限穷举法来解决的问题应具有两个特点:有明显的穷举范围且穷举的数目应该是有限的;可以按某种规则的;可以按某种规则列举所有情况。列举所有情况。一般采用循环一般采用循环来列举所有情况来列举所有情况考虑公鸡、母鸡和小鸡数量的取值范围考虑公鸡、母鸡和小鸡数量的取值范围三种鸡都必须有,购买公鸡的钱最多为三种鸡都必须有,购买公鸡的钱最多为100-3-1=96元,取元,取5的倍数,
17、得的倍数,得95元,所元,所以公鸡数量的取值范围为以公鸡数量的取值范围为119只只同理,母鸡数量的取值范围为同理,母鸡数量的取值范围为131只只购买小鸡的钱最多为购买小鸡的钱最多为100 5 3=92元,可以购买元,可以购买276只,但鸡的总数量为只,但鸡的总数量为100只,只,小鸡数量应小于等于小鸡数量应小于等于98,且小鸡数量为,且小鸡数量为3的倍数的倍数,小鸡,小鸡数量的取值范围为数量的取值范围为396只只Slide 1-18Python程序设计程序设计循环结构循环结构2023-2-16对于每种鸡的取值都要反复地试,最后确定正好满足对于每种鸡的取值都要反复地试,最后确定正好满足100元买
18、元买1百只鸡的组合。因百只鸡的组合。因此每种鸡都要按照各自的取值范围循环,可以采用三重此每种鸡都要按照各自的取值范围循环,可以采用三重循环循环假设假设cock表示公鸡,表示公鸡,hen表示母鸡,表示母鸡,chick表示小鸡,则得到如下条件表示小鸡,则得到如下条件:cock+hen+chick=100 cock*5+hen*3+chick/3=100 chick%3=0 程序程序要寻找同时满足上述条件的正整数要寻找同时满足上述条件的正整数解解Slide 1-19Python程序设计程序设计循环结构循环结构2023-2-16由于由于cock+hen+chick=100,确定了,确定了cock和和h
19、en的值,也就确定了的值,也就确定了chick的值,的值,可以省略第三重可以省略第三重chick循环循环。cock*5+hen*3+(100-cock hen)/3=100 (100-cock hen)%3=0Slide 1-20Python程序设计程序设计循环结构循环结构【例】编写程序,从键盘输入一个正整数【例】编写程序,从键盘输入一个正整数n,判断它是否是素数。如果一个正,判断它是否是素数。如果一个正整数只能被整数只能被1和它本身整除,则这个正整数就是素数。和它本身整除,则这个正整数就是素数。1不是素数,不是素数,2是素数。是素数。根据素数的定义,对于给定的正整数根据素数的定义,对于给定的
20、正整数n,n是素数的条件是不能被是素数的条件是不能被2、3、n-1整除整除实际上,任何大于实际上,任何大于n/2的值不可能被的值不可能被n整除,因此整除,因此n是素数的条件可以简化为不是素数的条件可以简化为不能被能被2、3、n/2整除整除进一步进一步可以证明可以证明n是素数的条件是不能被是素数的条件是不能被2、3、整除整除判定素数判定素数2023-2-16nSlide 1-21Python程序设计程序设计循环结构循环结构判定素数判定素数2023-2-16Slide 1-22Python程序设计程序设计循环结构循环结构【例】【例】输入两个正整数输入两个正整数m和和n,求它们的最大公约数和最小公倍
21、数。,求它们的最大公约数和最小公倍数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个称为几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个称为这几个自然数的最大公约数。几个自然数公有的倍数,叫做这几个自然数的公倍这几个自然数的最大公约数。几个自然数公有的倍数,叫做这几个自然数的公倍数。公倍数中最小的一个大于零的公倍数,叫做这几个自然数的数。公倍数中最小的一个大于零的公倍数,叫做这几个自然数的最小公倍数最小公倍数求最大公约数较好的算法是古希腊数学家欧几里德提出的,也称辗转相除法。算求最大公约数较好的算法是古希腊数学家欧几里德提出的,也称辗转相除法。算法描述如下
22、:法描述如下:(1 1)取)取m除以除以n的余数的余数r;(2 2)如果)如果r为为0 0,算法结束,最大公约数为,算法结束,最大公约数为n;(3 3)如果)如果r不为不为0 0,设,设m等于原来等于原来n的值,的值,n等于等于r值,重复上述过程值,重复上述过程。求最小公倍数的算法:若干个求最小公倍数的算法:若干个n之之和和total,如果能被如果能被m整除,则该和就是整除,则该和就是m、n的的最小公倍数最小公倍数。或者。或者,可以先计算,可以先计算m和和n的最大公约数,然后再用的最大公约数,然后再用m和和n的积去除最的积去除最大公约数来求得大公约数来求得最小公倍数最小公倍数求最大公约数和最小公倍数求最大公约数和最小公倍数2023-2-16Slide 1-23Python程序设计程序设计循环结构循环结构求最大公约数和最小公倍数求最大公约数和最小公倍数2023-2-16Slide 1-24Python程序设计程序设计循环结构循环结构2023-2-16在在Python中,中,while循环或循环或for循环都有一个可选的循环都有一个可选的else语句语句当循环正常结束后,会执行当循环正常结束后,会执行else语句语句循环体中的循环体中的break语句或语句或return语句会跳过执行语句会跳过执行else语句语句