python小练习集锦
- 请至少用一种方法下面字符串的反转?
- python2和3通用
-
In [2]: a = 'abc' In [3]: a[::-1] Out[3]: 'cba'
python2中的
-
In [16]: a = 'abc' In [17]: b = reversed(a) In [18]: ''.join(list(b)) Out[18]: 'cba'
- 请手写一个lambda函数
-
In [6]: d = lambda x : x**2 In [7]: d(3) Out[7]: 9
- 请用至少一种方法删除下面list里面的重复元素
-
In [10]: a = [1,2,3,4,5,6,7,4,5,6] In [11]: b = set(a) In [12]: a = list(b) In [13]: a Out[13]: [1, 2, 3, 4, 5, 6, 7]
- 请手写一个函数,用来取出1—100(均包含)中9的倍数或者有数字9的所有整数
In [14]: [x for x in range(1,101) if x%10 == 9 or x%9 == 0] Out[14]: [9, 18, 19, 27, 29, 36, 39, 45, 49, 54, 59, 63, 69, 72, 79, 81, 89, 90, 99]
- Python里面如何实现tuple和list的转换
-
In [17]: a = [1,2] In [18]: type(a) Out[18]: list In [19]: a = tuple(a) In [20]: a Out[20]: (1, 2) In [21]: type(a) Out[21]: tuple In [22]: a = list(a) In [23]: type(a) Out[23]: list
- 下面代码会输出什么:
def f(x,l=[]):
for i in range(x):
l.append(i*i)
print l
f(2)
f(3,[3,2,1])
f(3)
# 答案 In [31]: f(2) [0, 1] In [32]: f(3,[3,2,1]) [3, 2, 1, 0, 1, 4] In [33]: f(3) [0, 1, 0, 1, 4]
- 请简述python中单例模式的特点,并手写一个单例模式?
-
View Code1 class Person(object): 2 is_first = None 3 is_first_init = None 4 def __new__(cls, *args): 5 print('--new--') 6 if not cls.is_first: 7 cls.is_first = object.__new__(cls) 8 return cls.is_first 9 return cls.is_first 10 11 def __init__(self, age): 12 print('--init--') 13 if not self.is_first_init: 14 self.age = age 15 self.is_first_init = True 16 17 18 p = Person(18) 19 print(p.age) 20 print(id(p)) 21 22 23 p2 = Person(22) 24 print(p.age) 25 print(id(p2))
在创建一个实例对象时
实际上分两部完成
1调用__new__方法返回实例对象的引用
2紧接着传递 new方法返回的引用 调用__init__方法对类进行初始化的操作
注:在调用__new__方法的时候相当于把类名传给了new方法,所 以一般至少有一个参数
如果在创建实例对象的时候传递了实参,在调用new方法的时候也给传递了一份所以一般需要写*args处理 -
保证一个类仅有一个实例,即为单例模式。 使用场景: 一个全局使用的类频繁地创建与销毁,需要控制实例数目,节省系统资源的时候。 -
特点:
-
单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
- 写出下列代码运行结果:
-
import copy a = [1, 2, 3, 4, ['a', 'b']] b = a c = copy.copy(a) d = copy.deepcopy(a) a.append(5) a[4].append('c') print 'a = ', a print 'b = ', b print 'c = ', c print 'd = ', d答案
In [4]: a Out[4]: [1, 2, 3, 4, ['a', 'b', 'c'], 5] In [5]: b Out[5]: [1, 2, 3, 4, ['a', 'b', 'c'], 5] In [6]: c Out[6]: [1, 2, 3, 4, ['a', 'b', 'c']] In [7]: d Out[7]: [1, 2, 3, 4, ['a', 'b']]
- 请手写一个匹配ip的正则表达式
-
re.match(r'^([1-9]?[1-9]|[1][\d][\d]|[2][0-4][\d]|[2][5][0-5])\.([1-9]?[\d]|[1][\d][\d]|[2][0-4][\d]|[2][5][0-5])\.([1-9]?[\d]|[1][\d][\d]|[2][0-4][\d]|[2][5][0-5])\.([1-9]?[\d]|[1][\d][\d]|[2][0-4][\d]|[2][5][0-5])$','1.0').group()
1元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有20元钱,最多可以喝到几瓶汽水?
-
def reckon(num): if num == 1: return 1 # 如果借一瓶就返回 2 if num%2 == 0: print(num,'-') return num + reckon(num//2) else: print(num) return num-1 + reckon(num//2+1) if __name__ == '__main__': res = reckon(20) print(res)


浙公网安备 33010602011771号