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)

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))

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)

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)))

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

a = 70

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

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‘))

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(其他))

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)

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)

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)

时间: 2024-10-20 09:49:26

python练习题11-20的相关文章

Python练习题 004:判断某日期是该年的第几天

[Python练习题 004]输入某年某月某日,判断这一天是这一年的第几天? ---------------------------------------------- 这题竟然写了 28 行代码!而且还不包含输入数据的验证(只能假设输入的日期是严格按照格式来的).但我坚信,一定有更简洁的方法,比如 Python 对日期的处理. 不过反正还没学到这些知识,现在只能用傻大粗的办法解决.等学到高级的办法再来更新吧~~~ 思路:先判断是否为闰年,这关系到 2 月份的天数.之后再根据月份值把前几个月的

Python练习题8(替换相同的字符串并输出):输入两个字母串,将两个字母串都包含的字母用&#39;_&#39;替换后,输出两个字母串的剩余部分 (不能为空串,区别大小写,只能包含字母)

方法一:检查输入是否为空串,循环字母串,相同的则替换,然后再用replace()方法去除,输出想要的结果 1 def str_replace(messages1,messages2): 2 if messages1.strip() == '' or messages2.strip() == '' : #检验输入不能为空串 3 tips = "输入字母串有空串,不合法" 4 return tips 5 6 if not messages1.encode('UTF-8').strip().

Python练习题 015:一颗自由落地的球

[Python练习题 015] 一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下.求它在第10次落地时,共经过多少米?第10次反弹多高? ---------------------------------------------------------- 这题其实都可以笔算出来,因为也就是落地10次.看网上给出的结果也是五花八门,也不知道自己算的对不对,请大神们赐教. 我的思路是:除了第1次从100米高度落下,其余的9次都经历了"反弹-落地"的过程,每个过程来回走过的长

Python练习题 002:奖金计算

[Python练习题 002]企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%:20万到40万之间时,高于20万元的部分,可提成5%:40万到60万之间时高于40万元的部分,可提成3%:60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 好吧,学渣如我,能想到的就是老老

Python练习题4(列表去重):[5,3,4,&#39;ok&#39;,4,3,&#39;abc&#39;,8,52,&#39;ok&#39;]去除列表中重复内容 方法一:使用set 方法二:不使用set,自己写方法

方法一:利用集合去重 1 list1 = [5,3,4,'ok',4,3,'abc',8,52,'ok'] 2 list1=list(set(list1)) 3 print(list1) 方法二:此方法略微冗余,先判断元素是否重复,再将重复元素提取并保存到新列表中,再for 新建的列表元素,删除原列表 1 def list_dup(ls): 2 list2 = [] 3 length = len(ls) #获取列表元素个数 4 for i in range(0,length-1): 5 for

Python练习题 048:Project Euler 021:10000以内所有亲和数之和

本题来自 Project Euler 第21题:https://projecteuler.net/problem=21 ''' Project Euler: Problem 21: Amicable numbers Let d(n) be defined as the sum of proper divisors of n (numbers less than n which divide evenly into n). If d(a) = b and d(b) = a, where a ≠ b

Python练习题 024:求位数及逆序打印

[Python练习题 024] 给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. ---------------------------------------------- 这题如果不用递归,实在太简单了!!!代码上: str = input('请输入一个不多于5位的正整数:') print('这个数字是%s位数,逆序为%s.' % (len(str), str[::-1])) 输出结果如下: 请输入一个不多于5位的正整数:45931这个数字是5位数,逆序为13954

python练习题:循环打印嵌套列表

好久没写博文了,添加一个练习题,选自<head_first_python>~~ python列表:以中括号开始和结束"[]":列表项以逗号","分隔开,使用赋值操作符"="赋予一个标识符.如: movies=["the holy",1975,"terry jones",91,["graham",["michael","john",&qu

Python练习题 028:求3*3矩阵对角线数字之和

[Python练习题 028] 求一个3*3矩阵对角线元素之和 ----------------------------------------------------- 这题解倒是解出来了,但总觉得代码太啰嗦.矩阵这东西,应该有个很现成的方法可以直接计算才对-- 啰嗦代码如下: str = input('请输入9个数字,用空格隔开,以形成3*3矩阵:') n = [int(i) for i in str.split(' ')] #获取9个数字 mx = [] #存储矩阵 for i in ra

Python练习题 027:对10个数字进行排序

[Python练习题 027] 对10个数字进行排序 --------------------------------------------- 这题没什么好说的,用 str.split(' ') 获取输入的10个数字,然后用 lst.sort() 就完成排序了.代码如下: s = input('请输入10个数字,以空格隔开:') n = [int(x) for x in s.split(' ')] n.sort() print(n) 输出结果如下: 请输入10个数字,以空格隔开:3 23 4