从python公众号里面看到了几道python的练习题,就拿来练练手,结果上手了发现自己还是特别水,不是很难的8道题,我只做出来5道,其中还3道题卡住了,边查边做的。原题链接在这里:http://python.jobbole.com/83641/

1. 编写代码, 打印1-1亿之内的偶数

看完题目想都没想就直接写了一句:

 print [i for i in xrange(1, 10**9) if i % 2 == 0] 

开始跑结果。然后。死机了。重启时候反省了一下,嗯,的确是有点二,一下生成五千万个元素的列表,电脑没炸了就算它好脾气了。可是,总不能一个for循环打印吧,那也太low了。考虑了一下,还是用协程靠谱一点。于是重新写了一个(在QQ群里看到别人写的稍微改良了一点):

 def even_maker(x):
for i in (i for i in xrange(1, 50000001)):
yield i * 2 for i in even_maker(10**9):
print i, ',',

效率不太高,感觉应该有更好的办法,不过我暂时也没想继续深入想了。

2. 写一个函数, 用正则表达式清除字符串中[]和其中的内容。s = "[lol]你好,帮我把这些markup清掉,[smile]。谢谢!"

这个没什么难度,用正则处理正合适。

 s = "[lol]你好,帮我把这些markup清掉,[smile]。谢谢!"
print re.sub('\[.*?\]', '', s)

一行搞定(不许吐槽这是两行)。

3. 请使用python, 对下面的函数进行处理,

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

在函数被调用时打印耗时详情

<function name: hello>
<function call begin>
hello, tom
<function call end>
[timecosts: 3.81469726562e-06s]

典型的装饰器。不过我对装饰器是真的不熟,基本上都靠蒙。之前转载了一遍博客:http://www.cnblogs.com/anpengapple/p/5068580.html 是装饰器的,写的不错,我差不多每次都要照这个抄。这次这个装饰器已经是相当简单了。

 def name_and_time_func(func):
def name_time(*param):
start_time = datetime.datetime.now()
print '<function name: %s>', func.__name__
print '<function call begin>'
func(*param)
print '<function call end>'
time.sleep(1) # 可以不加,但是不加的话看不出来时间间隔
print '[time costs: %s]', datetime.datetime.now() - start_time
return name_time @name_and_time_func
def hello(name):
print "hello, %s" % name hello('apple')

4. 写一个函数, 将驼峰命名法字符串转成下划线命名字符串,如GetItem -> get_item,getItem -> get_item

开始不知道该怎么做,就写了个循环,挨个字符处理,如果是大写,就改成下划线+小写的形式。但是觉得这么写实在是太low了。群里同学指点用sed,然而我只是要练习python啊又不是玩shell。后来在网上查了查re.sub的用法。之前不太会用,以为只能则匹配到的字符串替成同一个字符串。查过才知道原来第二个参数可以用函数或者lambda表达式对匹配到的字符串逐一替换。有了这个强大的武器可就方便多了。

 def camel_name(name):
_name = re.sub('[A-Z]', lambda x: '_' + x.group(0).lower(), name)
return _name if _name[0] != '_' else _name[1:] # 替换完之后有可能第一个字母是下划线,需要去掉 names = ['GetItem', 'getItem', 'getitem']
for i in names:
print camel_name(i)

5. 打印列表:[1, 2, 3, 4...n],n=20;请编写代码打印如下规律的输出:

        1 [1*, 2, 3, 4, 5]
2 [1, 2*, 3, 4, 5]
3 [1, 2, 3*, 4, 5]
4 [2, 3, 4*, 5, 6]
5 [3, 4, 5*, 6, 7]
6 [4, 5, 6*, 7, 8]
...
20 [16, 17, 18, 19, 20*]

差不多就是网页中的翻页格式吧。这个也没有太大难度,不过我还是小卡一下,主要是强迫症犯了,想把这个改成更通用一点的形式。调了几次之后效果还是不错的,总页数和显示出来的页码数量可以自己传参数,*页码总会出现在中间。当页码大于总页数或小于1的时候也会自行调整。

 def page_print(page, total=20, width=5):
# page是当前页码,就是标*的页码
# total是总页码
# width是显示的页数(*页码会出现在中间) # 设置打印页码,避免超出范围
if page < 1:
page = 1
if page > total:
page = total # 设置起始页码
if page < width / 2 + 1:
start = 1
elif page > total - width / 2:
start = total - width
else:
start = page - width / 2 ret = str(page) + '['
for i in xrange(start, start + width + 1):
if i == page:
ret += '*'
ret += str(i)
if i != start + width:
ret += ', '
else:
ret += ']\n' return ret t = 18
for i in xrange(1, t + 1):
print page_print(page=i, total=t, width=8)

6. 写一个程序模拟银行排队, 只有一个队伍, 一个用户进入时允许插队(进入队伍任意位置), 但要保证每次导致队伍变更, 队伍中受影响的人都收到通知

Customer A line up at position 11
Customer B: order changed to 12
Customer C: order changed to 13
Customer D: order changed to 14

不会。感觉像是某个设计模式的东西,我对设计模式了解的不多,暂时没想到什么好办法。强行写是能写的,不过程序写出来肯定会很丑。等有空再想想(潜台词是懒得动脑了)。

