新手练习100题

Python挑战100题(1~10)

2019-07-11  本文已影响0人  YoYoYoo

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'))
上一篇下一篇

猜你喜欢

热点阅读