20道阿里、京东、百度大厂一面笔试题分享!

Time will tell.

1、用代码在打印行中,输出一个菱形图案。


代码:


def diamond(side_len):
    for i in range(1, side_len + 1, 2):
        print((i * '*').center(side_len, ' '))
    for i in reversed(range(1, side_len, 2)):
        print((i * '*').center(side_len, ' '))


if __name__ == '__main__':
    diamond(7)

2、2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。


代码:


a = 2.0
b = 1.0
s = 0
for n in range(1,21):
    s += a / b
    t = a
    a = a + b
    b = t
print s

3、求1+2!+3!+4!..+20!的和值。


代码:


n = 0
s = 0
t = 1
for n in range(1,21):
    t *= n
    s += t
print '1! + 2! + 3! + ... + 20! = %d' % s

4、使用递归的方法求5!。


代码:


def fact(j):
    sum = 0
    if j == 0:
        sum = 1
    else:
        sum = j * fact(j - 1)
    return sum

print fact(5)

5、用递归函数调用方式,将所输入的5个字符以反序打印出来。


代码:


def output(s,l):
    if l==0:
       return
    print (s[l-1])
    output(s,l-1)
 
s = raw_input('Input a string : ')
l = len(s)
output(s,l)

6、有5个人,第五个人他说比第四个人大2岁,第四个人他说比第三个人大2岁,第三个人说比第二个人大2岁,第二个人说比第一个人大2岁。第一个人他说自己10岁。请问第五个人年龄多大?(要求使用递归方法求出年纪)


代码:


def age(n):
    if n == 1: c = 10
    else: c = age(n - 1) + 2
    return c
print age(5)

7、随机给出一个不多于5位的正整数,要求:一、求出它是几位数;二、逆序打印出各个位的数字。


代码:


x = int(raw_input("请输入一个数:\n"))
a = x / 10000
b = x % 10000 / 1000
c = x % 1000 / 100
d = x % 100 / 10
e = x % 10

if a != 0:
    print "该 5 位数的逆序:",e,d,c,b,a
elif b != 0:
    print "该 4 位数的逆序:",e,d,c,b,
elif c != 0:
    print "该 3 位数的逆序:",e,d,c
elif d != 0:
    print "该 2 位数的逆序:",e,d
else:
    print "该 1 位数:",e

8、随机输入一个5位数,判断出它是不是回文数。

(12321是回文数,个位与万位相同,十位与千位相同)

代码:


a = int(raw_input("请输入一个数字:\n"))
x = str(a)
flag = True

for i in range(len(x)/2):
    if x[i] != x[-i - 1]:
        flag = False
        break
if flag:
    print "%d 是一个回文数!" % a
else:
    print "%d 不是一个回文数!" % a

9、随机输入一个英文星期(1-7)的第一个字母来判断出是星期几,如果第一个字母有相同的,则继续输入第二个字母来继续判断。


代码:


def day_of_week():
    s1 = input("please input the first letter:")
    week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
    lst = [x for x in week if x.lower().startswith(s1.lower())]
    while len(lst) > 1:
        s = input("please input the next letter:")
        s1 += s
        lst = [x for x in week if x.lower().startswith(s1.lower())]

    if not lst:
        print('please input the right letter!')
        dow = day_of_week()
        lst = [dow]
    return lst[0]


if __name__ == '__main__':
    print(day_of_week())

10、用逗号将列表分隔开来。


代码:


L = [1,2,3,4,5]
s1 = ','.join(str(n) for n in L)
print s1

11、用代码打印出100以内的所有素数。


代码:


lower = int(input("输入区间最小值: "))
upper = int(input("输入区间最大值: "))

for num in range(lower,upper + 1):
        # 素数大于 1
        if num > 1:
                for i in range(2,num):
                        if (num % i) == 0:
                                break
                else:
                        print(num)

12、对随机输入的10个数字进行排序。


代码:


if __name__ == "__main__":
    N = 10
    # input data
    print '请输入10个数字\n'
    l = []
    for i in range(N):
        l.append(int(raw_input('输入一个数:\n')))
    print
    for i in range(N):
        print l[i]
    print
 
    # 排列10个数字
    for i in range(N - 1):
        min = i
        for j in range(i + 1,N):
            if l[min] > l[j]:min = j
        l[i],l[min] = l[min],l[i]
    print '排列后:'
    for i in range(N):
        print l[i]

