您的位置:首页 > 编程语言 > Python开发

PythonTip(11~15)题详解

2016-12-09 14:27 288 查看

题目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 = 0
while (m % 10 == 0):
count += 1
m /= 10
print(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 num
print(count(L))


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

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

奇数输出1,偶数输出0. 如样例输出应为0

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

答案:

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


举一反三

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

# -*- coding: UTF-8 -*-
L = [2,8,3,50]
k = 1
for i in range(len(L)):
k = L[i] * k
k1 = list(str(k))

while True:
if k1[-1] == '0':
k1.pop()
continue
else:
break
jiouxing = None
y = int(k1[-1])
if y % 2 == 0:
jiouxing = 0
else :
jiouxing = 1
print jiouxing


题目13:光棍的悲伤

描述:光棍们对1总是那么敏感,因此每年的11.11被戏称为光棍节。

鄙人光棍几十载,光棍自有光棍的快乐。让我们勇敢面对光棍的身份吧,

现在就证明自己:给你一个整数a,数出a在二进制表示下1的个数,并输出。

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

答案:

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


举一反三

1.用count()函数

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


2.列表形式

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


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

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


题目14:Python之美

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

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

答案:

from this import *
print s


题目15:大小写转换

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

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

答案:

print a.lower()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: