要求输出成绩等级A、B、C、D、E,其中90-100分为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E。要求:-用If语句实现;-输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。
参考答案:
whileTrue:content=input("请输入成绩:")ifnotcontent.isdigit():print("您输入的成绩格式错误,请输入一个0-100之间的数字。")continueelifnot0<=int(content)<=100:print("您输入的成绩格式错误,请输入一个0-100之间的数字。")continueelse:breakscore=""ifint(content)<60:score="E"elif60<=int(content)<=69:score="D"elif70<=int(content)<=79:score="C"elif80<=int(content)<=89:score="B"else:score="A"print("您的成绩等级为:%s"%(score,))练习题2预判比赛结果篮球比赛是高分的比赛,领先优势可能很快被反超。作为观众,希望能在球赛即将结束时,就提早知道领先是否不可超越。体育作家BillJames发明了一种算法,用于判断领先是否“安全”。算法描述:
请编写程序实现上述算法的功能,并给出运行结果。
x=range(0,7)y=range(0,51)z=range(0,21)total_list=[]forainx:forbiny:forcinz:total=15*a+2*b+5*cif100==total:msg="洗发水:{0}瓶;\n香皂:{1}块;\n牙刷:{2}支;\n".format(a,b,c)total_list.append(msg)print("一共有%s种组合。"%(len(total_list),))formintotal_list:print(m)练习题4猜数字首先由计算机产生一个[0,100]之间的随机整数,然后由用户猜测所产生的随机数。根据用户猜测的情况给出不同提示:
whileTrue:answer=random.randint(0,100)#生成一个0~100的随机数foriinrange(6,-1,-1):#循环6,5,4,3,2,1,0message="还剩%d次机会"%(i,)try:number=int(input("请输入一个数字:"))#接受一个用户输入的数字exceptValueError:print("输入的不是数字,",message)continueifnum==answer:#如果大了,提示用户大了并返回while重新开始print("恭喜猜中!!!")breakelifnum 要求:-利用递归函数编程实现。 deff(n):ifn==8:return2else:sum=f(n+1)*2+2returnsumprint('一共有{}只鸭子'.format(f(1)))练习题6从键盘输入一个1~7的数字,格式化输出对应数字的星期字符串名称。如:输入3,返回“您输入的是星期三”。 num=int(input("请输入1-7:"))num_list=["","一","二","三","四","五","六","日"]print("您输入的是星期{}".format(num_list[num]))练习题7数字密码编程程序,从键盘任意输入1个4位数,将该数字中的每位数与7相乘,然后取乘积结果的个位数对该数字进行替换,最后得到1个新的4位数。 v=input("请输入一个四位数:")v2=""foriinv:v1=int(i)*7v2+=str(v1%10)print(v2)练习题8九九乘法表99乘法表 forainrange(1,10):forbinrange(1,a+1):print("%s*%s=%s\t"%(b,a,b*a,),end="")print()练习题9字符查询输入一个字符串str,输出第m个只出现过n次的字符 deffind_out(s,n,c):lis=[]foriins:count=content.count(i,0,len(content))ifcount==c:lis.append(i)returnlis[n-1]content=input("请输入一段字符串:")num=int(input("第m个字符,m:"))counts=int(input("出现过n次,n:"))print("第{}个出现过{}次的字符是:".format(num,counts),find_out(content,num,counts))练习题10判断奇偶数给定一个数a,判断一个数字是奇数或偶数 defodd_or_even(num):whileTrue:try:#判断输入是否为整数number=int(num)breakexceptValueError:#不是纯数字需要重新输入print("输入的不是整数!")continueifnumber%2==0:return'偶数'else:return'奇数'print(odd_or_even(input("请输入一个数字:")))练习题11字符串去重排列将字符串s=“ajldjlajfdljfddd”,去重并从小到大排序输出”adfjl”。 s="ajldjlajfdljfddd"s_set=set()#集合自带去重功能,所以只要for循环字符串s,并添加到集合中,就可以自动去重。foriins:s_set.add(i)s_lis=sorted(list(s_set))#使用sorted方法,对字母进行排序result="".join(s_lis)#sorted方法返回的是一个列表,这边将列表数据转换成字符串print(result)练习题12打印菱形打印如下内容: *************************参考答案: foriinrange(-3,4):s=2*(4-abs(i))-1print(""*abs(i),"*"*s)练习题13判断几位数和逆序打印给一个不多于5位的正整数(如a=12346)求它是几位数和逆序打印出各位数字。 defnum(n):print("您输入的是%s位数。"%(len(n)))print(n[::-1])num(input("请输入一个不多于5位的正整数:"))练习题14水仙花数如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153=1^3+5^3+3^3,因此153就是一个水仙花数。那么如何求1000以内的水仙花数(3位数)。 fornuminrange(100,1000):hun=num//100#取百位ten=(num-hun*100)//10#取十位one=(num-hun*100-ten*10)#取个位#hun=int(str(num)[0])#取百位,先将数字转换为字符串,再通过索引取值,再转换为数字#ten=int(str(num)[1])#取十位,先将数字转换为字符串,再通过索引取值,再转换为数字#one=int(str(num)[2])#取个位,先将数字转换为字符串,再通过索引取值,再转换为数字d=hun**3+ten**3+one**3ifd==num:print(str(num),"是水仙花数")练习题15求质数求10000以内的所有质数 prime_list=[]#创建一个空列表用于接收发现的质数。foriinrange(2,10000):#循环2~9999forainrange(2,i):#循环2~i-1b=i%aifb==0:#如果i能被除1和i本身之外的一个正整数整除,则i不是质数,退出本次for循环breakelse:#这个else是for语句的,如果整个for循环过程,b都不等于0,则执行else,否则不执行#print("%s是质数。"%(i,))prime_list.append(i)print(prime_list)#打印所有质数列表print(len(prime_list))#打印质数数量""" 计算1-2+3-4+5-…-100的值。 total=0foriinrange(1,101):ifi%2==0:#i如果是偶数,total=total-itotal-=ielse:total+=i#i如果是奇数,total=total+iprint(total)练习题17立方和现有计算公式1^3+2^3+3^3+4^3+…….+n^3,如何实现:当输入n=5时,输出225(对应的公式:1^3+2^3+3^3+4^3+5^3=225)。 n=int(input("输入一个数字:"))total=0foriinrange(1,(n+1)):total+=i**3print(total)练习题18对称数组例如[1,2,0,2,1],[1,2,3,3,2,1],这样的数组都是对称数组。判断,是对称数组打印True,不是打印False。 deflist_symmetry(l):ifl==l[::-1]:#reverse和[::-1]的区别是,前者改变列表本身,后者不改变列表本身,生成一个反转后的新列表returnTrueelse:returnFalseprint(list_symmetry(['a','b','d','d','a']))print(list_symmetry(['a','b','c','b','a']))练习题19取最大值取出列表L1=[1,2,3,11,2,5,3,2,5,33,88]中最大的三个值。 l1=[1,2,3,11,2,5,3,2,5,33,88]l1.sort()#列表从小到大排序print(l1[-3:])#使用切片取列表最后三位练习题20数字组合有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? #方法一l1=[1,2,3,4]l2=[]forxinl1:#从列表中取值,作为百位数foryinl1:ify==x:#从列表中取值,如果和百位数重复,重新取值,不重复,作为十位数。continueforzinl1:ifz!=xandz!=y:#从列表中取值,如果与百位和十位不重复,作为个位数。result=x*100+y*10+zl2.append(result)print(len(l2),"种")print(l2)#方法二简便方法:用itertools中的permutations即可。importitertools#网上看到的别人的解法,对于itertools不了解,粘贴一下,以供参考。count=0l1=[1,2,3,4]foriinitertools.permutations(l1,3):print(i)count+=1print(count)练习题21计算奖金题目:企业发放的奖金根据利润提成。 从键盘输入当月利润I,求应发放奖金总数? #我的方法profit=int(input("利润金额:"))ifprofit<=100000:bonus=profit*0.1elif100000 思路: x=0whileTrue:y=0x+=1whileTrue:y+=1ify**2-x**2>=168:breakify**2-x**2==168andx**2>100:z=x**2-100print("这个整数是:{}".format(z,))ify-x==1:break练习题23查询第几天题目:输入某年某月某日,判断这一天是这一年的第几天? 思路:闰年判断方法,四年一闰,百年不闰,四百年再闰. #例如:2022-9-21date=input("请输入日期,格式【XXXX-XX-XX】:")date_list=s1.split("-")#以“-”为分隔符,将字符串分割成列表。day_list=[31,31,30,31,30,31,31,30,31,30,31]#创建一个缺省2月份天数的列表year=int(date_list[0])ifyear%400==0oryear%100!=0andyear%4==0:#判断年份是否为闰年day_list.insert(1,29)#如果是,在列表索引1的位置插入29else:day_list.insert(1,28)#不是,插入28days=int(date_list[2])fordinrange(int(date_list[1])-1):#循环月数-1,并相加,即,该月份之前的所有天数之和days+=day_list[d]#再加上当月的天数print(days)练习题24十秒倒计时题目:十秒倒计时。程序分析:使用time模块的sleep()函数。ps:熟悉time模块 importtimeforiinrange(60):print(time.strftime('%Y-%m-%d%H:%M:%S',time.localtime(time.time())))time.sleep(1)练习题26养兔子题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 思路分析:一月兔二月兔成年兔一月200二月020三月202四月222五月424六月646七月10610八月161016九月261626综上分析可知,①二月兔的数量,就是上个月一月兔的数量;②成年兔的数量,就是上个月成年兔的数量+二月兔的数量;③一月兔的数量,就是本月成年兔的数量;参考答案: month_total=int(input("养殖多少个月:"))m1=2m2=0m_end=0foriinrange(month_total):rabbit_total=m1+m2+m_endprint("-"*20)#分隔符print("第%d个月,一共%d只兔子"%(i+1,rabbit_total))print("其中一月兔数量:%d只"%(m1,))print("其中二月兔数量:%d只"%(m2,))print("其中成年兔数量:%d只"%(m_end,))m1,m2,m_end=m_end+m2,m1,m_end+m2#根据思路分析得出练习题27养兔子——扩展题上一题扩展,假设兔子寿命只有6个月,养殖一年,一共还剩多少兔子,一月兔、二月兔、成年兔数量各多少 思路分析:1.前6个月数据不变2.第七个月开始,成年兔需要减去6个月之前的一月兔数量3.一月兔还是等于成年兔数量4.二月兔还是等于上个月一月兔数量需要建立一个列表,记录每个月一月兔的数量,以便于第七个月开始可以调用参考答案: month_total=12m1=2m2=0m_end=0m1_list=[0,0,0,0,0]foriinrange(month_total):rabbit_total=m1+m2+m_endm1_list.append(m1)print("-"*20)print("第%d个月,一共%d只兔子"%(i+1,rabbit_total))print("其中一月兔数量:%d只"%(m1,))print("其中二月兔数量:%d只"%(m2,))print("其中成年兔数量:%d只"%(m_end,))m1,m2,m_end=m_end+m2-m1_list[i],m1,m_end+m2-m1_list[i]print("下月死亡成年兔:%d只"%(m1_list[i]))练习题28找出101-200之间的质数题目:判断101-200之间有多少个素数,并输出所有素数。思路,与练习题15一样 prime_list=[]foriinrange(101,201):forainrange(2,i):b=i%aifb==0:breakelse:print("%s是质数。"%(i,))prime_list.append(i)print("101到200之间质数的数量为:",len(prime_list))练习题29猴子分桃子题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子,最后还剩多少个? 思路分析a=5*b+1#第一只猴子拿走b个桃子4*b=5*c+1#第二只猴子拿走c个桃子4*c=5*d+1#第三只猴子拿走d个桃子4*d=5*e+1#第四只猴子拿走e个桃子4*e=5*f+1#第五只猴子拿走f个桃子参考答案: 分析:①加5,然后用和除以10的余数,其实就是加5后,新数字的个位数。②一四交换,二三交换,其实就是反转。