7. 用户系统, 存在相互关注的动作, 当进入某个人的个人主页, 需要展示其粉丝数, 关注数, 粉丝列表以及关注列表. 请简要描述解决方案, 包括db建模/数据层/业务层, 以及应对高并发/关注取关等情况的处理逻辑。

略。

8. 给定一些NxN的矩阵,对于任意的路线,定义其【和】为其线路上所有节点的数字的和,计算从左上角到右下角的路线和最小值。每条路线只能从某一点到其周围(上下左右)的点,不可斜行。 例如,

4,6
2,8 的路线和最小值为 4-2-8 14
1,2,3
4,5,6
7,8,9 的路线和最小值为 1-2-3-6-9 21

程序只需输出最小和值即可(一个数字)

这是典型的动态规划问题啊。当年学动态规划时候,算法导论书上的第一个例子流水线问题就是这个东西。不过然而但是可是,动态规划我几乎忘光了。先放在这里,过几天写篇日志补上。

几个python练习题的更多相关文章

  1. Python练习题 028:求3*3矩阵对角线数字之和

    [Python练习题 028] 求一个3*3矩阵对角线元素之和 ----------------------------------------------------- 这题解倒是解出来了,但总觉得 ...

  2. Python练习题 027:对10个数字进行排序

    [Python练习题 027] 对10个数字进行排序 --------------------------------------------- 这题没什么好说的,用 str.split(' ') 获 ...

  3. Python练习题 026:求100以内的素数

    [Python练习题 026] 求100以内的素数. ------------------------------------------------- 奇怪,求解素数的题,之前不是做过了吗?难道是想 ...

  4. Python练习题 025:判断回文数

    [Python练习题 025] 一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. ---------------------------------------- ...

  5. Python练习题 024:求位数及逆序打印

    [Python练习题 024] 给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. ---------------------------------------------- ...

  6. Python练习题 004:判断某日期是该年的第几天

    [Python练习题 004]输入某年某月某日,判断这一天是这一年的第几天? ---------------------------------------------- 这题竟然写了 28 行代码! ...

  7. Python练习题-1.使用匿名函数对1~1000求和,代码力求简洁。

    Python 练习 标签(空格分隔): Python Python练习题 Python知识点 一.使用匿名函数对1~1000求和,代码力求简洁. 答案: In [1]: from functools ...

  8. PYTHON练习题 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数。

    Python 练习 标签: Python Python练习题 Python知识点 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数,如果大于预设的 ...

  9. python 基础 2.8 python练习题

    python 练习题:   #/usr/bin/python #coding=utf-8 #@Time   :2017/10/26 9:38 #@Auther :liuzhenchuan #@File ...

  10. Python练习题2

    如果真的想学精,学什么都不是好学的,如果真的想把Python学的出神入化,几乎自己想做什么都可以,就要下定恒心,坚持下去. 接下来继续更新Python练习题2,通过更新前一部的练习题让自己也学到了不少 ...

随机推荐

  1. CF 675D——Tree Construction——————【二叉搜索树、STL】

    D. Tree Construction time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  2. Golang教程:goroutine信道

    在上一篇教程中,我们讨论了如何使用协程实现并发.在这篇教程中,我们将讨论信道以及如何使用信道实现协程间通信. 什么是信道 信道(Channel)可以被认为是协程之间通信的管道.与水流从管道的一端流向另 ...

  3. bzoj 5368: [Pkusc2018]真实排名

    Description 小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是 :成绩不小于他的选手的数量(包括他自己).例如如果3位选手的成绩分别是[ ...

  4. 【AAA】AAA协议介绍

    AAA AAA简介 AAA是认证(Authentication).授权(Authorization)和计费(Accounting)的简称,是网络安全中进行访问控制的一种安全管理机制,提供认证.授权和计 ...

  5. JavaScript call 和apply 的理解

    这两个方法对于一些新手而言难耐弄清他们到底是怎么回事,对我我来讲我对call和apply的方法理解的也比较含糊.今天闲来无事准备彻底搞call和apply到底是怎么回事.本着互联网分享精神.我将我自己 ...

  6. 远程桌面下启动MATLAB时的License Manager Error -103错误

    之前使用学校提供的正版lincense,是通过MATLAB 官网注册下载的MATLAB 2017a,远程登录可用打开.后来学校停止购买了,时间紧迫,网上下载了一个standalone的lincense ...

  7. Tomcat服务器配置https认证(使用keytool生成证书)

    一.证书生成 1.生成服务器证书 (1)打开打开命令控制台,进入jdk的bin目录 cd D:\Program Files\jdk1.6.0_45\bin (2)keytool为Tomcat生成证书( ...

  8. MySQL root 密码修改

    小伙伴要在以前的服务器上装个代码版本控制的软件,要用到数据库,可是想来找去root密码还是忘了,其他已经安装的服务都是用的专用账户配置文件里要找不到root用户的密码.用以下方法将密码强制修改掉: 1 ...

  9. BFC(Box Formatting Context)的原理

    BFC 已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等).虽然我知道如何利用 BFC 解决这些问题, ...

  10. vue2.0中v-on绑定自定义事件的理解

    vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑定. 每个Vue实例都实现了[事件接口],即: 1.使用 $on(eventName) 监听事件 ...