=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
参考链接:
- http://stackoverflow.com/questions/8703017/remove-sub-string-by-using-python
- http://stackoverflow.com/questions/3939361/remove-specific-characters-from-a-string-in-python
- http://stackoverflow.com/questions/875968/how-to-remove-symbols-from-a-string-with-python
- https://docs.python.org/2/library/re.html
题目三:在函数被调用时打印耗时详情
因为之前在coolshell的博客中见过类似的文章(讲Python的decorator),所以觉得也还好做,不过具体的代码忘了,就去网上搜了一下:
- http://stackoverflow.com/questions/5478351/python-time-measure-function
- http://www.huyng.com/posts/python-performance-analysis/
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)
参考链接:
- http://stackoverflow.com/questions/1175208/elegant-python-function-to-convert-camelcase-to-camel-case
- http://stackoverflow.com/questions/4303492/how-can-i-simplify-this-conversion-from-underscore-to-camelcase-in-python
- https://gist.github.com/3660565
- http://wiki.geany.org/howtos/convert_camelcase
=EOF=
《 “做一些简单的Python测试题” 》 有 2 条评论
打印1-1e8的偶数
for i in xrange(2, int(1e8), 2): print i
挺好的,用xrange自身提供的功能跳过了多余的奇偶性判断,赞!