python练习题集11-30

‘’’
例11:题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析:兔子的规律为数列1,1,2,3,5,8,13,21…
‘’’

f1=1
f2=1
for i in range(1,21):
    print('%12ld %12ld' %(f1,f2),end="")
    if(i%3)==0:
        print('')
    f1=f1+f2
    f2=f1+f2

‘’’
例12:判断101-200之间有多少个素数,并输出所有素数
判断素数的方法
‘’’

h=0
leap=1
from math import sqrt
from sys import stdout

for m in range(101,201):
    k=int(sqrt(m+1))
    for i in range(2,k+1):
        if (m%i==0):
            leap=0
            break
    if leap==1:
        print('%-4d'%m)
        h+=1
        if h%10==0:
            print('')
    leap=1
print('The total is %d' % h)

‘’’
例13:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,
其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
‘’’

for n in range(100,1000):
    i=n//100
    j=n//10%10
    k=n%10
    if n==i*i*i+j*j*j+k*k*k:
        print(n)

‘’’
例14:题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
程序分析:
对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
‘’’

def reduceNum(n):
    print('{}='.format(n),end=" ")
    if not isinstance(n,int) or n<=0:
        print('请输入一个正确的数字!')
        exit(0)
    elif n in [1]:
        print('{}'.format(n))
    while n not in [1]:
        for index in range(2,n+1):
            if n%index==0:
                n//=index
                if n==1:
                    print(index)
                else:
                    print('{}*'.format(index),end=" ")
                break
reduceNum(90)
reduceNum(100)

‘’’
例15:题目:利用条件运算符的嵌套来完成此题:
学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
程序分析:程序分析:(a>b) ? a:b 这是条件运算符的基本例子
‘’’

score=int(input('输入分数:\n'))
if score>90:
    grade='A'
elif score>=60:
    grade='B'
else:
    grade='C'

print('%d 属于 %s '%(score,grade))

‘’’
例16:
题目:输出指定格式的日期。
程序分析:使用 datetime 模块。
‘’’

import datetime

if __name__=='__main__':
    #输出今日日期,格式为dd/mm/yyyy.
    print(datetime.date.today().strftime('%d/%m/%Y'))

    #创建日期对象
    miyazakiBirthDate=datetime.date(1941,1,5)

    print(miyazakiBirthDate.strftime('%d/%m/%Y'))

    #日期算数运算
    miyazakiBirthNextDay=miyazakiBirthDate+datetime.timedelta(days=1)

    print(miyazakiBirthNextDay.strftime('%d/%m/%Y'))

    #日期替换
    miyazakiFirstBirthday=miyazakiBirthDate.replace(year=miyazakiBirthDate.year+1)

    print(miyazakiFirstBirthday.strftime('%d/%m/%Y'))

‘’’
例17:输入一行字符,分别统计出英文字母、空格、数字和其他字符的个数
程序分析:利用while或for语句,条件为输入的字符不为‘\n’
‘’’

import string
s=input('请输入一个字符串:\n')
letters=0
space=0
digit=0
others=0
for c in s:
    if c.isalpha():
        letters+=1
    elif c.isspace():
        space+=1
    elif c.isdigit():
        digit+=1
    else:
        others+=1
print('char=%d,space=%d,dight=%d,others=%d' %(letters,space,digit,others))

‘’’
例18:题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
程序分析:关键是计算出每一项的值。
‘’’

from functools import reduce

Tn=0
Sn=[]
n=int(input('n= '))
a=int(input('a= '))
for count in range(n):
    Tn=Tn+a
    a=a*5
    Sn.append(Tn)
    print(Tn)

Sn=reduce(lambda x,y:x+y,Sn)
print("计算和为:",Sn)

‘’’
例19:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3
编程找出100以内的所有完数
‘’’

from sys import stdout
for j in range(2,1001):
    k=[]
    n=-1
    s=j
    for i in range(1,j):
        if  j%i==0:
            n+=1
            s-=i
            k.append(i)

    if s==0:
        print(j)
        for i in range(n):
            stdout.write(str(k[i]))
            stdout.write(' ')
        print(k[n])

