面过京东,试过百度,最终靠着这份python面试题顺利拿下美团offer

254 篇文章 8 订阅
21 篇文章 0 订阅

1.统计

统计在一个队列中的数字, 有多少个正数,多少个负数,如
a=[1, 3, 5, 7, 0, -1, -9, -4, -5, 9]

#方法一

# 用列表生成式,生成新的列表
b=[i for i in a if i>0]
print '大于0的个数:%s'%len(b)
c=[i for i in a if i<0]
print '小于0的个数:%s'%len(c)

#方法二

# coding:utf-8
a = [1, 3, 5, 7, 0, -1, -9, -4, -5, 8]
# 用传统的判断思维,累加
m = 0
n = 0
for i in a:
    if i > 0:
        m += 1
    elif i < 0:
        n += 1
    else:
        pass
print "大于 0 的个数:%s" % m
print "小于 0 的个数:%s" % n

2.字符串切片

字符串 “axbyczdj”,如果得到结果“abcd”

方法一

字符串切片
a=‘axbyczdj’
print a[0::2] #这里用a[::2]结果是一样的

方法二

a=‘axbyczdj’
c=[]
for i in range(len(a)): #对a这个字符串的长度进行遍历
if i % 2 == 0:
c.append(a[i])
print ‘’.join©

3.字符串切割

已知一个字符串为“hello_world_xiaowang”, 如何得到一个队列[“hello”,“world”,“xiaowang”]
a = ‘hello_world_xiaowang’
b = a.split(’’)
print b # 或者 print a.split(’
’)

4.格式化输出

#已知一个数字为1, 如何输出"0001"
a=1
print ‘%04d’%a

5.队列

已知一个队列,如: [1, 3, 5, 7], 如何把第一个数字,放到第三个位置,
得到:[3, 5, 1, 7]
insert 插入数据
a=[1, 3, 5, 7]
a.insert(3,a[0])
print a[1:]
#方法二
a=[1, 3, 5, 7]
a.insert(3,a[0])
a.remove(a[0])
print a

6.交换

已知 a = 9, b = 8, 如何交换 a 和 b 的值,得到 a 的值为 8,b 的值为 9
方法1
a=9
b=8
a,b=b,a
print ‘a的值为:%d’ % a
print ‘b的值为:%d’ % b
方法2
a=9
b=8
#用中间变量c
c=a
a=b
b=c
print ‘a的值为:%d’ % a
print ‘b的值为:%d’ % b

7.水仙花

打印出 100-999 所有的"水仙花数", 所谓"水仙花数"是指一个三位
数,其各位数字立方和等于该数本身。 例如:153 是一个"水仙花数",
因为 153=1 的三次方+5 的三次方+3 的三次
sxh = []
for i in range(100,1000):
s=0
m=list(str(i))
for j in m:
s +=int(j)**len(m)
if i == s:
print i
sxh.append(i)
print ‘100-999的水 仙花数:%s’ % sxh

用java解法:

8.完全数

如果一个数恰好等于它的因子之和, 则称该数为“完全数”,又称完美数或完备数。
例如:第一个完全数是 6, 它有约数 1、2、3、6,除去它本身 6 外,其余3
个数相加,1+2+3=6。 第二个完全数是 28,它有约数 1、2、4、7、14、28,
除去它本身 28外,其余 5 个数相加,1+2+4+7+14=28。那么问题来了,
求 1000 以内的完全数有哪
a=[]
for i in range(1,1000):
s=0
for j in range(1,i):
if i % j == 0 & j <i:
s+=j
if s ==i:
print i
a.append(i)

java的解法:

print “1000 以内完全数:%s” % a

9.排序

用 python 写个冒泡
a = [1, 3, 10, 9, 21, 35, 4, 6]
s = range(1, len(a))[::-1]
print(list(s)) # 交换次数
for i in s:
for j in range(i):
if a[j] > a[j + 1]:
a[j], a[j + 1] = a[j + 1], a[j]
print(“第 %s 轮交换后数据:%s” % (len(s)-i+1, a))
print(a)

10.sort 排序

已知一个队列[1,3,6,9,7,3,4,6]
按从小到大排序
按从大到小排序
去除重复数字 用set
a = [1, 3, 6, 9, 7, 3, 4, 6]

#1.sort 排序,正序
a.sort()
print a

#2.sort降序
a.sort(reverse=True)
print a

#3.去重
b = list(set(a))
print b

#11.阶乘

