几个基础 Python 练习
- 1.编写代码,打印 1-1 亿之内的偶数
def even_maker(x):
# generator
# 遇到 yield 语句返回,再次执行时从上次返回的 yield 语句处继续执行。
g = (i for i in range(1, int(x/2 + 1)))
for i in g:
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]
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
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*]
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