python简单实例训练(21~30)
注意:我用的python2.7,大家如果用Python3.0以上的版本,请记得在print()函数哦!如果因为版本问题评论的,不做回复哦!!
21.题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n!=k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
注意:要知道format这个函数,其实就是格式化,与print差不多,具体可参考https://www.nhooo.com/article/63672.htm
方法一:只用循环
#-*-coding:UTF-8-*- whileTrue: n=input("请输入一个数:") #这里有逗号是为了保证它输出后不自动换行,下同 print'{}='.format(n), #判断你输入的是不是正确格式 ifnotisinstance(n,int)orn<=0: print'请输入一个正确的数字!' #如果你是输入的是1,那只输出1 ifnin[1]: print'{}'.format(n) whilen>=2: foriinrange(2,n+1): ifn%i==0: n/=i#n等于n/i ifn==1: printi, else:#index一定是素数 print'{}*'.format(i), break print#换行咯
方法二:定义函数
#-*-coding:UTF-8-*- defreduceNum(n): print'{}='.format(n), ifnotisinstance(n,int)orn<=0: print'请输入一个正确的数字!' exit(0) elifnin[1]: print'{}'.format(n) whilennotin[1]:#循环保证递归 foriinrange(2,n+1): ifn%i==0: n/=i#n等于n/i ifn==1: printi else:#i一定是素数 print'{}*'.format(i), break reduceNum(100) reduceNum(9)
输出:
100=2*2*5*5
9=3*3
方法三:用列表append函数,这里只是用列表的形式输出了所有x的因子
#-*-coding:UTF-8-*- whileTrue: x=input("plsinputanumber:") ret=[] whilex>1: forvinrange(2,x+1): ifx%v==0: ret.append(v) x/=v break printret 输出: plsinputanumber:9 [3,3]
说明:其实两种方法大同小异,没什么区别。
22.题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
程序分析:关键是计算出每一项
#-*-coding:UTF-8-*- Tn=0 Sn=[]#用来存储数字个数 n=int(raw_input('输入你想要相加的数字个数n=:'))#控制你要相加的次数 a=int(raw_input('输入数字a=:'))#真正要加的数字 forcountinrange(n): Tn=Tn+a a=a*10 Sn.append(Tn)#每加一个数就放在Sn列表中 printTn #lambda这个函数比较强大,具体用法可以看下资料 Sn=reduce(lambdax,y:x+y,Sn) printSn
输入你想要相加的数字个数n=:5
输入数字a=:6
6
66
666
6666
66666
74070
用到的函数:
1.python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。
具体可参考https://www.nhooo.com/article/128310.htm
2.lambda函数,看连接https://www.nhooo.com/article/128311.htm
23.题目:一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。
程序分析:请参照程序Python练习实例14。只要在后面加上判断条件就可以了,注意,要在输出因子的时候加上1,注意看题,1是任何数的因子,所以不能漏掉
#-*-coding:UTF-8-*- importrandom importtime whileTrue: x=random.randint(1,1000) #因为后面求质数要修改x的值,所以先把x保存起来备用 s=x factors=[1]#1是任何数的因子 whilex>1: #上限取值可以是x,即因子也可以是x本身,这个大家都懂得 forvinrange(2,x+1): ifx%v==0: factors.append(v) #找到了当前的最小因子,重置继续找下一符合条件的最小因子 x/=v #由于break是跳出当前的循环,所以这里的break是跳出for循环 break print"所有因子是%s,所以"%(factors), ifsum(factors)==s:#这里就是判断函数了 print"%d是完数"%(s) else: print"%d不是完数"%(s) time.sleep(1)#为防止程序卡顿,我睡一秒输出一个
输出:
所有因子是[1,2,2,2,31],所以:248不是完数
所有因子是[1,2,2,2,73],所以:584不是完数
所有因子是[1,823],所以:823不是完数
所有因子是[1,281],所以:281不是完数
所有因子是[1,467],所以:467不是完数
所有因子是[1,2,359],所以:718不是完数
所有因子是[1,2,7,47],所以:658不是完数
所有因子是[1,751],所以:751不是完数
所有因子是[1,3,71],所以:213不是完数
24.题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
程序分析:用数学的角度很好理解是吧,但是这里要把字母转化成ASCII码来做哦!
#-*-coding:UTF-8-*- foriinrange(ord('x'),ord('z')+1): forjinrange(ord('x'),ord('z')+1): ifi!=j: forkinrange(ord('x'),ord('z')+1): if(i!=k)and(j!=k): if(i!=ord('x'))and(k!=ord('x'))and(k!=ord('z')): print'orderisa--%s\tb--%s\tc--%s'%(chr(i),chr(j),chr(k))
25.题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
程序分析:请抓住分子与分母的变化规律。可以看出,分母是斐波那契数列哦~
方法一:第一个分数的分子分母之和是第二个数的分子。
#-*-coding:UTF-8-*- a=2.0#第一个数的分母 b=1.0#第一个数的分子 s=0#前20项的和 forninrange(1,21): s+=a/b t=a#先把分子保存到t a=a+b#分子是前一个分数的分子分母之和 b=t#分子分母交换 prints
方法二:
#-*-coding:UTF-8-*- a=2.0 b=1.0 s=0.0 forninrange(1,21): s+=a/b b,a=a,a+b prints
方法三:
#-*-coding:UTF-8-*- a=2.0 b=1.0 l=[] forninrange(1,21): b,a=a,a+b l.append(a/b) printreduce(lambdax,y:x+y,l)
26.题目:求1+2!+3!+…+20!的和。
程序分析:此程序只是把累加变成了累乘。想一想阶乘怎么算的?n!=n×(n-1)×(n-2)×(n-3)×…×1,所以只需要一个遍历,把n以内的数字相乘后,再加起来即可。
方法一:
#-*-coding:UTF-8-*- n=0 s=0 t=1 forninrange(1,21): t*=n#这里t就是20以内每个数的阶乘 s+=t#把每次得到的阶乘值加到s print'1!+2!+3!+...+20!=%d'%s
方法三:这里用定义函数的方法,使用sum函数。
#-*-coding:UTF-8-*- s=0 l=range(1,21) defop(x): r=1 foriinrange(1,x+1): r*=i returnr s=sum(map(op,l)) print'1!+2!+3!+...+20!=%d'%s
输出:1!+2!+3!+...+20!=2561327494111820313
这里补充一下map()函数的用法:
很简单,第一个参数接收一个函数名,第二个参数接收一个可迭代对象
#-*-coding:UTF-8-*- ls=[1,2,3] rs=map(str,ls) #打印结果['1','2','3'] lt=[1,2,3,4,5,6] defadd(num): returnnum+1 rs=map(add,lt) printrs #打印结果[2,3,4,5,6,7]
27.题目:利用递归方法求5!。
程序分析:递归公式:fn=fn_1*4!递归的方法就是自己调用自己。
#-*-coding:UTF-8-*- defjiecheng(n): ifn<=1: return1 else: returnn*jiecheng(n-1) printjiecheng(5) 输出:120
28.题目:将所输入的5个字符,以相反顺序打印出来。
方法一:利用递归函数调用方式
#-*-coding:UTF-8-*- defoutput(s,l): ifl==0: return print(s[l-1]) output(s,l-1) s=raw_input('Inputastring:') l=len(s) output(s,l)
输出:Inputastring:1234
4
3
2
1
方法二:用reverse函数
#-*-coding:UTF-8-*- a=[1,2,3,4,5] a.reverse() printa 或者: #-*-coding:UTF-8-*- s=list(raw_input('Inputastring:')) s.reverse() prints
28.题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
方法一:这个很简单吧,就是每次循环都加2,循环4次就好了啊!
#-*-coding:UTF-8-*- x=10 foriinrange(1,5): x=x+2 printx
方法二:定义函数的方法
#-*-coding:UTF-8-*- defage(n): ifn==1: x=10 else: x=age(n-1)+2 returnx printage(5)
29.题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
程序分析:将这个五位数从中间分开,根据对称性去切,然后比较是否相等。
#-*-coding:UTF-8-*- a=int(raw_input("请输入一个数字:")) x=str(a) flag=True foriinrange(len(x)/2): ifx[i]!=x[-i-1]:#如果不相等,直接跳出循环,直接判断不是回文数 flag=False break ifflag: print"%d是一个回文数!"%a else: print"%d不是一个回文数!"%a
输出:
请输入一个数字:
15651
15651是一个回文数!
30.题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。。哇,这个题应该好简单啊~~先看一下星期的单词都有哪些“MondayTuesdayWednesdayThursdayFridaySaturdaySunday”,所有只有“T”和“S”要判断第二个字母。
#-*-coding:UTF-8-*- letter=raw_input("pleaseinput:") #whileletter!='Y': ifletter=='S': print('pleaseinputsecondletter:') letter=raw_input("pleaseinput:") ifletter=='a': print('Saturday') elifletter=='u': print('Sunday') else: print('dataerror') elifletter=='F': print('Friday') elifletter=='M': print('Monday') elifletter=='T': print('pleaseinputsecondletter') letter=raw_input("pleaseinput:") ifletter=='u': print('Tuesday') elifletter=='h': print('Thursday') else: print('dataerror') elifletter=='W': print('Wednesday') else: print('dataerror')
这篇文章就介绍到这了,后面毛票票小编将继续为大家分享更多的关于python的一些实例资料。