python笔试题奥特曼打怪兽_优酷土豆2016实习生笔试 Python编程题

前段时间参加了优酷土豆2016实习生招聘的在线笔试环节,由于选择的是Python开发实习生,所以整个试卷全部是Python相关的,光凭这种专一的程度,就足以落360几条街(想当初我投的360 C++实习岗位,结果笔试时冒出来PHP的题,我也是醉了)。闲言少叙,下面一起来看看今年实习的机试环节编程题。

题型概览

整个笔试部分编程环节共有三道编程题,难度相差不大,考察Python编程的基本功和一般的算法和程序设计思维,下面分别介绍这三道题。

第一题 数字加密

大意如下:输入num为四位数,对其按照如下的规则进行加密:

1、每一位分别加5,然后分别将其替换为该数除以10取余后的结果

2、将该数的第1位和第4为互换,第二位和第三位互换

3、最后合起来作为加密后的整数输出

例如: 输入:1000,输出:5556

时间限制:1s 内存限制:16MB

分析:

此题说得有点啰嗦而且拗口,其实操作过程很简单,下面就它说的前两步进行展开和详细说明:

第一步是给每一位都加5,然后除以10取余数,用这个余数替代原来的数,例如原来的某一位上的数是3,那么3+5%10=8,于是用8替换掉原来位上的3,就这么简单。

第二步题上面说1位和4位互换,2位和3位互换,而输入固定只有4位,那说的直白一些就是把这个数的位颠倒过来了,本来是1234的位置,现在变成了4321位置,这块题目说成这样有混淆视听之嫌

最后就更好说了,颠倒完了合成一个数输出就可以了。

代码实现

经过前面的分析,代码设计的逻辑就已经很清晰了。不过考虑到对输入的整数分离位不太方便,这里将它转成字符串再操作,最后再转成了整数。具体代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14#coding:utf-8

def num_jiami(num):

'''

输入num为四位数,操作,每一位加5,然后分别替换为该数除以10取余数后的结果,然后1位和4位交换,

2位和3位交换,再合起来。

'''

num_list=list(str(num))

for i in [0,1,2,3]:

num_list.append(str((int(num_list[0])+5)%10))

num_list.pop(0)

num_list.reverse()

result=''.join(num_list)

return int(result)

代码分析

第一行设定编码字符集为utf-8,因为代码中含有中文。对于Python2.x的解释器,由于默认的字符集为ASCII,遇到中文会出现错误,所以要包含。接下来定义了一个函数,输入参数为num。第8行先讲num转为str类型,假如输入1000,现在就变成了字符串”1000”,然后经过list方法后编程了单个字母组成的列表,具体为:[‘1’,’0’,’0’,’0’],这就完成了按位分割的功能,而且列表操作起来很方便。9到11行对列表中的每个数加5除以10再取余,这里没有pop再insert,而是一直pop列表首部元素,然后再尾部添加,这样操作的结果与前一种效果是一样的,这样操作完成后,对于[‘1’,’0’,’0’,’0’]来说,将会变成[‘6’,’5’,’5’,’5’]。第12行将列表逆置,对于[‘6’,’5’,’5’,’5’],就会变为[‘5’,’5’,’5’,’6’]。第13行通过str类的join方法将[‘5’,’5’,’5’,’6’]合成字符串”5556”,最后一行转为int类型再输出。

整个过程比较简单,不过为了提高运行效率,上面有两处代码看似拖沓实则有意而为之:for循环处,

1for i in [0,1,2,3]

1for i in range(4)

要更高效;最后得到result处没有将整个列表元素依次相加,而是采用了join方法,也是由于join操作更有效率。

第二题 求字符串的全排列

输入:一个字符串 输出:该字符串的全排列

如:输入:’abc’ 输出:abc,acb,bac,bca,cab,cba

时间限制:1s 内存限制:16MB

分析

这道题没什么好分析的,是一个很常见的全排列实现,下面给出递归的实现

代码实现1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18#coding:utf-8

def permutation(result,strs,list):

if len(list)==1:

result.append(strs+list[0])

else:

for temp_str in list:

temp_list=list[:]

temp_list.remove(temp_str)

permutation(result,strs+temp_str,temp_list)

def getshit(data):

list_input=list(data)

result=[]

permutation(result,'',list_input)

pp=','.join(result)

print pp

第三题 字符串解密

大意为:给定一个字符串作为输入,将其中的数字用数字前近邻的字母序列进行替换,字母序列重复的次数等于该数字。最后将字符串输出。

例如: 输入:’a2bc3d1’ 输出:’aabcbcbcd’

时间限制:1s 内存限制:16MB

分析

这道题题目和第一题有一点遥相呼应的味道,第一题加密,这一题解密。虽然规则不同,但是字符串操作的方式基本不变。下面给出实现代码。

代码实现1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17def com_baiyi_decode(str):

length=len(str)

#sys.stdout(length)

i=0

temp_dir=[]

result=''

while i < length:

if str[i] in ['0','1','2','3','4','5','6','7','8','9']:

if temp_dir:

for j in range(int(str[i])):

result+=''.join(temp_dir)

temp_dir=[]

else:

temp_dir.append(str[i])

i+=1

print result

总结

上面三道题都是与字符串相关的题,涉及到了str的一些基本操作,如str的拆分、合并;当然还有函数定义,基本的控制语句等。总体来说考察的都是很基础的Python编程知识和编程技能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值