美文网首页新手练习100题
Python挑战100题(1~10)

Python挑战100题(1~10)

作者: YoYoYoo | 来源:发表于2019-07-11 16:33 被阅读0次

    1、字符串逆序

    题目:给你一个字符串 a, 请你输出逆序之后的a。
    例如:a=‘xydz’
    则输出:zdyx
    答:最简单的:

    print(a[::-1])
    

    字符串没有sort,reverse等方法。

    2、输出字典key

    题目:给你一字典a,如a={1:1,2:2,3:3},输出字典a的key,以','连接,如‘1,2,3'。要求key按照字典序升序排列(注意key可能是字符串)。
    例如:a={1:1,2:2,3:3}, 则输出:1,2,3
    答:

    >>> a = {1:1,2:2,3:3}
    >>> print( ','.join(sorted(map(str,a.keys()))))
    

    知识点:
    map() 函数语法:
    map(function, iterable, ...)
    例:

    >>> map(square, [1,2,3,4,5])   # 计算列表各个元素的平方
    

    3、输出字符奇数位置的字符串

    题目:给你一个字符串 a, 输出a中奇数位置字符构成的字符串(位置编号从1开始)。
    例如:a=‘xyzwd’
    则输出:xzd
    答:

    >>> a = 'xyzwd'
    >>> print(a[::2])
    xzd
    

    4、求解100以内的所有素数

    题目:输出100以内的所有素数,素数之间以一个空格区分(注意,最后一个数字之后不能有空格)。
    答:
    方法一:

    s = ''
    for i in range(2,101):
        for j in range(2,i):
            if i%j == 0:
                break
        else:
            s = s + ' ' + str(i)
    
    print(s)
    

    方法二:

    def isprime(x):
        flag = 0
        for a in range(2,x):
            if x % a == 0:
                flag = 1 # x 能被 a 整除,则flag等于1 ,即表示不是素数
                break
        return flag
    
    L = []
    for j in range(2,101):
        if isprime(j) == 0: # 等于0 表示是素数
            L.append(str(j))
    
    print(' '.join(L))
    

    5、求中位数

    题目:给你一个整数列表L, 输出L的中位数(若结果为小数,则保留一位小数)。
    例如: L=[0,1,2,3,4]
    则输出:2
    答:

    L=[0,1,2,3,4,5]
    if len(L) % 2==0:
        print((L[int(len(L)/2-1)]+ L[int(len(L)/2)])/2)
    else:
        print(L[int(len(L)/2)])
    

    6、求最大公约数

    题目:给你两个正整数a和b, 输出它们的最大公约数。
    例如:a = 3, b = 5
    则输出:1
    答:辗转相除法(欧几里得算法)

    a,b = 3,5
    def gcd(a,b):
        if b == 0:
            return a
        else:
            return gcd(b,a%b)
        
    print (gcd(a,b))
    

    以上函数可简写为:

    gcd = lambda a,b : a if b ==0 else gcd(b,a%b)
    

    其中 a,b 为参数 a 为return a
    也可:

    a,b = 3,5
    while b != 0:
        a,b = b,a%b
    
    print(a)
    

    7、求最小公倍数

    题目:给你两个正整数a和b, 输出它们的最小公倍数。
    例如:a = 3, b = 5
    则输出:15
    答:公式法:由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。在上一题基础上:

    a,b = 3,5
    def gcd(a,b):
        if b == 0:
            return a
        else:
            return gcd(b,a%b)
        
    f = gcd(a,b)
    print(a*b/f)
    

    8、结尾0的个数

    题目: 给你一个正整数列表 L, 输出 L 内所有数字的乘积末尾0的个数。(提示:不要直接相乘,数字很多,相乘得到的结果可能会很大)。
    例如: L=[2,8,3,50]
    则输出:2
    答:将2、5拆分出来取最小数量即可。

    L=[2,8,3,50]
    count_2 = 0
    count_5 = 0
    for i in L:
        while i % 2 == 0:
            count_2 += 1
            i = i / 2
    
        while i % 5 == 0:
            count_5 += 1
            i = i / 5
    
    if count_2 > count_5:
        print(count_5)
    else:
        print(count_2)
    

    9、结尾非0数的奇偶性

    题目:给你一个正整数列表 L, 判断列表内所有数字乘积的最后一个非零数字的奇偶性。如果为奇数输出1,偶数则输出0.。
    例如:L=[2,8,3,50]
    则输出:0
    答:在上一题的基础上,5的个数多,则结尾非0数字为奇数;2的个数多,则为偶数

    L=[2,8,3,50]
    count_2 = 0
    count_5 = 0
    for i in L:
        while i % 2 == 0:
            count_2 += 1
            i = i / 2
    
        while i % 5 == 0:
            count_5 += 1
            i = i / 5
    
    if count_2 > count_5:
        print(0)
    else:
        print(1)
    

    10、光棍的悲伤

    题目:光棍们对1总是那么敏感,因此每年的11.11被戏称为光棍节。小Py光棍几十载,光棍自有光棍的快乐。让我们勇敢地面对光棍的身份吧,现在就证明自己:给你一个整数a,数出a在二进制表示下1的个数,并输出。
    例如:a=7
    则输出:3
    答:

    print(bin(a).count('1'))
    

    相关文章

      网友评论

        本文标题:Python挑战100题(1~10)

        本文链接:https://www.haomeiwen.com/subject/onmfkctx.html