Python100道题从“无”到“有”,每日监督打卡学习第二期:11-20题,思路分享+心路历程
📢📢📢📣📣📣
🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,小白一枚,多多关照😜😜😜
🏅🏅🏅CSDN Python领域新星创作者,大二在读,欢迎大家找我合作学习
💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈
🌟🌟🌟✨✨✨
前言:
这里记录一下自己刷一百道题的心路历程吧,每十道题发一篇文章,希望大家可以从中学习到知识,也希望自己能够坚持下去吧!欢迎大家前来一起监督学习!
第十一题
11.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
代码
def xiaotutu(month):
if month==1 or month==2:
return 2
# 第三个月起,就说明兔子已经长了两年了,也就是说第三个月出生的小兔,第五个月就又可以哺育新的小兔子了
# 想一下兔子每个月份的数量:2 2 4 6 10 16 26 42,找一下规律:正好当前月份的兔子数量等于前两个月兔子数量的总和。
return xiaotutu(month-1)+xiaotutu(month-2)
print(xiaotutu(5))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
思路:斐波那契数列
第三个月起,就说明兔子已经长了两年了,也就是说第三个月出生的小兔,第五个月就又可以哺育新的小兔子了。想一下兔子每个月份的数量:2 2 4 6 10 16 26 42,找一下规律:正好当前月份的兔子数量等于前两个月兔子数量的总和。这样我们就自然而然的想到去使用斐波那契数列
了!
第十二题
12.判断101-200之间有多少个素数,并输出所有素数。
代码
for i in range(101,201):
for j in range(2,i):
if i % j==0:
break
else:
print(i)
- 1
- 2
- 3
- 4
- 5
- 6
思路
素数就是:用一个数分别去除2到sqrt(这个数)
,如果能被整除,则表明此数不是素数,反之是素数。 双循环遍历一下列表,这时候就会用到我们一个非常不常用的的结构:for...else...
结构了,全都遍历确认一遍之后,可以被整除的直接break掉,遍历全部之后剩下的进行输出!
第十三题
13. 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
代码
for n in range(100,1000):
i = n // 100
j = n // 10 % 10
k = n % 10
if n == i**3 + j**3 + k**3:
print(n)
- 1
- 2
- 3
- 4
- 5
- 6
思路
利用for循环控制100-999个数,每个数分解出个位,十位,百位
。这个没啥好说的,记住整除取余的一系列操作就行了!
第十四题
14.将一个正整数分解质因数。例如:输入90,打印出90=233*5。
代码
a = int(input('请输入你要分解的正整数:'))
for i in range(2,a):
while a!=1:
if a%i==0:
for j in range(2,i):
if i%j==0:
break
else:
a = a/i
if a== 1:
print('%d'%i,end='')
else:
print('%d*'%i,end='')
else:
break
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
思路
看到这道题我看到的时候第一想法:结合素数求法进行求解,双循环结构
,但后来仔细一想,能被目标数从0开始遍历,前面的数如果能被整除的话不会轮到后面,所以说根本就不用判断是不是素数,直接从2开始,看看谁可以被目标数整除,该数肯定是素数。 然后通过格式化字符串进行输出!简化一下代码:
num = int(input('请输入:'))
for i in range(2, num):
while num!=1:
if num % i == 0:
num = num / i
if num==1:
print('%d'%i,end='')
else:
print('%d*'%i,end='')
else:
break
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
第十五题
15.利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
代码
score = int(input('输入分数:'))
if score >= 90:
grade = 'A'
elif score >= 60:
grade = 'B'
else:
grade = 'C'
print('%d 属于 %s' % (score, grade))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
思路
没啥好说的,注意最后格式化输出!
第十六题
16.输出指定格式的日期。
代码
import time
print(time.time())
print(time.localtime())
print(time.asctime())
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))
import datetime
print(datetime.date.today())
print(datetime.date.today().strftime('%d/%m/%Y'))
print(datetime.date(1941, 11, 5))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
思路
使用 time和datetime
模块,内容多,牢记于心!
第十七题
17.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
代码
a = str(input('请输入一串字符串:'))
letter = 0
space = 0
numbers= 0
others = 0
i = 0
while i<len(a):
b = a[i]
i+=1
if b.isalpha():
letter+=1
elif b.isspace():
space+=1
elif b.isdigit():
numbers+=1
else:
others+=1
print('字母:%s,空格:%s,数字:%s,其他字符:%s'%(letter,space,numbers,others))
print('字母:{0},空格:{1},数字:{2},其他字符:{3}'.format(letter,space,numbers,others))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
思路
判断字符串中的字母数字空格等有专门的函数判断方法:isalpha() isspace() isdigit()
,然后格式化输出方法要掌握起来,%s是字符串,%d是输出整数,format方法也要掌握起来!结构:({0}).format(变量)
第十八题
18.求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
代码
a = int(input('请输入一个数:'))
b = int(input('请输入多少个数相加:'))
c=0
list1=[]
for i in range(b):
c=c+a*10**i
list1.append(c)
print(list1)
d=0
for i in list1:
d+=i
print(d)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
思路
不知道为啥,我现在做啥首先想到和用到的都是列表,可能真的是有惯性思维了,不知道是好还是坏,尝试着去用一下别的函数和语法!但又想不出来其他的,还是得好好学吧,我觉得我的算法水平太低了!
简化一下代码,去掉列表:
a = int(input('请输入一个数:'))
b = int(input('请输入多少个数相加:'))
c=0
d = 0
for i in range(b):
c=c+a*10**i
d += c
print(d)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
第十九题
19.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
代码
a=0
for i in range(2,1001):
for j in range(2,i):
if i%j==0:
a+=j
# a+=i/j
if i==a+1:
print(i)
a=0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
思路
根据题目意思,完数就是该数的所有的因数之和等于该数,很容易想到二重循环,第一重先找那个数,第二层再去找因数,把因数相加,然后进行比较,注意,此处很容易犯一个错误:因数求和加不加该数除此因数后的结果。这是我们第一个想法肯定是必须加呀!!!为什么不加,被除后的结果肯定也是一个参数啊!!!确实都是参数,但你再细想,你继续遍历,当遍历到被除后那个结果的因数后,你还会再加一遍,此时就加重了,所以说只需要加除数就可以了,结果后续遍历还会当做除数加入因数之和中去!
第二十题
20、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
代码
high = 100
H = 0
n =int(input('请输入落地次数:'))
def luodi(n):
if n==0:
return 100
else:
return luodi(n-1)/2
for i in range(0,n):
if i ==0:
H+=100
else:
H+=luodi(i)*2
print('第{}次落地,总共经过了{}米,落地反弹{}米。'.format(n,H,luodi(n)))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
思路
通过递归结构,求出第n次落地后反弹的高度,然后循环遍历一下,注意第一次落地时只有下降的高度,第二次落地时,包括第一次落地反弹起来的高度和落下的距离,也就是第一次反弹起双倍距离!
【精彩文章💕往期推荐】
Python100道题从“无”到“有”,每日监督打卡学习第一期:1-10题,思路分享+心路历程
Python100道题从“无”到“有”,每日监督打卡学习第二期:11-20题,思路分享+心路历程
Python100道题从“无”到“有”,每日监督打卡学习第三期:21-30题,思路分享+心路历程
结语:
第二期圆满结束,我们第三期再见!!!加油坚持下去!!!
🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~
文章来源: xuyipeng.blog.csdn.net,作者:是Dream呀,版权归原作者所有,如需转载,请联系作者。
原文链接:xuyipeng.blog.csdn.net/article/details/121582296
- 点赞
- 收藏
- 关注作者
评论(0)