版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4讲程序控制北京理工大学:姜增如第4讲主讲内容3选择结构及使用45简单循环结构及使用2顺序结构及使用循环嵌套的使用1程序算法及描述67自定义函数中循环的使用递归的使用一、计算机算法及描述1、计算机算法算法:即对操作对象的加工、处理,得到期望的结果。算法是一种循序渐进解决问题的过程,特指一种在有限步骤内解决问题而建立的可重复应用的计算过程。根据掌握的数学方法,能用自然语言描述算法,依据逻辑判断设计计算机能识别的算法,解决实际应用问题。一个算法有一个或多个输出,按照算法步骤分解为基本的可执行操作,使之在有限时间内完成。原始的方法是:第一步:1+2=3第二步:3+3=6第三步:6+4=10……..要写99步
例如:求1+2+3+……..100可用等差数列求前n项和公式:利用原始方法,让计算机自动循环求出:S1:s=0S2:I=1S3:使s+I之和再放入变量s中,S4:使I+1放入IS5:如I的值小于等于100,返回S3S4S6:如大于100输出结果并结束例如:设某个班级有50个学生,要求输出Pyshon语言课程80分以上的和不及格的同学成绩。用I表示第I个学生,用n表示第I个学生的学号,用g表示第I个学生成绩,计算机算法如下:
S1:I=1S2:判断,若g>=80或g<60则打印n和g的值,否则不打印S3:I=I+1S4:判断,如I<=50返回S2,继续执行,否则算法结束。本算法也是利用I做循环变量,判断每个学生的成绩,直至50人。S1:sign=-1S2:sum=1S3:deno=2S4:sign=(-1)×signS5:temp=sign×(1/deno)S6:sum=sum+tempS7:deno=deno+1S8:若deno<=100返回S4,否则结束
用sign表示符号,deno表示分母,算法如下:S1:a=?,b=?,c=?S2:q=b*b-4*a*cS3:若q>0则:S4:x1=(-b+√q)/(2*a)S5:x2==(-b-√q)/(2*a)S6:输出x1,x2跳到S8S7:若q<0则输出“无实数解”S8:结束例如:求一元二次方程的解算法如下:例如:对于一个从键盘上输入的大于2的正整数,判断是否为素数算法如下:
分析:能被4整除,不能被100整除或能被400整除的年份为闰年。设y为被检测的年份,算法如下:S1:输入年份值赋给yS2:判断,若y不能被4整除,则输出“不是闰年”,转到S6S3:判断,若y能被4整除,又不能被100整除,则输出“是闰年”转到S6S4:若y能被100整除,又能被400整除,则输出“是闰年”,否则输出“不是闰年”,转到S6S5:输出y“不是闰年”S6:y=y+1S7:Y<2500是转S2,否则结束。例如:判断从输入的年份起,直到2500年结束,顺序输出闰年或非闰年。2、算法的特性(1)有穷性:算法应包含有限个操作步骤,对应于循环,必须要有出口,不能是死循环。(2)确定性:算法中的每一步骤都应是确定的,限定的条件也必须确定(3)有零个或多个输入:执行算法时,需从外界取得必要的信息,可从键盘输入,也可在程序中固定。(4)有一个或多个输出:算法的目的是求解,解需输出进行验证,即验证结果的正确性。(5)有效性:算法中的每一步骤都应当是有效的,决不能出现被0除现象。。程序执行的流向3、程序算法流程图基本计算的语句选择判断,按结果不同,选择不同的操作程序开始和结束输入和输出,用于人-机交互开始结束计算框输入/输出判断(1)框图描述顺序
语句1语句2选择条件语句1成立不成立语句2循环条件成立不成立循环体语句(2)程序结构描述输入a,bC>100d=c/100输出a+b输出dYN输入两个整数,若它们的平方和大于100,则输出平方和百位以上的各数字,否则输出两个整数的和。开始结束c=a*a+b*b例1使用流程图描述:分析算法如下:S1:输入2个数赋给a,bS2:计算c=a2+b2S3:判断,若c>100S4:成立输出c/100S5:不成立输出a+bS6:结束。输入a,b,c=?d>=0输出该方程无实数解YN开始d=b*b-4*a*c结束输出x1=(-b+sqrt(d))/(2*a)输出x2=(-b-sqrt(d))/(2*a)
输入一元二次方程ax2+bx+c=0的3个系数,计算判别式,若判别式大于等于0,求方程的解,输出x1和x2的值,否则输出该方程无实数解例2使用流程图描述:X>0输入x=?YN开始Y结束NX<0输出yy=1y=-1y=0符号函数-1x<0Y=0x=01x>0例3输入ns=s+aa=a+1a<nYN输出s结束开始s=0,a=0求:s=1+2+3+…+n例41、顺序结构二、顺序结构结构及使用语句组2语句组1per_price=float(input('请输入单价:'))number=float(input('请输入斤数:'))sum_price=per_price*numberprint('蔬菜的价格是:',sum_price)请输入单价:30请输入斤数:3.5蔬菜的价格是:105.0例5针对超市购物输入单价及数量,写出计算总价程序。
计算机按照程序代码从前向后依次执⾏所有的操作步骤,不分支、不重复的过程称为顺序结构。它是⼀种最简单、最基本的结构,一般仅具有输入、计算和输出的过程,流程图如图。单条件的使用1if判断条件:
执行语句……1、单条件语句score=67ifscore>=60:
print(“通过")三、选择结构及使用
条件YN语句组2语句组1条件
语句组Y
N单条件的使用2if判断条件:
执行语句……else:
执行语句……
a=18ifa%2==0:
print(“a是偶数")else:
print(“a是奇数")输入语文、数学和英语成绩,若有两门成绩大于90分,得到一朵小红花。Chinese=eval(input("请输入学生的语文成绩"))Maths=eval(input("请输入学生的数学成绩"))English=eval(input("请输入学生的英语成绩"))if(Chinese>=90andMaths>=90)or
(Chinese>=90andEnglish>=90)or
(Maths>=90andEnglish>=90):print("该学生得到一朵小红花")else:print("下次考试需要努力")例6语文≥90和数学≥90或语文≥90和英语≥90或数学≥90和英语≥90Y开始结束N输入语文、数学和英语成绩得到小红花继续努力输出a=11,b=21,c=13的最大值。a,b,c=11,21,13Max=aifMax<b:
Max=bifMax<c:
Max=cprint(“Max=",Max)Max<bYN开始Y结束NMax=bMax=a输入a,b,cMax<c输出MaxMax=c例7从键盘上输入任意3个数给a,b,c,按照从小到大排序输出。例8a>b输入a,b,c=?YN开始t=aa=bb=tY结束Na>ct=aa=cc=tb>ct=bb=cc=t输出a,b,cprint("请输入三个数:\n");a=eval(input("请输入a=?"))b=eval(input("请输入b=?"))c=eval(input("请输入c=?"))if(a>b):#若第1个数大于第2个数
t=a;a=b;b=t#则2个数交换if(b>c):#第2个数大于第3个数
t=b;b=c;c=t#则2个数交换if(a>b):#再将剩下2个数比较
t=a;a=b;b=t#2个数交换print("\n按从小到大的顺序排序结果如下:\n")print(a,"<",b,"<",c)print("请输入三个数:\n");a,b,c=map(float,input('PleaseInputa,b,c=?').split())if(a>b):#若第1个数大于第2个数
t=a;a=b;b=t#则2个数交换if(b>c):
#第2个数大于第3个数
t=b;b=c;c=t#则2个数交换if(a>b):
#再将剩下2个数比较
t=a;a=b;b=t#2个数交换print("\n按从小到大的顺序排序结果如下:\n")print(a,"<",b,"<",c)map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。split()拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)输入a,b,c=?d>=0输出该方程无实数解YNd=b*b-4*a*c结束输出x1=(-b+sqrt(d))/(2*a)输出x2=(-b-sqrt(d))/(2*a)开始1、输入一元二次方程ax2+bx+c=0的3个系数,计算判别式,若判别式大等于0,输出x1和x2的值,否则输出输出该方程无实数解。课堂练习求一元二次方程的解
importmatha=eval(input('PleaseInputa=?'))b=eval(input('PleaseInputb=?'))c=eval(input('PleaseInputc=?'))d=b*b-4*a*cifd>=0:x1=(-b+math.sqrt(d))/(2*a)x2=(-b-math.sqrt(d))/(2*a)print("x1={},x2={}".format(x1,x2))else:print('方程无实数解')importmatha,b,c=map(int,input('PleaseInputa,b,c=?').split())d=b*b-4*a*cifd>=0:x1=(-b+math.sqrt(d))/(2*a)x2=(-b-math.sqrt(d))/(2*a)print("x1={},x2={}".format(x1,x2))else:print('方程无实数解')多条件的使用if
判断条件1:
执行语句1……
elif
判断条件
执行语句2……
elif
判断条件3:
执行语句3……
else:
执行语句4……
2、多条件语句注意:(1)if后的条件判断语句可加括号也可不加,但后面的冒号不可省略;(2)if条件后的执行子句必须缩进对齐形成循环模块;(3)多条件elif判断子句必须和if对齐,所有执行子句必须缩进对齐。score=input("请输入你的成绩:\n")score=eval(score)ifscore>=90:print("你的成绩为A")elif90>score>=80:print("你的成绩为B")elif80>score>=70:print("你的成绩为C")elif70>score>=60:print("你的成绩为D")else:print("你的成绩为E")你的成绩为B结果:输入82例9输入Pyhton考试成绩,按照A~E输出
根据y函数编写一个程序,输入一个x值,输出y的值。x=input("请输入x=?")x=eval(x)if(x<1):y=xelif(10>x>=1):y=2*x-1else:y=3*x-11print("x={},y={}".format(x,y))请输入x=?8x=8,y=15例10结果:根据年龄判断输入哪个阶段,1~17岁属于儿童,18~44岁属于青年,45~59岁属于中年,
60~69岁跨入老年,70~79岁进入古稀之年,80岁后属于耄耋老人了。
old=input('请输入你的年龄:\n')ifold.isdecimal():#判断是否是数字
old=int(old)if1<=old<17:print('儿童!')elif8<=old<45:print('青年!')elif45<=old<60:print(‘中年!')elif60<=old<70:print('跨入老年行列!')elif70<=old<80:print(‘进入古稀之年!')else:print('您已经属于耄耋老人啦')else:print('请输入数字!')例11跨入老年行列结果:60输入:课堂练习:编写银行存款程序根据定期存款利率:3个月2.85%6个月3.05%12个月3.25%24个月3.50%36个月3.95%60个月4.15%计算存款利息的方法:利息=存款*利率*存款时间/12若存10000元,存半年利息是:10000*3.05/100*6/12=152.5money=eval(input('请输入存款的金额(元):'))
time=eval(input('请输入定期存款的时间(3/6/12/24/36/60)月(元):'))
iftime==3:
rate=2.85
eliftime==6:
rate=3.05
eliftime==12:
rate=3.25
eliftime==24:
rate=3.5
eliftime==36:
rate=3.95
eliftime==60:
rate=4.15
else:
print('不属于定期存款!')
print('您的本金是:'+str(money)+'元,'+'存款时间是:'+str(time)+'个月')
print('到期应得利息是:'+str(money*rate/100*time/12)+'元')格式:
match表达式:
case常量1:
语句
1
case常量2:
语句
2
…
case常量N:
语句
N
casedefault:
3、多条件开关语句student=input(“输入你的学历:”)
matchstudent:
case‘博士’:
print(“享受博士待遇”,)
case‘研究生’:
print(“享受研究生待遇”)
case“本科”:
print(“享受本科生待遇”)
case“大专”:
print("享受大专生待遇")
case_:
print("学历未达标..")输入你的学历:研究生享受研究生待遇例12根据学历选择待遇importdatetimeday1=datetime.date.today()print(‘今天的日期是:',day1)day=datetime.date.weekday(day1)+1print('今天是星期',day)matchday:case1|2|3|4|5:print("今天是工作日")case6|7:print("今天是周末啦")例13判断是否工作日四、循环控制语句Python提供了for循环和while循环(在Python中没有do..while循环):循环类型描述while循环在给定的判断条件为true时执行循环体,否则退出循环体。for循环重复执行语句嵌套循环你可以在while循环体中嵌套for循环Python编程中while语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其语法格式为:1、PythonWhile循环语句flag=1while(flag):
print("永远为真值!进入死循环,必须强制停止")注意:以上的无限循环,使用菜单的stop来中断循环while(条件判断语句):
循环体语句
例如:注意:(1)while后的条件判断语句可加括号也可不加,但后面的冒号不可省略;(2)while的循环体子句必须缩进对齐,形成循环模块;(3)while常用于循环次数不确定的循环,若循环体内有条件判断子句,必须和循环体子句缩进对齐。count=0
while(count<9):
print("Thecountis:",count)
count=count+2
print("Goodbye!")Thecountis:0Thecountis:2Thecountis:4Thecountis:6Thecountis:8Goodbye!求:s=1+2+3+…+100a=1;s=0while(a<=100):s=s+aa+=1print("1+2+3+..+100={}".format(s))1+2+3+..+100=5050输出:0~9的偶数例14结果:结果:例15输入2个数正整数,使用辗转相除法求其最大公约数例16X=input("请输入第一个数x=?")Y=input("请输入第二个数y=?")x=eval(X)y=eval(Y)if(x<y):t=x;x=y;y=twhile(x%y):r=x%yx=yy=rprint("x和y的最大公约数是{}".format(y))请输入第一个数x=?76请输入第二个数y=?24x和y的最大公约数是4结果:循环使用else语句在python中,while…else当循环条件为false时执行else语句块:count=0whilecount<5:print(count,"小于5")count=count+1else:print(count,"大于等于5")0小于51小于52小于53小于54小于55大于等于5例17循环判断并输出结果:判断从2000年份起,直到2500年结束,输出闰年或非闰年的年份。Year=2000while(Year<2500):if((Year%4==0andYear%100!=0)or(Year%400==0)):print(Year,"年是闰年")else:print(Year,"年是非闰年")Year=Year+12000年是闰年2001年是非闰年2002年是非闰年2003年是非闰年2004年是闰年…………..…………..…………..2498年是非闰年2499年是非闰年例18deftrim(s):whiles[:1]=='':s=s[1:]whiles[-1:]=='':s=s[:-1]returns#调用str='I’mstudingPythonlanguage'print(trim(str))使用函数去除字符串首尾的空格例192、Pythonfor循环语句Pythonfor循环可以遍历任何序列的项目,如列表、元组或字符串均是序列,它的每个元素可根据偏移量得到。序列可通过range()、len()、max()、min()、sum()函数计算。pythonfor循环的一般格式:第一行是要先定义一个赋值目标(迭代变量),和要遍历(迭代)的对像;首行后面是要执行的语句块。
for目标in对像:
print赋值目标for循环一个字符串操作方法addr=‘'
foriinaddr:
printifor语法格式:for循环变量in序列:
循环语句例如:x从0开始,一直到10结束forxinrange(0,11,2):
print(x)
0246810结果:s1=[1,3,46,25,2,10,8]print(len(s1))print(max(s1))print(min(s1))print(sum(s1))746195结果:例如:其它函数用法forcountinrange(0,10,2):
print("Thecountis:",count)
print("Goodbye!")Thecountis:0Thecountis:2Thecountis:4Thecountis:6Thecountis:8Goodbye!求:s=1+2+3+…+100s=0forainrange(1,101):s=s+aprint("1+2+3+..+100={}".format(s))1+2+3+..+100=5050输出:0~9的偶数例20例21结果:结果:s=sum(range(1,101))print("1+2+..+100={}".format(s))循环输出字符和字符串1+2+..+100=5050例22forletterin'Python':
print('当前字母:',letter)fruits=['banana','apple','mango']forfruitinfruits:
print('当前水果:',fruit)print("Goodbye!")当前字母:P当前字母:y当前字母:t当前字母:h当前字母:o当前字母:n当前水果:banana当前水果:apple当前水果:mangoGoodbye!例23使用Python的系统函数sum即可求s=1+2+。。。100结果:结果:fruits=['banana','apple','mango']forindexinrange(len(fruits)):print('当前水果:',fruits[index])print("Goodbye!")当前水果:banana当前水果:apple当前水果:mangoGoodbye!例24使用列表输出字符串结果:一个猴子摘了若干个桃子,它每天吃掉一半还再多加1个,到第10发现还有一个桃子,问猴子第一天共摘了多少桃子?例25second=1fordayinrange(10,1,-1):first=(second+1)*2;second=firstprint("第一天摘的桃子个数={}".format(first))第一天摘的桃子个数=1534结果:nums=[]#建立空列表print("输入3个任意数")foriinrange(3):nums.append(int(input('{}:'.format(i))))nums.sort()print(nums)输入3个任意数0:231:542:2[2,23,54]结果:例26对输入的任意3个数,进行排序输出循环使用else语句在python中,for…else,可通过else语句在循环中跳出,和while…else使用一样。2、求级数:分析:该表达式为求级数问题,使用循环方法计算的重点是找出表达式的规律,分析通式,通式分析:(1)i表示分母的项数和数字值,通式:i=i+1(2)分母通式:den=den+I(3)当前项数通式:item=1.0/den(4)求和S的通式:S=S+item
1、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?课堂练习分析:小球第1次是单程100m,第2次要弹起来50m落下50m,第3次要弹起来25m落下25m,以后每次都是双程距离加起来。3、编写100-999之间水仙花程序水仙花即:三位数的立方和等于原数例如:153即是水仙花13+53+33=1+125+27=153N=345if(3*3*3+4*4*4+5*5*5==N)已知N百位数,如何找到百位数的个位、十位、百位算法:百位=N/100十位=N/10%10个位=N%10(1)、s=100.0#起始高度height=100.0foriinrange(1,11):height=height/2s=s+2*heightprint('总高度={0}'.format(s-2*height))print('第10次反弹高度:={0}'.format(height))总高度:tour=299.609375第10次反弹高度:height=0.09765625(2)den=0S=0.0n=eval(input("请输入n=?"))foriinrange(1,n+1):#到表达式最后一项den+=i#求分母通式item=1.0/den#求当前项S+=item#求和的通式print("S={}".format(S))请输入n=?11S=1.8333333333333333结果:forninrange(100,1000):i=int(n/100)j=int((n-i*100)/10)k=int(n%10)if(i*100+j*10+k==i*i*i+j*j*j+k*k*k):print("flower={}".format(n))flower=153flower=370flower=371flower=407结果:(3)编写100-999之间水仙花程序循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句:控制语句描述break语句在语句块执行过程中终止循环,并且跳出整个循环continue语句在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。pass语句pass是空语句,是为了保持程序结构的完整性。3、continue与break语句Pythonbreak语句打破了最小封闭for或while循环。break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句。break语句可用在while和for循环中。若使用嵌套循环,break语句将停止执行最深层的循环,并开始执行下一行代码。Python语言break语句语法:
foriterating_varinsequence:statements(s)
break
statements(s)while(condition):statements(s)break
print….(1)break语句求1~200之间能被19整除的最大数1~200之间能被19整除的最大数是190foriinrange(200,1,-1):if(i%19==0):breakprint("1~200之间能被19整除的最大数是{}".format(i))例27结果:forvarinrange(1,11,2):print('当前变量值:',var)ifvar==5:#当变量var等于5时退出循环
breakprint("Goodbye!")当前变量值:1当前变量值:3当前变量值:5Goodbye!forletterin'Python':ifletter=='h':
breakprint('当前字母:',letter)print("GoodBye")当前字母:P当前字母:y当前字母:tGoodBye当序列值等于5退出循环例28当字符串遇到“h”中断输出例29结果:结果:2、Python
continue语句Pythoncontinue语句跳出本次循环,而break跳出整个循环。continue语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环。continue语句用在while和for循环中。Python语言continue语句语法格式如下:foriterating_varinsequence:statements(s)
continue
statements(s)while(condition):statements(s)continue
print….forletterin'Python':ifletter=='h':continueprint('当前字母:',letter)print("GoodBye")forvarinrange(1,11,2):ifvar==5:#当变量var等于5时重新循环
continue
print('当前变量值:',var)print("Goodbye!")当前字母:P当前字母:y当前字母:t当前字母:o当前字母:nGoodBye当前变量值:1当前变量值:3当前变量值:7当前变量值:9Goodbye!删除5,输出0~9之间的奇数序列例30删除字母“h”字符的序列例31结果:结果:continue语句是一个删除的效果,他的存在是为了删除满足循环条件下的某些不需要的成分:var=10whilevar>0:var=var-1ifvar==5orvar==8:continueprint('当前值:',var)print("Goodbye!")当前值:9当前值:7当前值:6当前值:4当前值:3当前值:2当前值:1当前值:0Goodbye!删除5和8,输出0~9之间的序列例32结果:只打印0-10之间的奇数,可以用continue语句跳过某些循环fornuminrange(1,11):if(num%2==0):#如果n是偶数,不输出
continueprint(num)print("Goodbye!")13579Goodbye!例33结果:x=1foriinrange(0,50):ifx>=10:breakifx%2==0:x+=5continuex-=3print("x={}".format(x),"i={}".format(i))阅读程序写出结果:3、Pythonpass语句Pythonpass是空语句,是为了保持程序结构的完整性。pass不做任何事情,一般用做占位pass语句,在Python中常用于编写未成熟的函数,语法格式:defsample(n_samples):
passpass只占据一个位置,未想好函数的内容可用pass填充,使程序正常运行。forletterin'Python':ifletter=='h':passprint("这是pass块")print("当前字母:",letter)print("Goodbye!")当前字母:P当前字母:y当前字母:t这是pass块当前字母:h当前字母:o当前字母:nGoodbye!当字符串中遇到“h”,目前不做处理例34结果:五、嵌套循环的使用外循环内循环内循环结束外循环结束...for/whilefor/while外循环内循环内循环for/whilefor/while外循环结束...Python语言允许在一个循环体里面嵌入另一个循环。嵌套的形式如图:1、嵌套的形式2、for循环嵌套语法for循环变量in序列:
for循环变量in序列::
循环体语句
循环体语句3、while循环嵌套语法:while条件表达式:
while条件表达式:
循环体语句
循环体语句在while循环中可以嵌入for循环,反之,你可以在for循环中嵌入while循环。注意循环体模块的缩进要一致。使用while循环输出乘法口诀例35i=1whilei:j=1whilej:print(i,"*",j,"=",i*j,end='')ifi==j:print("\n")breakj+=1i+=1ifi>=10:break结果:1*1=12*1=22*2=43*1=33*2=63*3=94*1=44*2=84*3=124*4=165*1=55*2=105*3=155*4=205*5=256*1=66*2=126*3=186*4=246*5=306*6=367*1=77*2=147*3=217*4=287*5=357*6=427*7=498*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=649*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81foriinrange(1,10):
forjinrange(1,i+1):
print(j,"*",i,"=",j*i,end="
")
ifj==i:
print("\n")
使用for循环输出乘法口诀例36结果:每只公鸡5个钱,每只母鸡3个钱,每3只小鸡1个钱,用100个钱,买100只鸡,问公鸡、母鸡和小鸡各买几只?分析用变量Rooster,Hen、Chick
,表示公鸡、母鸡和小鸡的只数forRooster,in
range(1,20):
forHen
in
range(1,34):
forChick
in
range(1,100):Rooster最多为20只,
Hen最多为33只,Chick的值为100只所求的Chick不能被3整除如何解决?例37共41页第67
页forRoosterinrange(1,20):forHeninrange(1,33):forChickinrange(1,100):if((5*Rooster+3*Hen+Chick/3==100)and(Rooster+Hen+Chick==100)and(Chick%3==0)):print("Rooster={}".format(Rooster),"Hen={}".format(Hen),"Chick={}".format(Chick))Rooster=4Hen=18Chick=78Rooster=8Hen=11Chick=81Rooster=12Hen=4Chick=84结果:编写猜(1~100)之间数游戏importrandoms=int(random.uniform(1,100))m=int(input("输入1~100之间的整数:"))whilem!=s:m=int(input("不对,重新输入1~100之间的整数:"))ifm>s:print(“猜大了,变小猜")elifm<s:print(“猜小了,加大猜")else:print("恭喜你答对了!")break输入1~100之间的整数:50不对,重新输入1~100之间的整数:60猜小了,加大猜不对,重新输入1~100之间的整数:65大了,变小猜不对,重新输入1~100之间的整数:64猜大了,变小猜不对,重新输入1~100之间的整数:63恭喜你答对了!例38结果:问题 若一个口袋中放有12个球,其中有3个红的,3个白的和6个黑的,问从中任取8个共有多少种不同的颜色搭配?问题分析与算法设计
设:任取的红球个数为red,白球个数为white,则黑球个数为:8–red-white。据题意红球和白球个数的取值范围是0~3,在红球和白球个数确定的条件下,球个数取值应为
8-red-white<=6。例39使用循环完成三色球的抽取count=0print("红球白球黑球")print("---------------------")forredinrange(0,4):#任取红球的个数0~3forwhiteinrange(0,4):#任取白球的个数0~3if(8-red-white)<=6:print("red={}".format(red),"white={}".format(white),"black={}".format(8-red-white))count+=1;print("抽取次数={}".format(count),"种方法")红球白球黑球------------------------------red=0white=2black=6red=0white=3black=5red=1white=1black=6red=1white=2black=5red=1white=3black=4red=2white=0black=6red=2white=1black=5red=2white=2black=4red=2white=3black=3red=3white=0black=5red=3white=1black=4red=3white=2black=3red=3white=3black=2抽取次数=13种方法结果:rows=int(input('输入列数:'))i=j=k=1#i图形行数,j空格的个数,k*的个数print("等腰直角三角形")foriinrange(0,rows):forkinrange(0,rows-i):print("*",end="")#不换行加入end=“”k+=1i+=1print("\n")输出等腰直角三角形例40结果:rows=eval(input("等边三角形行数"))foriinrange(0,rows+1):#变量i控制行数
forjinrange(0,rows-i):#(1,rows-i)print("",end="")j+=1forkinrange(0,2*i-1):#(1,2*i)ifk==0ork==2*i-2ori==rows:ifi==rows:ifk%2==0:#偶数打印*,奇数打印空格
print("*",end="")else:print("",end="")else:print("*",end="")else:print("",end="")k+=1print("\n")i+=1输出空心等边三角形例41结果:print("空心正方形")
rows=eval(input("请输入空心正方n=?"))
print("\n")
foriinrange(0,rows):
forkinrange(0,rows):
ifi!=0andi!=rows-1:
ifk==0ork==rows-1:
print("*",end="")
else:
print("",end="")
else:
print("*",end="")
k+=1
i+=1
print("\n")H=input("请输入三角形的高度H=?")H=eval(H)forjinrange(1,H+1):m=H-jn=2*j-1forkinrange(1,m+1):print("",end="")foriinrange(1,n+1):print("*",end="")print("")输出实心等腰三角形例42结果:
* *** ***** ******* ***** *** *变量分析:(1)h为上三角形的高度,行数为
h,下三角形高度也是h,菱形总行数2*h-1(2)对于第j行,需要计算m(空格个数)和n(星号个数)
。(3)当j<=h时,为上三角,则:空格个数:m=h-j,星号个数n=2*j-1(4)当h<j<=2h-1时,为下三角,空格个数:m=j-h,星号个数为总宽度-空格个数,即:n=2*h-1-2(j-1)=4*h-1-2*j1234567空格数量3*号数量1 23 15 07 15 23 31例43从键盘输入高度h值,输出h行用*号组成的菱形。例:输入h=4,输出的图形如下:(1)控制打印行:for从:j=1到j<=2*h-1;j+=1
若为上三角
j<=h(2)则空格数:m=h-j;星号个数:
n=2*j-1(3)否则下三角空格个数:m=j-h;星号个数:n=4*h-1-2*j(4)重复打印
m个
空格,重复打印n个*,之后换行。加细循环体
ifj<=h:m=h-j;n=2*j-1
else:m=j-h;n=4*h-1-2*j;
forkinrange(1,m+1)print("");
forkinrange(1,n+1)print("*");
print("\n");
算法设计:H=eval(input("请输入菱形块上三角高度H=?"))forjinrange(1,2*H):#行控制
ifj<=H:m=H-jn=2*j-1else:m=j-Hn=4*H-1-2*jforkinrange(1,m+1):#打印空格
print("",end="")forkinrange(1,n+1):#控制星号
print("*",end="")print("\n")结果:法2程序H=eval(input("请输入菱形块上三角高度H=?"))forjinrange(0,H):
m=H-j;n=2*j-1forkinrange(1,m+1):print("",end="")forkinrange(1,n+1):print("*",end="")print("\n")forjinrange(H,0,-1):
m=H-j;n=2*j-1forkinrange(1,m+1):print("",end="")forkinrange(1,n+1):print("*",end="")print("\n")结果:print("空心正方形")rows=eval(input('输入列数:'))foriinrange(0,rows):forkinrange(0,rows):ifi!=0andi!=rows-1:ifk==0ork==rows-1:print("*",end="")#不换行
else:print("",end="")#该处有三个空格
else:print("*",end="")#这里*两侧加了空格
k+=1i+=1print("\n")例44结果:输出空心正方形rows=eval(input("请输入菱形的的高度=?"))foriinrange(rows):#变量i控制行数forjinrange(rows-i):#(1,rows-i)print("",end="");j+=1forkinrange(2*i-1):#(1,2*i)ifk==0ork==2*i-2:#去掉if-else判断是实心的print("*",end="")else:print("",end="")k+=1print("\n");i+=1foriinrange(rows):#菱形的下半部分forjinrange(i):#(1,rows-i)print("",end="")#j+=1forkinrange(2*(rows-i)-1):#(1,2*i)ifk==0ork==2*(rows-i)-2:print("*",end="")else:print("",end="")k+=1print("\n");i+=1例45输出空心菱形使用函数输出2-100之间的质数结果:importmathdefIsPrime(Num):ifNum==1:returnFalseforninrange(2,int(math.sqrt(Num))+1):ifNum%n==0:returnFalseelse:returnTrueoList=[]foriinrange(1,101):ifIsPrime(i)==True:oList.append(i)else:print(oList)[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]例46importrandomwhile1:s=int(random.randint(1,3))ifs==1:ind="石头"elifs==2:ind="剪子"elifs==3:ind="布"m=input('输入石头、剪子、布,输入"end"结束游戏:')blist=['石头',"剪子","布"]if(mnotinblist)and(m!='end'):print("输入错误,请重新输入!")elif(mnotinblist)and(m=='end'):print("\n游戏退出中...")breakelifm==ind:print("电脑出了:"+ind+",平局!")elif(m=='石头'andind=='剪子')or(m=='剪子'andind=='布')or(m=='布'andind=='石头'):print("电脑出了:"+ind+",你赢了!")elif(m=='石头'andind=='布')or(m=='剪子'andind=='石头')or(m=='布'andind=='剪子'):print("电脑出了:"+ind+",你输了!")猜拳小游戏输入石头、剪子、布,输入"end"结束游戏:石头电脑出了:石头,平局!输入石头、剪子、布,输入"end"结束游戏:石头电脑出了:剪子,你赢了!输入石头、剪子、布,输入"end"结束游戏:例47六、自定义函数中循环的使用
函数可用于程序中出现重复代码,可通过调用函数执行。自定义函数及循环结构有助于将大段程序分解为小段,从而使程序易于理解,维护和调试。函数定义要指定一个函数名,函数的命名规则和变量命名一致,在函数内需要一系列语句放到这个函数里面,当调用这个函数时,就会运行这些语句。使用循环可反复调用函数语句,从而达到简化编程的目的。语法格式:def函数名(形参1,形参2,…):
函数体…foriinrange(n)
…
函数名(实参1,实参2)…
输入一元二次方程:ax2+bx+c=0的系数a,b,c,编写函数输出方程的解。若判别式大于0输出二个实数根,若小于0输出虚数根,若等于0输出一个实数根。importmath
defequation(a,b,c):
q=b*b-4*a*c
ifq>0:
x1=(-b+math.sqrt(q))/(2*a)
x2=(-b-math.sqrt(q))/(2*a)
elifq<0:
x1=complex(-1/(2*a),math.sqrt(abs(q))/(2*a))
x2=complex(-1/(2*a),-math.sqrt(abs(q))/(2*a))
else:
x=-b/(2*a)
ifq>0orq<0:
print('x1=',x1)
print('x2=',x2)
else:
print('x=',x)
例48请输入任意一元二次方程系数:a,b,c=?1,-2,-30x1=6.5677643628300215x2=-4.5677643628300215按回车继续,输入'-1'结束程序请输入任意一元二次方程系数:a,b,c=?1,2,3x1=(-0.5+1.4142135623730951j)x2=(-0.5-1.4142135623730951j)按回车继续,输入'-1'结束程序-1结果:Y=1
while(Y!='-1'):
a,b,c=map(float,input('请输入任意一元二次方程系数:a,b,c=?').split(","))
equation(a,b,c)
#调用函数
Y=input(“\n按回车继续,输入'-1'结束程序\n")
deffactor(num):target=int(num)wan=set()foriinrange(1,num):ifnum%i==0:wan.add(i)wan.add(num/i)returnwanprint("1000以内的完数有:")foriinrange(2,1001):ifi==sum(factor(i))-i:print(i,end=",")
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某汽车制造人事细则
- 电子厂废弃物处理细则
- 长期投资决策课件
- 人教版新课标A选修2-21.5定积分的概念教案
- 鲜嫩的洋葱炖鸡腿 教案-2023-2024学年高一上学期劳动技术
- 《安全知识讲座》课件
- 浙江省温州市平阳县鳌江镇第三中学九年级体育 第42次课 技巧教案
- 2026年高职无人机测绘(操控技术)试题及答案
- 焊工抢救考试题及答案
- 中山保安考试题及答案
- 冀少版八年级上册生物第五单元第一章第三节《芽的发育》教学课件(新教材)
- 2026年共青团入团考试试题附完整答案
- 边坡施工技术施工方案
- 中建-竣工结算策划书编制指南
- 2025年浙江省事业单位统考职测+综应真题及答案
- 《人工智能清扫机器人(车)技术要求》
- 202670周岁以上老年人换长久驾照三力测试题库(附答案)
- 2026年江苏宿迁市中考语文试卷含答案
- 2026-2030中国高纯碲化锌市场深度调查与前景预测分析研究报告
- 2024版骨质疏松症康复治疗指南课件
- 劳动合同2026年标准范本协议
评论
0/150
提交评论