13、求一个3 * 3矩阵主对角线元素之和


代码:


def matrix_diagonal_sum(num):
    a = []
    total = 0
    for i in range(num):
        a.append([])
        for j in range(num):
            a[i].append(int(input("Please input a integer number:")))
            if i == j:
                total += a[i][j]
    return total


if __name__ == '__main__':
    print(matrix_diagonal_sum(3))

14、输入一个随机数,将它插入到原有的一个有序数组当中,并按顺序排列。


代码:


if __name__ == '__main__':
	#  0作为加入数字的占位符
    a = [1,4,6,9,13,16,19,28,40,100,0]
    print '原始列表:'
    for i in range(len(a)):
        print a[i],
    number = int(raw_input("\n插入一个数字:\n"))
    end = a[9]
    if number > end:
        a[10] = number
    else:
        for i in range(10):
            if a[i] > number:
                temp1 = a[i]
                a[i] = number
                for j in range(i + 1,11):
                    temp2 = a[j]
                    a[j] = temp1
                    temp1 = temp2
                break
    print '排序后列表:'
    for i in range(11):
        print a[i],

15、用代码将一个数组逆序输出。


代码:


if __name__ == '__main__':
    a = [9,6,5,4,1]
    N = len(a)
    print a
    for i in range(len(a) / 2):
        a[i],a[N - i - 1] = a[N - i - 1],a[i]
    print a

16.有两个3行3列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵。

X = [[12,7,3],
    [4 ,5,6],
    [7 ,8,9]]

Y = [[5,8,1],
    [6,7,3],
    [4,5,9]]


代码:


X = [[12,7,3],
    [4 ,5,6],
    [7 ,8,9]]
 
Y = [[5,8,1],
    [6,7,3],
    [4,5,9]]
 
result = [[0,0,0],
         [0,0,0],
         [0,0,0]]
 
# 迭代输出行
for i in range(len(X)):
   # 迭代输出列
   for j in range(len(X[0])):
       result[i][j] = X[i][j] + Y[i][j]
 
for r in result:
   print(r)

17.用代码算出 1 到 100之间的和值。


代码:


tmp = 0
for i in range(1,101):
    tmp += i
print 'The sum is %d' % tmp

18.用代码实现,每次运行打印行输入一个随机数。


代码:


import random

#生成 10 到 20 之间的随机数
print random.uniform(10, 20)

19.在打印行随机输入3个数字,然后按照大小排序输出。


代码:


if __name__ == '__main__':
    n1 = int(raw_input('n1 = '))
    n2 = int(raw_input('n2 = '))
    n3 = int(raw_input('n3 = '))
 
    def swap(p1,p2):
        return p2,p1
 
    if n1 > n2 : n1,n2 = swap(n1,n2)
    if n1 > n3 : n1,n3 = swap(n1,n3)
    if n2 > n3 : n2,n3 = swap(n2,n3)
 
    print n1,n2,n3

20.在打印行打印出杨辉三角形,要求输出10行。


代码1:


def yh_triangle(num):
    triangle = []
    for i in range(num):
        triangle.append([])
        triangle[i].append(1)
        for j in range(1, i+1):
            if j == i:
                triangle[i].append(1)
                break
            else:
                triangle[i].append(triangle[i-1][j-1] + triangle[i-1][j])
        print(' '.join(str(x) for x in triangle[i]))


if __name__ == '__main__':
    yh_triangle(10)


代码2:


if __name__ == '__main__':
    a = []
    for i in range(10):
        a.append([])
        for j in range(10):
            a[i].append(0)
    for i in range(10):
        a[i][0] = 1
        a[i][i] = 1
    for i in range(2,10):
        for j in range(1,i):
            a[i][j] = a[i - 1][j-1] + a[i - 1][j]
    from sys import stdout
    for i in range(10):
        for j in range(i + 1):
            stdout.write(str(a[i][j]))
            stdout.write(' ')
        print

打印结果:

1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 
1 6 15 20 15 6 1 
1 7 21 35 35 21 7 1 
1 8 28 56 70 56 28 8 1 
1 9 36 84 126 126 84 36 9 1

絮叨

如果你对Python自动化测试、Python面试题、Python练习题感兴趣的话可以加入我们175317069一起学习喔。群里会有各项资料发放,也有行业深潜多年的测试人技术分析讲解。

欢迎【评论】、【点赞】、【关注】礼貌三连~

Time will tell.(时间会证明一切)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值