注意:我用的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 差不多,具体可参考http://www.zzvips.com/article/71281.html
方法一:只用循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# -*- coding: UTF-8 -*-
while True :
n = input ( "请输入一个数:" )
#这里有逗号是为了保证它输出后不自动换行,下同
print '{} = ' . format (n),
#判断你输入的是不是正确格式
if not isinstance (n, int ) or n < = 0 :
print '请输入一个正确的数字 !'
#如果你是输入的是 1,那只输出 1
if n in [ 1 ] :
print '{}' . format (n)
while n > = 2 :
for i in range ( 2 ,n + 1 ):
if n % i = = 0 :
n / = i #n 等于 n/i
if n = = 1 :
print i ,
else : # index 一定是素数
print '{} *' . format (i),
break
print #换行咯
|
方法二:定义函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# -*- coding: UTF-8 -*-
def reduceNum(n):
print '{} = ' . format (n),
if not isinstance (n, int ) or n < = 0 :
print '请输入一个正确的数字 !'
exit( 0 )
elif n in [ 1 ] :
print '{}' . format (n)
while n not in [ 1 ] : # 循环保证递归
for i in range ( 2 , n + 1 ) :
if n % i = = 0 :
n / = i # n 等于 n/i
if n = = 1 :
print i
else : # i 一定是素数
print '{} *' . format (i),
break
reduceNum( 100 )
reduceNum( 9 )
|
输出:
100 = 2 * 2 * 5 * 5
9 = 3 * 3
方法三:用列表 append 函数,这里只是用列表的形式输出了所有x的因子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# -*- coding: UTF-8 -*-
while True :
x = input ( "pls input a number:" )
ret = []
while x > 1 :
for v in range ( 2 ,x + 1 ):
if x % v = = 0 :
ret.append(v)
x / = v
break
print ret
输出:
pls input a number: 9
[ 3 , 3 ]
|
说明:其实两种方法大同小异,没什么区别。
22.题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
程序分析:关键是计算出每一项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# -*- coding: UTF-8 -*-
Tn = 0
Sn = [] #用来存储数字个数
n = int ( raw_input ( '输入你想要相加的数字个数 n = :' )) #控制你要相加的次数
a = int ( raw_input ( '输入数字 a = :' )) #真正要加的数字
for count in range (n):
Tn = Tn + a
a = a * 10
Sn.append(Tn) #每加一个数就放在Sn列表中
print Tn
#lambda这个函数比较强大,具体用法可以看下资料
Sn = reduce ( lambda x,y : x + y,Sn)
print Sn
|
输入你想要相加的数字个数 n = :5
输入数字 a = :6
6
66
666
6666
66666
74070
用到的函数:
1.python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。
具体可参考http://www.zzvips.com/article/124257.html
2.lambda函数,看连接http://www.zzvips.com/article/124258.html
23.题目:一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。
程序分析:请参照程序Python 练习实例14。只要在后面加上判断条件就可以了,注意,要在输出因子的时候加上1,注意看题,1是任何数的因子,所以不能漏掉
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# -*- coding: UTF-8 -*-
import random
import time
while True :
x = random.randint( 1 , 1000 )
#因为后面求质数要修改x的值,所以先把x保存起来备用
s = x
factors = [ 1 ] #1是任何数的因子
while x > 1 :
#上限取值可以是x,即因子也可以是x本身,这个大家都懂得
for v in range ( 2 ,x + 1 ):
if x % v = = 0 :
factors.append(v)
#找到了当前的最小因子,重置继续找下一符合条件的最小因子
x / = v
#由于break是跳出当前的循环,所以这里的break是跳出for循环
break
print "所有因子是 %s,所以" % (factors),
if sum (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码来做哦!
1
2
3
4
5
6
7
8
9
|
# -*- coding: UTF-8 -*-
for i in range ( ord ( 'x' ), ord ( 'z' ) + 1 ):
for j in range ( ord ( 'x' ), ord ( 'z' ) + 1 ):
if i ! = j:
for k in range ( ord ( 'x' ), ord ( 'z' ) + 1 ):
if (i ! = k) and (j ! = k):
if (i ! = ord ( 'x' )) and (k ! = ord ( 'x' )) and (k ! = ord ( 'z' )):
print 'order is a -- %s b -- %s c--%s' % ( chr (i), chr (j), chr (k))
|
25.题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
程序分析:请抓住分子与分母的变化规律。可以看出,分母是斐波那契数列哦~
方法一:第一个分数的分子分母之和是第二个数的分子。
1
2
3
4
5
6
7
8
9
10
11
|
# -*- coding: UTF-8 -*-
a = 2.0 #第一个数的分母
b = 1.0 #第一个数的分子
s = 0 #前20项的和
for n in range ( 1 , 21 ):
s + = a / b
t = a #先把分子保存到t
a = a + b #分子是前一个分数的分子分母之和
b = t #分子分母交换
print s
|
方法二:
1
2
3
4
5
6
7
8
9
|
# -*- coding: UTF-8 -*-
a = 2.0
b = 1.0
s = 0.0
for n in range ( 1 , 21 ):
s + = a / b
b,a = a , a + b
print s
|
方法三:
1
2
3
4
5
6
7
8
9
|
# -*- coding: UTF-8 -*-
a = 2.0
b = 1.0
l = []
for n in range ( 1 , 21 ):
b,a = a,a + b
l.append(a / b)
print reduce ( lambda x,y: x + y,l)
|
26.题目:求1+2!+3!+…+20!的和。
程序分析:此程序只是把累加变成了累乘。想一想阶乘怎么算的?n!=n×(n-1)×(n-2)×(n-3)×…×1,所以只需要一个遍历,把n以内的数字相乘后,再加起来即可。
方法一:
1
2
3
4
5
6
7
8
9
|
# -*- coding: UTF-8 -*-
n = 0
s = 0
t = 1
for n in range ( 1 , 21 ):
t * = n #这里t就是20以内每个数的阶乘
s + = t #把每次得到的阶乘值加到s
print '1! + 2! + 3! + ... + 20! = %d' % s
|
方法三:这里用定义函数的方法,使用sum函数。
1
2
3
4
5
6
7
8
9
10
11
12
|
# -*- coding: UTF-8 -*-
s = 0
l = range ( 1 , 21 )
def op(x):
r = 1
for i in range ( 1 ,x + 1 ):
r * = i
return r
s = sum ( map (op,l))
print '1! + 2! + 3! + ... + 20! = %d' % s
|
输出:1! + 2! + 3! + ... + 20! = 2561327494111820313
这里补充一下map()函数的用法:
很简单,第一个参数接收一个函数名,第二个参数接收一个可迭代对象
1
2
3
4
5
6
7
8
9
10
11
12
|
# -*- coding: UTF-8 -*-
ls = [ 1 , 2 , 3 ]
rs = map ( str , ls)
#打印结果 ['1', '2', '3']
lt = [ 1 , 2 , 3 , 4 , 5 , 6 ]
def add(num):
return num + 1
rs = map (add, lt)
print rs
#打印结果[2,3,4,5,6,7]
|
27.题目:利用递归方法求5!。
程序分析:递归公式:fn=fn_1*4!递归的方法就是自己调用自己。
1
2
3
4
5
6
7
8
9
|
# -*- coding: UTF-8 -*-
def jiecheng(n):
if n < = 1 :
return 1
else :
return n * jiecheng(n - 1 )
print jiecheng( 5 )
输出: 120
|
28.题目:将所输入的5个字符,以相反顺序打印出来。
方法一:利用递归函数调用方式
1
2
3
4
5
6
7
8
9
10
11
|
# -*- coding: UTF-8 -*-
def output(s,l):
if l = = 0 :
return
print (s[l - 1 ])
output(s,l - 1 )
s = raw_input ( 'Input a string:' )
l = len (s)
output(s,l)
|
输出:Input a string:1234
4
3
2
1
方法二:用reverse函数
1
2
3
4
5
6
7
8
9
10
11
|
# -*- coding: UTF-8 -*-
a = [ 1 , 2 , 3 , 4 , 5 ]
a.reverse()
print a
或者:
# -*- coding: UTF-8 -*-
s = list ( raw_input ( 'Input a string:' ))
s.reverse()
print s
|
28.题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
方法一:这个很简单吧,就是每次循环都加2,循环4次就好了啊!
1
2
3
4
5
|
# -*- coding: UTF-8 -*-
x = 10
for i in range ( 1 , 5 ):
x = x + 2
print x
|
方法二:定义函数的方法
1
2
3
4
5
6
7
8
|
# -*- coding: UTF-8 -*-
def age(n):
if n = = 1 :
x = 10
else :
x = age(n - 1 ) + 2
return x
print age( 5 )
|
29.题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
程序分析:将这个五位数从中间分开,根据对称性去切,然后比较是否相等。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# -*- coding: UTF-8 -*-
a = int ( raw_input ( "请输入一个数字:" ))
x = str (a)
flag = True
for i in range ( len (x) / 2 ):
if x[i] ! = x[ - i - 1 ]: #如果不相等,直接跳出循环,直接判断不是回文数
flag = False
break
if flag:
print "%d 是一个回文数!" % a
else :
print "%d 不是一个回文数!" % a
|
输出:
请输入一个数字:
15651
15651 是一个回文数!
30.题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。。哇,这个题应该好简单啊~~先看一下星期的单词都有哪些“Monday Tuesday Wednesday Thursday Friday Saturday Sunday”,所有只有“T”和“S”要判断第二个字母。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# -*- coding: UTF-8 -*-
letter = raw_input ( "please input:" )
#while letter != 'Y':
if letter = = 'S' :
print ( 'please input second letter:' )
letter = raw_input ( "please input:" )
if letter = = 'a' :
print ( 'Saturday' )
elif letter = = 'u' :
print ( 'Sunday' )
else :
print ( 'data error' )
elif letter = = 'F' :
print ( 'Friday' )
elif letter = = 'M' :
print ( 'Monday' )
elif letter = = 'T' :
print ( 'please input second letter' )
letter = raw_input ( "please input:" )
if letter = = 'u' :
print ( 'Tuesday' )
elif letter = = 'h' :
print ( 'Thursday' )
else :
print ( 'data error' )
elif letter = = 'W' :
print ( 'Wednesday' )
else :
print ( 'data error' )
|
这篇文章就介绍到这了,后面服务器之家小编将继续为大家分享更多的关于python的一些实例资料。
原文链接:http://blog.csdn.net/MTbaby/article/details/53033933