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中单例模式的特点,并手写一个单例模式?
  •  1 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))
    View Code

    在创建一个实例对象时
    实际上分两部完成
    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)
    

      

posted @ 2017-08-29 14:00  凯哥吧  阅读(140)  评论(0)    收藏  举报