python基础小白题3

【摘要】 题目021:猴子吃桃问题
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。
”’
def tm021():
    ”’
第十天num=1个,第九天必然是4个:4/2-1=1,也就是…

题目021:猴子吃桃问题

猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个

第二天早上又将剩下的桃子吃掉一半,又多吃了一个。

以后每天早上都吃了前一天剩下的一半零一个。

到第10天早上想再吃时,见只剩下一个桃子了。

求第一天共摘了多少。

”’

def tm021():

”’

第十天num=1个,第九天必然是4个:4/2-1=1,也就是(num+1)*2=4。

做这种题,先用算数式列出来,然后用代码描述就行了。

”’

num = 1

for i in range(10-1):

num = (num+1)*2

print(num)

”’

题目022:两个乒乓球队进行比赛,各出三人。

甲队为a,b,c三人,乙队为x,y,z三人。

已抽签决定比赛名单。有人向队员打听比赛的名单。

a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

”’

def tm022():

”’

【个人备注】:关键是将抽象化,将问题抽象成代码方式。

我的解题思路,是用排列组合函数,列出方案,然后排除。

而官方解答里面有一个纯粹的for循环加if的求解方式,

更抽象一些,用了一个很常用固定范式,直接拿来解题了。

稍微对其抽象的方法注释了一下。

”’

import itertools

jia = [‘a’,’b’,’c’]

yi = [‘x’,’y’,’z’]

arr = list(itertools.permutations(yi,3)) # 面对甲队a,b,c时,乙队所有排列 [(‘x’, ‘y’, ‘z’), (‘x’, ‘z’, ‘y’), (‘y’, ‘x’, ‘z’), (‘y’, ‘z’, ‘x’), (‘z’, ‘x’, ‘y’), (‘z’, ‘y’, ‘x’)]

arr = [[jia[i]+a[i] for i in range(3)] for a in arr] #将a,b,c写上,得到所有对阵组合 [[‘ax’, ‘by’, ‘cz’], [‘ax’, ‘bz’, ‘cy’], [‘ay’, ‘bx’, ‘cz’], [‘ay’, ‘bz’, ‘cx’], [‘az’, ‘bx’, ‘cy’], [‘az’, ‘by’, ‘cx’]]

for i in arr:

if ‘ax’ in i:

pass

elif ‘cx’ in i or ‘cz’ in i:

pass

else:

print(i) # 得到 [‘az’, ‘bx’, ‘cy’]

def tm022_1():

for a in [‘x’,’y’,’z’]: # a在x,y,z中挑一个打

for b in [‘x’, ‘y’, ‘z’]: # b在x,y,z中挑一个打

for c in [‘x’, ‘y’, ‘z’]: # c在x,y,z中挑一个打 三层总计27种打法

if a!=b and b!=c and c!=a: # a,b,c不能挑同一个人 缩减到6种打法

if a!=’x’ and c!=’x’ and c!=’z’: # 依据题意不能ax,cx,cz 缩减到1种打法

print(‘a’+a,’b’+b,’c’+c)

”’

题目023:

打印出如下图案(菱形):

*

***

*****

*******

*****

***

*

”’

def tm023():

”’

【个人备注】:想到了绝对值,

然后将[0,1,2,3,4,5,6]变成了[3,2,1,0,1,2,3],也就是每行左边空格数。

”’

num = 7

for i in range(num):

blank = abs(num//2-i)

print(‘ ‘*blank+’*’*(num-2*blank)+’ ‘*blank)

”’

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

”’

def tm024():

# 没啥好说的

a,b,num = 2,1,0

for i in range(20):

num+=a/b

a=a+b

b=a-b

print(num)

”’

题目025:求1+2!+3!+…+20!的和。

”’

def tm025():

”’

【个人备注】:实现起来很简单。

下面官方的代码,比我写的更简洁。

”’

s,t=0,1

for n in range(1,21):

t*=n

s+=t

print(s)

”’

题目026:利用递归方法求5!。

”’

def fac(x):

if x>1:

return x*fac(x-1)

else:

return x

def tm026():

”’

【个人备注】:按题目要求,公式f(n)=n*f(n-1),递归调用求解。

”’

print(fac(5))

”’

题目027:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

”’

def output(s,l):

if l==0:

return

print (s[l-1])

output(s,l-1)

def tm027():

”’

【个人备注】:直接从官网复制,不喜欢递归。

”’

s = input(‘Input a string:’)

l = len(s)

output(s,l)

”’

题目028:有5个人坐在一起,

问第五个人多少岁?他说比第4个人大两岁。

问第4个人,他说比第3个人大两岁。

问第3个人,又说比第2个人大两岁。

问第2个人,说比第1个人大两岁。

最后问第一个人,他说是10岁。

请问第五个人多大?

”’

def age(x):

if x>1:

return 2+age(x-1)

else:

return 10

def tm028():

”’

【个人备注】:官网给的还是递归方法,因为不用递归的话就是个口算题。

”’

print(age(5))

”’

题目029:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

”’

def tm029():

”’

【个人备注】:用Python,So Easy~

list倒序可以用list.reverse();

字符串就只能用步长=-1的方式来倒序了。

”’

num = 12345

s = str(num)

print(len(s))

print(s[::-1])

”’

题目030:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

”’

def tm030():

”’

【个人备注】:没啥可说的。

”’

num = 12321

s = str(num)

for i in range(len(s)//2):

if s[i]!=s[-i-1]:

print(False)

break

else:

print(True)

文章来源: fantianzuo.blog.csdn.net,作者:兔兔RabbitMQ!!!,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/81749570

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享