#计算 n 的阶乘
#计算 n!,例如 n=3(计算 321=6), 求 10的阶乘
#from functools import reduce
#a=1
#b=reduce(lambda x,y:x*y, range(1,a+1))
#print b

#def digui(x,y):
#return x*y
#a=1
#b=reduce(digui,range(1,a+1)) # 1,11
#print b

#12.递归函数

#def digui(n):
#if n ==1:
#return 1
#else:
#return ndigui(n-1)
#print n
digui(n-1)
#a=5
#print digui(a)

#13.斐波那契数列

#已知一个数列:1、1、2、3、5、8、13、。。。。的规律为从 3
#开始的每一项都等于其前两项的和,这是斐波那契数列。求满足规律的100以内的所有数据
#a = 0
#b = 1
#while b < 100:
#print b,
#a,b = b,a+b

14.幂的递归

#计算 x 的 n 次方,如:3 的 4 次方 为 3333=81
def mi(x, n):
‘’‘计算 x 的 n 次方’’’
if n == 0:
return 1
else:
return x
mi(x, n-1)
x = 3
num = 4
print mi(x, num)

15.python编程题

写一个小程序:控制台输入邮箱地址(格式为 username@companyname.com),
程序识别用户名和公司名后,将用户名和公司名输出到控制台。
要求:

  1. 校验输入内容是否符合规范(xx@yy.com), 如是进入下一步,
    如否则抛出提示"incorrect email format"。注意必须以.com结尾
  2. 可以循环“输入–输出判断结果”这整个过程
  3. 按字母 Q(不区分大小写)退出循环,结束程序

import re
#判断邮箱.com结尾
def is_mail_style(x):
a=re.match(r’[0-9a-zA-Z_-]*@[0-9a-zA-Z]+(.com)$’,x)
if a:
yhm = re.findall("^(.+?)@", x)
print “用户名:%s " % yhm[0]
gc = re.findall(”@(.+?).com", x)
print "公司名:%s " % gc[0]
return True
else:
print “incorrect email format”
return False

a = raw_input(“请输入:”)
while 1:
if a == “q” or a == “Q”:
exit()
else:
if is_mail_style(a):
break
a = raw_input(u’请输入’)
print ‘下一步!’

16.python编程-遍历文件

如何遍历查找出某个文件夹内所有的子文件呢?并且找出某个后缀的所有文件?
#coding:utf-8
import os

def get_files(path=‘D:\xx’, rule=".py"):
all = []
for fpathe, dirs, fs in os.walk(path): # os.walk 是获取所有的目录
for f in fs:
filename = os.path.join(fpathe,f)
if filename.endswith(rule): # 判断是否是"xxx"结尾
all.append(filename)
return all
if name == ‘main’:
b = get_files(r"D:\讲课文档\课件\第二个月课件\Python+接口框架\POMDemo\pages")
for i in b:
print i

17、用shell或者其他你熟悉的语言实现130000000开始的数个连贯手机号和固定密码(可自定义)的mds编码,编码后的内容写入文件md5.txt.其中编码前的字段格式为( 如果固定密码为123456); 1380000001:123456

start=“13800000000”
for ((i=1; i<=10; i++))
do
let “num= s t a r t + start+ start+i”
md5_pass=echo -n 123456 |openssl md5 |awk -F'=' {'print $2'}
echo “ n u m : num: num:md5_pass” >>./md5.txt
done

[root@localhost xiaowang]# cat md5.txt
13800000001: e10adc3949ba59abbe56e057f20f883e
13800000002: e10adc3949ba59abbe56e057f20f883e
13800000003: e10adc3949ba59abbe56e057f20f883e
13800000004: e10adc3949ba59abbe56e057f20f883e
13800000005: e10adc3949ba59abbe56e057f20f883e
13800000006: e10adc3949ba59abbe56e057f20f883e
13800000007: e10adc3949ba59abbe56e057f20f883e
13800000008: e10adc3949ba59abbe56e057f20f883e
13800000009: e10adc3949ba59abbe56e057f20f883e
13800000010: e10adc3949ba59abbe56e057f20f883e

最后

在这里插入图片描述

我整理了一份216页软件测试大厂面试题,以及2021推荐最新的简历模板,送给小伙伴们,关注公众号软件测试小dao自行领取,和一些小伙伴建立一个技术交流群,一起探讨技术,分享技术资料,旨在共同学习进步,如果感兴趣就加入我们吧!1033482984

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值