zoukankan      html  css  js  c++  java
  • 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即可

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

  • 相关阅读:
    ConvertUtils的理解
    mysql存储过程 详细注释
    线程方法
    集合的方法
    StringStringBufferStringBuilder
    Java基础知识点1
    Java基础知识点
    索引+sql优化
    Oracle数据库02
    Oracle数据库01
  • 原文地址:https://www.cnblogs.com/GF66/p/9785497.html
Copyright © 2011-2022 走看看