做一些简单的Python测试题


=Start=

昨天晚上在逛 伯乐在线 的时候看到了一篇文章「一些简单的Python测试题」,闲着没事就做了前面几题(后面的题目做不出来我是不会随便说出口的……),复习了一些知识,觉得这种任务驱动式的学习要比没事闲逛的目的性更强、专项效果也会更好(但前提是已经有过系统性学习Python的经历,否则在碰到问题时都不知道从哪方面入手),以后可以在没事的时候都学多练,水平才有可能不断提高。

题目一:打印1-1亿之内的偶数

刚拿到题目时只是想到了用xrange替换range避免内存占用过高,没想过其它的问题,不知道这题除了这个考点之外还想考什么知识?

def get_even_numbers():
	even_numbers = []
	for x in xrange(1, 100000000):
		if x % 2:
			even_numbers.append(x)
	print ' '.join(str(item) for item in even_numbers)

挨个print感觉不太好,所以先将数字放在了list中,最后用str.join()拼接后一次性print出来(感觉对于这么大数量级的情况,写入文件才是最佳的方式)。

题目二:用正则表达式清除字符串中的[]和其中的内容

刚开始差点想错方向了,后来搜索了之后一下就解决了,用 re.sub 将指定子串替换为空,如果次数较多,可以先 re.compile 再用。

import re
def remove_specify_symbols():
	s = "[lol]你好,帮我把这些markup清掉,[smile]。谢谢!"
	sb = re.sub(r'\[.+?\]', '', s)
	print type(s), s
	print type(sb), sb
搜索关键字:

python how to remove specific str from string use regex

参考链接:
题目三:在函数被调用时打印耗时详情

因为之前在coolshell的博客中见过类似的文章(讲Python的decorator),所以觉得也还好做,不过具体的代码忘了,就去网上搜了一下:

import time

def timing(f):
    def wrap(*args):
        print '<function name: {0}>'.format(f.func_name)
        print '<function call begin>'
        time1 = time.time()
        ret = f(*args)
        time2 = time.time()
        print '<function call end>'
        print '[timecosts: {0} ms]'.format((time2-time1)*1000.0)
        return ret
    return wrap

@timing
def hello(name):
    print "hello, %s" % name

def main():
    hello('tom')
题目四:将驼峰命名法字符串转成下划线命名法字符串

刚看到题目的时候在想该如何将驼峰命名法的CamelCase拆分成Camel和Case然后用下划线拼接,去网上搜了一下之后茅塞顿开——正则表达式的反向引用。还有就是找对英文关键字对于解题(搜索)来说也很关键。

搜索关键字:
  • 驼峰命名法字符串
  • Python convert CamelCase to UnderScoreCase
import re

def conv_CamelCase_2_UnderScoreCase(name):
    s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
    return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1)

def main():
    s1 = 'GetItem'
    s2 = 'getItem'
    s3 = 'doIT'
    s4 = 'doITgetItem'
    s5 = 'doITGetItem'
    s6 = 'getHTTPResponseCode'
    print s1, conv_CamelCase_2_UnderScoreCase(s1)
    print s2, conv_CamelCase_2_UnderScoreCase(s2)
    print s3, conv_CamelCase_2_UnderScoreCase(s3)
    print s4, conv_CamelCase_2_UnderScoreCase(s4)
    print s5, conv_CamelCase_2_UnderScoreCase(s5)
    print s6, conv_CamelCase_2_UnderScoreCase(s6)
参考链接:

=EOF=

,

《 “做一些简单的Python测试题” 》 有 2 条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注