‘’’
例20:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时
共经过多少米“第十次反弹多高?
‘’’

tour=[]
height=[]

hei=100.0 #起始高度
tim=10 #次数

for i in range(1,tim+1):
    # 从第2次开始,落地时的距离应该是反弹高度乘以2(弹到最高点再落下)
    if i==1:
        tour.append(hei)
    else:
        tour.append(2*hei)
    hei/=2
    height.append(hei)

print('总高度:tour={0}'.format(sum(tour)))
print('第10次反弹高度:height={0}'.format(height[-1]))

‘’’
例21:猴子吃桃问题:猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
程序分析:采取逆向思维的方法,从后往前推断
‘’’

x2=1
for day in range(9,0,-1):
    x1=(x2+1)*2
    x2=x1
print(x1)

‘’’
例22:两个乒乓球队进行比赛,各出3人。甲队为a,b,c三人,乙队为x,y,z三人。
已抽签决定比赛名单。有人向队员打听比赛的名单。
a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
‘’’

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\t b -- %s\tc--%s' % (chr(i),chr(j),chr(k)))

‘’’
例23:打印菱形图案
*






程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,
利用双重for循环,第一层控制行,第二层控制列
‘’’

from sys import stdout
for i in range(4):
    for j in range(2-i+1):
        stdout.write(' ')
    for k in range(2*i-1):
        stdout.write('*')
    print('')

for i in range(3):
    for j in range(i+1):
        stdout.write(' ')
    for k in range(4-2*i+1):
        stdout.write('*')
    print('')

‘’’
例24:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…
求出这个数列的前20项之和。
‘’’

#方法一
a=2.0
b=1.0
s=0
for n in range(1,21):
    s+=a/b
    t=a
    a=a+b
    b=t
print(s)
#方法二
from functools import reduce
#functools 模块主要是为函数式编程而设计,用于增强函数功能
#reduce函数的作用是将一个序列归纳为一个输出
a=2.0
b=1.0
l=[]
l.append(a/b)
for n in range(1,20):
    b,a=a,a+b
    l.append(a/b)
print(reduce(lambda x,y:x+y,l))
#lambda arguments:expression
#lambda 函数可接受任意数量的参数,但只能有一个表达式

‘’’
例25:求1+2!+3!+…+20!的和。–>把累加变成累乘
‘’’

#方法一
n=0
s=0
t=1
for n in range(1,21):
    t*=n
    s+=t
print('1!+2!+3!+,,,+20!=%d'%s)
#方法二
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)

‘’’
例26:利用递归方法求5!
递归公式:fn=fn_1*4!
‘’’

def fact(j):
    sum=0
    if j==0:
        sum=1
    else:
        sum=j*fact(j-1)
    return sum
print(fact(5))

‘’’
例27:利用递归函数调用方法,将所输入的5个字符,以相反顺序打印出来
‘’’

def output(s,l):
    if l==0:
        return
    print(s[l-1])
    output(s,l-1)

s=input('input a string:')
l=len(s)
output(s,l)

‘’’
例28:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。
问第4个人岁数,他说比第3个人大2岁。
问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。
最后问第一个人,他说是10岁。请问第五个人多大?
‘’’

def age(n):
    if n==1:
        c=10
    else:
        c=age(n-1)+2
    return c
print(age(5))

‘’’
例29:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
学会分解出每一位数
‘’’

#python中/表示浮点数除法,返回浮点数结果,//表示整数除法
x=int(input("请输入一个数:\n"))
a=x//10000
b=x%10000//1000
c=x%1000//100
d=x%100//10
e=x%10

if a!=0:
    print("5位数:",e,d,c,b,a)
elif b!=0:
    print("4位数:",e,d,c,b)
elif c!=0:
    print("3位数:",e,d,c)
elif d!=0:
    print("2位数:",e,d)
else:
    print("1位数:",e)

‘’’
例30:一个5位数,判断它是不是回文数。
即12321是回文数,个位与万位相同,十位与千位相同。
‘’’

a=int(input("请输入一个数字:\n"))
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)

你可能感兴趣的:(python)