python编程基础(一):编程思想

编程核心思想:以前我java老师曾告诉我们编程思想:初级选手应该从内而外、从小到大,先从实现一个简单的小功能开始,一点一点往里加,最后让功能变复杂(简单->复杂:可以先假定最理想、最简单的数据,在最理想数据的基础上实现之后,再测试修改麻烦的数据模式);而高级选手喜欢从上而下,从难到易,他们倾向于先搭建一个整体的结构框架,再由外而内地一点点地填充起内部简单语句。

--> 当一个函数或算法太复杂时,可以分块完成。比如,统计词频可以分为输入、统计、输出;SimHash算法可能分为扩展、加减权重、收缩等步骤。

--> 编程的精神是开源和共享,网络上有很多可以实现某个功能的代码片段,可以粘贴复制重复利用,而不用自己从头到尾苦心孤诣地一点点写。

工程思维

  1. 需要再三再三再三明确具体需求。工程需求是最重要的,一定要仔细反复讨论,容不得半点马虎、模糊或不理解
  2. 先形成一个规范、合理、准确的算法。
  3. 然后,再用编程将其实现。

==>科研和工程的区别

  • 科研注重的是研究,讲求新;而工程注重的是应用,讲求用,方法不必最新,能满足需求应用就行。
  • 科研注重的是研究,关注研究的背景和意义;而工程注重的是方法能不能实现工程需求,方法能不能在实际环境中达到可用性。

目录

 

1. 双层循环思想

2. 迭代思想

3. 递归思想


1. 双层循环思想

循环、迭代前提一定要弄清楚循环条件循环操作对象

应用场景:重复反馈过程的活动,不过每一次重复都需要重新遍历原数组。比如:最长回文字符串

  •  遍历一个数组或序列并在这个数组上进行操作,可以使用双层循环控制。比如:
  •  依次递减需要检测字符串的长度,直到子字符串为空,长度为0,这是一个典型的while循环呀
  •  跳出双层循环。break只跳出单层循环,双层循环需要两个break和一个if trigger布尔逻辑判断。

应用方法:循环条件为长度判断时->外层while循环,内层for循环;循环条件为中心或索引判断时->外层for循环,内层for循环

应用案例:最大回文字符串;

--> 双层循环与迭代区别:双层循环每一次重复都是对原数组进行操作;迭代是每一次重复的结果会作为下一次迭代的初始值,对更新后的数组进行操作。

# 最大回文字符串-枚举法
def verifyreverse(st):
    current = len(st)
    trigger = False
    while current > 0:
        for i in range(len(st) - current + 1):
            tmp = st[i:i + current]
            # print(tmp)
            if tmp == tmp[::-1]:
                target = tmp
                trigger = True
                break
        current -= 1
        if trigger:
            break
    return target

print verify reverse("efbaabdi")

2. 迭代思想

迭代(iteration):重复反馈过程的活动,每一次迭代的结果会作为下一次迭代的初始值。(A重复调用B

应用场景:重复反馈过程的活动,不过每一次迭代的结果会作为下一次迭代的初始值,对更新后的数组进行操作。

应用方法:left_index = 0; right = len(string) - 1 

应用案例:二分法查找元素和元素索引

--> 迭代和递归区别:迭代是A重复调用B;递归是A重复调用A

3. 递归思想

递归(recursion):递归常被用来描述以自相似方法重复事物的过程,在数学和计算机科学中,指的是在函数定义中使用函数自身的方法。(A调用A

 

你可能感兴趣的:(#,python,programming,python编程思想)