首页 > 代码库 > python练习题11-20

python练习题11-20

11、有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

12、判断101-200之间有多少个素数,并输出所有素数。

13、打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

14、将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

15、利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

16、输出指定格式的日期。

17、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

18、求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。

19、一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

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

 

11、有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

技术分享
‘‘‘
可分两部分,分别是1、2月的小兔子以及3月以上的成年兔子
‘‘‘

rabbits = {1st:0,2nd:0,adult:1}  # 单位:对

total = []  # 第n个月数量
for n in range(1,22):
    if n < 3:
        pass
    else:
        rabbits[adult] += rabbits[2nd]  # 每个月都有2月兔子成长为成年兔子
        rabbits[2nd] = rabbits[1st]  # 1月兔子成长为2月兔子
        rabbits[1st] = rabbits[adult]  # 成年兔子生出1月兔子
    total.append(sum(rabbits.values()))

print(total)
View Code

 

12、判断101-200之间有多少个素数,并输出所有素数。

技术分享
L = []
for x in range(100,201):
    flag = True  # 设定状态位
    # for n in range(2,int(math.sqrt(x))+1):
    for n in range(2,int(x ** (1/2))+1):
        if x % n == 0:  # 轮询是否有约数
            flag = False
    if flag == True:
        L.append(x)

print(L)
print(len(L))
View Code

 

13、打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

技术分享
import math

num = range(100,1000)

for x in num:
    a = math.pow(x//100,3)  # 百位数
    b = math.pow(x%100//10,3)  # 十位数
    c = math.pow(x%10,3)  # 个位数
    if a + b + c == x:
        print(水仙花数:,x)
View Code

 

14、将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

技术分享
x = 100

def f(x):
    l = []
    while True:
        for n in range(2,x):
            if x % n == 0:  # 最小约数
                l.append(str(n))
                x = int(x / n)  # 除约数后,重新循环
                break
        if n == x - 1:  # 所有数据轮询后,输出结果
            l.append(str(x))
            return l
l = f(x)
print(l)
print({}={}.format(str(x),*.join(l)))
View Code

 

15、利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

技术分享
a = 70

print(A if a >= 90 else (C if a < 60 else B))
View Code

 

16、输出指定格式的日期。

技术分享
import datetime

print(datetime.date(1941, 1, 5).timetuple())
print(datetime.date(1941, 1, 5).timetuple()[0])
print(datetime.datetime(2011,12,3).strftime(%Y %m %d))
print(datetime.date.today().strftime(%d/%m/%Y))


import time
print(time.asctime())
print(time.localtime(time.time()))
a = time.localtime(time.time())
print(list(a))
print(a[1])
# print(time.strftime(‘%Y年%m月%d日‘,a))
print(time.strftime(%Y %m %d,a))
print(time.strptime(2017-4-3 12,%Y-%m-%d %H))
View Code

 

17、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

技术分享
s = 123123fsdfsdfsd !*@#

字母 = [x for x in s if x.isalpha()]
数字 = [x for x in s if x.isdigit()]
空格 = [x for x in s if x.isspace()]
其他 = [x for x in s if x not in 字母+数字+空格]
print(len(字母))
print(len(数字))
print(len(空格))
print(len(其他))
View Code

 

18、求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。

技术分享
# 方法一:
n = 10
s = 3
l = [int(str(s)*i) for i in range(1,n+1)]
print(sum(l))


n = 10
s = 3
a = map(lambda i:int(str(s)*i),range(1,n+1))
print(sum(a))

# 方法二
n = 10

a = 3
l = []
s1 = 0
SUM = 0
for x in range(n):
    s1 += a*10**x
    SUM += s1
    l.append(s1)

print(l)
print(sum(l))
print(SUM)
View Code

 

19、一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

技术分享
def sum_test(n):
    s = 0
    for x in range(1,n):
        if n%x == 0:
            s += x
    if s == n:  # 若是完数,则输出该值
        return n

a = [i for i in range(1,1001) if sum_test(i)]
print(a)
View Code

 

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

技术分享
def f(x):
    h = []
    for i in range(x):
            h.append(100 * (1/2)**i)
    distance = h[0] + 2 * sum(h[1:])
    h_ = 100 * (1/2)**(i+1)
    print(第{}次落地时,共经{}米.format(x,distance))
    print(第{}次反弹的高度是{}米.format(x,h_))

for x in range(11):
    f(x+1)
View Code

 

python练习题11-20