PythonTip(11~15)题详解

来源:互联网 发布:c 敏感词过滤算法 编辑:程序博客网 时间:2024/06/04 20:14

题目11:结尾0的个数

描述:给你一个正整数列表 L, 如 L=[2,8,3,50], 输出L内所有数字的乘积末尾0的个数,
如样例L的结果为2.(提示:不要直接相乘,数字很多,可能溢出)

分析:这个题意思就是把列表中所有元素相乘,计算结果末尾 0 的个数。比如 L 中 2*8*3*50 = 2400,那末尾的 0 就是 2,所以输出结果为 2.

答案:用匿名函数 lambda 。lambda函数的用法

m = reduce(lambda x, y: x * y, L)count = 0while (m % 10 == 0):    count += 1    m /= 10print(count)

举一反三

1.个人觉得这个方法不太好,既繁琐又不易理解,还是上面的答案比较简洁易懂。

# -*- coding: UTF-8 -*-L = [2,8,3,50]def count(L):    count2 = count5 = 0    # 分别保存list中各个元素中包含2和5的因子数目    flag2 = flag5 = True    l = len(L)    for i in range(0, l):        while flag2 or flag5:            while L[i] % 2 == 0:    # 计算保存list中各个元素中包含2的因子数目                count2 = count2 + 1                L[i] = L[i] / 2            flag2 = False            while L[i] % 5 == 0:    # 计算list中各个元素中包含5的因子数目                count5 = count5 + 1                L[i] = L[i] / 5            flag5 = False        flag2 = flag5 = True    num = (count2 if count2 < count5 else count5)    return numprint(count(L))

题目12:结尾非零数的奇偶性

描述:给你一个正整数列表 L, 如 L=[2,8,3,50], 判断列表内所有数字乘积的最后一个非零数字的奇偶性,
奇数输出1,偶数输出0. 如样例输出应为0

分析:依照 11 题的做法,需要找到乘积的最后一个非零数,就好做了。

答案:

m = reduce(lambda x, y: x * y, L)count = 0while (m % 10 == 0):  #判断乘积结尾是否为零    m = m/10if m%2 != 0:          #判断非零数的奇偶性    count = 1print count 

举一反三

1.这个方法就是把每个步骤分开来写,先计算乘积,再把乘积末尾的 0 去掉,再判断奇偶性。也挺好的,起码逻辑是有的。

# -*- coding: UTF-8 -*-L = [2,8,3,50]k = 1for i in range(len(L)):    k = L[i] * kk1 = list(str(k))while True:    if k1[-1] == '0':        k1.pop()        continue    else:        breakjiouxing = Noney = int(k1[-1])if y % 2 == 0:    jiouxing = 0else :    jiouxing = 1print jiouxing

题目13:光棍的悲伤

描述:光棍们对1总是那么敏感,因此每年的11.11被戏称为光棍节。
鄙人光棍几十载,光棍自有光棍的快乐。让我们勇敢面对光棍的身份吧,
现在就证明自己:给你一个整数a,数出a在二进制表示下1的个数,并输出。

分析:此题需要用到将一个数转化成二进制的方法,这就是 bin(a).

答案:

x = str(bin(a))count = 0for i in x:    if i == '1':        count = count + 1print count 

举一反三

1.用count()函数

# -*- coding: UTF-8 -*-a = 10print str(bin(a)).count('1')

2.列表形式

# -*- coding: UTF-8 -*-a = 10x = bin(a)L = [y for y in x if y == '1']print len(L)

3.直接用二进制的算法,在统计为 1 的个数。(此方法比较好,适用于基础较弱的同学)

# -*- coding: UTF-8 -*-a = 11def count(a):    sum = 0    while(a >= 1):        a, b = divmod(a, 2)        if b != 0:            sum = sum + 1    return sumprint count(a)

题目14:Python之美

描述:输出Python之禅,注意:输出python之禅的源码即可,不用转换为英文。(小小的提示:print this.s)

分析:不知道这个题的目的是想让我们输出什么?试了一下,输出提示好像还通不过,此题也是醉了~~~

答案:

from this import *print s

题目15:大小写转换

描述:给定一个字符串a, 将a中的大写字母 转换成小写,其它字符不变,并输出。

分析:很简单,用 lower() 函数就可以了。

答案:

print a.lower()
0 0