Python挑战100题(1~10)

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'))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,782评论 0 2
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 12,228评论 1 118
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,148评论 0 10
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,744评论 0 38
  • 都说“说者无心,听者有意”。此种情形的比例还算是挺多的。但其实未必说者无心,也有宽松的听者无意。 为何会有喜欢和讨...
    阳光晶阅读 2,118评论 0 1