python实现简单问题(汉诺塔、杨辉三角等)

最近在学习python3.6,发现了很多之前新功能,而且很实用
然后之前也没用python写过一些之前C解决的小问题,最近在学习的时候也在练习把之前的小问题实现

汉诺塔问题

代码:

def move(n, a, b, c):
    if n == 1:
        print('move', a, '-->', c)
    else :
        move(n-1, a, c, b)
        move(1, a, b, c)
        move(n-1, b, a, c)

思想:使用中间位置先暂时存放,先把a放到b,然后把下一个a移动到c,之后把b移动到c


杨辉三角问题

                 1
               1  1
              1 2 1
             1 3 3 1
            1 4 6 4 1
          1 5 10 10 5 1
              .....

代码:

def triangles(m):
    L = [1]
    n=1
    while n<=m:
        yield L
        L = [L[x] + L[x+1] for x in range(len(L)-1)]#计算中间值
        L.insert(0,1)#给头添加1
        L.append(1)#给尾添加1
        n+=1

思想:使用了python的generator和列表生成式,generator和函数的区别是,函数是按照代码顺序执行,遇到return或循环最后一行则退出;generator则是调用一次yield语句执行一次,停留到yield语句执行后的状态。

字符串转成浮点小数问题

代码:

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 str2float(s):
    n = s.index('.')
    num = 0
    def fn(x, y):
        return x * 10 + y
    num += reduce(fn, map(char2num, s[:n]))
    num += reduce(fn, map(char2num, s[n+1:]))/10**len(s[n+1:])
    return num

思路:第一个函数使用字典将字符转化为整形,先使用index属性找到小数点所在的位置,然后分为两部分加,第一部分使用正常的reduce和map,第二部分则计算完后除以10的len(s[n+1:])次方,最后返回num即可

暂且就是这些,后面练习到了还会更新。

猜你喜欢

转载自blog.csdn.net/sun_white_boy/article/details/78660090
今日推荐