PythonTip(11~15)题详解

题目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()
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值