python基础小白题3

25 篇文章 39 订阅

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

评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兔老大RabbitMQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值