美文网首页
Daily Python practice note

Daily Python practice note

作者: rua_rua_rua | 来源:发表于2017-04-17 23:21 被阅读0次

    From廖雪峰的官方网站----Python3_学习记录


    17\04\2017


    Some useful tips

    |字符| ASCII| Unicode |UTF-8|
    | ------------- |:-------------:|: -----:|:----|
    |A |01000001 |00000000 01000001 |01000001
    |中 |x |01001110 00101101 |11100100 10111000 10101101

    Usually we use these at the front of our python programme

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    

    常见的占位符有:

    |%d |整数| int|
    | ---- |:-------------:|: -----:|
    |%f |浮点数|float
    |%s |字符串|string
    |%x |十六进制整数|decimal

    >>> 'Age: %s. Gender: %s' % (25, True)
    'Age: 25. Gender: True'
    

    About ''

    >>> print('I\'m ok.')
    I'm ok.
    >>> print('I\'m learning\nPython.')
    I'm learning
    Python.
    >>> print('\\\n\\')
    \
    \
    >>> print('\\\t\\')
    \       \
    >>> print(r'\\\t\\')
    \\\t\\
    >>> print('''line1
    ... line2
    ... line3''')
    line1
    line2
    line3
    

    Tower of Hanoi

    The objective of the puzzle is to move the entire stack to another rod, obeying the following simple rules:

    1. Only one disk can be moved at a time.
    2. Each move consists of taking the upper disk from one of the stacks and placing it
      on top of another stack i.e. a disk can only be moved if it is the uppermost disk
      on a stack.
    3. No disk may be placed on top of a smaller disk.
    Tower of Hanoi

    To solve this problem in python, we need to use recursion.

    #where n is the number of disk on A 
    #Generally it's like mathematical induction, find n=1 and n=n-1, then get the answer
    def move(n, a, b, c):
        if n = 1:
            print(a, '-->', c)
        else:
            move(n-1, a, c, b)#n-1 disks move from A to B as buffer
            move(1, a, b, c)#move the biggest disk from A to C
            move(n-1, b, a, c)#move the rest n-1 disks left on B
    move(3, 'A', 'B', 'C')
    

    expected output is
    A --> C
    A --> B
    C --> B
    A --> C
    B --> A
    B --> C
    A --> C

    
    ***
    #####Pascal's triangle (杨辉三角)
              1
            1   1
          1   2   1
        1   3   3   1
    To solve this problem in python, we can use a **generator**.
    

    -- coding: utf-8 --

    def triangles():
    f = [1]
    while True:
    yield f
    f = [f[0]] + [f[i-1] + f[i] for i in range(len(f)) if i>0] + [f[-1]]
    # Or in another way
    # f = [1] + [f[i-1] +f[i] for i in range(len(f)) if i>0] + [1]

    n = 0
    for t in triangles():
    print(t)
    n = n + 1
    if n == 10:
    break

    > 
    

    The expect output is:
    [1]
    [1, 1]
    [1, 2, 1]
    [1, 3, 3, 1]
    [1, 4, 6, 4, 1]
    [1, 5, 10, 10, 5, 1]
    [1, 6, 15, 20, 15, 6, 1]
    [1, 7, 21, 35, 35, 21, 7, 1]
    [1, 8, 28, 56, 70, 56, 28, 8, 1]
    [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

    
    ***
    
    #####Iterable and Iterator
    可以直接作用于for循环的对象统称为可迭代对象:Iterable。
    可以使用isinstance()判断一个对象是否是Iterable对象:
    

    from collections import Iterable
    isinstance([], Iterable)
    True
    isinstance({}, Iterable)
    True
    isinstance('abc', Iterable)
    True
    isinstance((x for x in range(10)), Iterable)
    True
    isinstance(100, Iterable)
    False

    
    可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
    可以使用isinstance()判断一个对象是否是Iterator对象:
    

    from collections import Iterator
    isinstance((x for x in range(10)), Iterator)
    True
    isinstance([], Iterator)
    False
    isinstance({}, Iterator)
    False
    isinstance('abc', Iterator)
    False

    
    把list、dict、str等Iterable变成Iterator可以使用iter()函数:
    

    isinstance(iter([]), Iterator)
    True
    isinstance(iter('abc'), Iterator)

    True

    
    ***
    #####Map/Reduce
    Simple example:
    
    ![Map()_example](https://img.haomeiwen.com/i5688533/a3401d9f91d45a83.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    In Python code:
    

    def f(x):
    ... return x * x
    ...
    r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
    list(r)
    [1, 4, 9, 16, 25, 36, 49, 64, 81]

    
    Simple reduce example:
    >Combine with **map()** and **lambda function**, change str into int.
    
    

    from functools import reduce

    def char2num(s):
    return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]

    def str2int(s):
    return reduce(lambda x, y: x * 10 + y, map(char2num, s))

    Transform String '123.456' into Float 123.456:
    

    -- coding: utf-8 --

    from functools import reduce

    def str2float(s):
    def str2f(s):
    return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
    return reduce(lambda x, y : x*10+y, map(str2f, s[:s.find('.')])) + reduce(lambda x, y : x/10+y, map(str2f, s[:s.find('.'):-1]))/10

    print('str2float('123.456') =', str2float('123.456'))

    ***
    end of 17/04/2017
    ***
    19/04/2017
    ***
    #####enumerate
    一般情况下对一个列表或数组既要遍历索引又要遍历元素时,会这样写:
    

    for i in range (0,len(list)):
    print i ,list[i]

    使用enumerate后:
    
    

    for index,text in enumerate(list)):
    print index ,text

    相关文章

      网友评论

          本文标题:Daily Python practice note

          本文链接:https://www.haomeiwen.com/subject/vpcxzttx.html