在写代码时,总是遇到写着写着不知道怎么写了的情况,或者无法把自己的想法用程序表达出来,所以有时候我们需要建立一个自己的编程思路,对一个具体程序的编程有一个比较清晰的想法;因此我把自己的思路总结了一下,对多数的编程问题抽象为一些具体的步骤,使得编程问题变得具体化。想法未必具有普遍性,只是一个个人的编程思路。

一、抽象化模型

对于python的理解,首先是要明确语言是用来交流的,而编程语言是为了实现你所需要执行的功能的。python的学习,首先要明确它是一门语言,所以在开始敲代码前,你需要想清楚你要python做什么,然后用自己的语言尽可能的详细描述出来,最后翻译成为python的语言。

所以对于在python中编程的思路可以抽象为以下的过程:

        1.想好你需要用python做什么

        2.让python知道你要做什么:

            (1)用自己的语言想好做这件事情的步骤(尽可能详细)

            (2)把这些步骤翻译翻译,成为python的语言

        3.查看输出的结果(验证是否是自己需要的结果)

        4.程序的修改与调整,以及整个过程的优化

  

  这个过程和我们做数学题目是很相似的,其中重要的是如何详细的用自己的语言描述出来,这是编程的整个思路。我们在描述问题时,尽可能按照逻辑顺序来描述,就如同怎么把大象关进冰箱,其过程一共就三步:打开冰箱,装入大象,关上冰箱。之后就是把自己描述的语言翻译成为编程软件能够读懂的语言,其中遇到不会的地方,可以直接去搜索编程语句,或者可以去参考其他的算法。这就好像我们已经知道怎么把大象关进冰箱了,可是我们怎么让大象进入冰箱呢?又或者大象这么大,怎么进入冰箱?答案不唯一,如果我们想到的是用食物诱惑大象进入一个冰柜一样大小的冰箱的话,我们可以尝试着去实践来检验我们的想法。最后就是我们需要对设计的方法不断改进以及优化。
  而其中对于简单的过程,我们可能一步就能想好,并且都不需要第3和第4个步骤;但是对于难一些的问题,我们需要在想好整个事情的执行流程后,再开始对每一步进行一个具体的描述。

二、举例

1.很简单的例子:计算任意数字的相加

1.1 想好你需要python做什么:计算任意数字的相加

1.2 让python知道你要做什么:

1. 用自己的语言尽可能的详细描述问题:在python中随机输入两个数字,让其计算结果,并且显示出来。

2. 翻译:

(1).在python中随机输入两个数字​

a = input('请输入第一个数:')
b = input('请输入第二个数:')

       (2).让其计算结果  

c = a+b
    (3).显示出来  
print(c)
   总代码:
a = input('请输入第一个数:')
b = input('请输入第二个数:')
c = a+b
print(c)

  这就如同做数学题目一样,不需要记住具体的语法,只需要记住你自己思考的过程,然后找到相应的语法,再进行相应的翻译。

2.简单的例子:简单的学生管理系统

2.1 想好需要python做什么:做一个学生管理系统

2.2 让python知道你要做什么:

1 用自己的语言描述程序的过程:我需要看到系统的显示界面,然后选择相应的功能,比如我想添加学员的信息,或者删除学员(方便起见只选择两个功能,其他类似)

2 用python的语言描述:

(1).看到显示界面:

print("------请选择功能------")
print("1.添加学员")
print("2.删除学员")

    2).选择相应的功能:

从这一步开始,每个功能都需要具体化的去描述:选择功能,即当我输入1的时候,需要执行添加学员的功能,当我选择2的时候需要执行删除学员的功能,当我们选择功能里面不存在的数字时,我们需要提醒:输入有误。

以上翻译翻译就是:使用判断语句对用户输入进行判断,如果用户输入1,则调用添加学员函数,如果用户输入2,则调用删除学员函数,如果用户输入其他,则显示输入错误,具体代码如下:

user_num=int(input("请输入功能序号:")) #用户输入选择的功能
if user_num == 1: #使用判断语句对用户输入进行判断
add_information() #如果用户输入1,则调用添加学员函数
elif user_num == 2: #使用判断语句对用户输入进行判断
del_information() #如果用户输入2,则调用删除学员函数
else:
print('输入有误') #如果用户输入其他,则显示输入错误

  其中的add_imformation()和del_information()是我们执行具体功能的函数。

增加学生信息:add_imformation()函数

之后我们继续思考,怎么去添加学员:当我们选择1后,我们按照提示输入学生的信息,比如说学生的姓名,学生的性别;然后将这个保存下来,并且显示给我看,让我知道是否成功。

翻译翻译就是:用户输入1,调用添加学员函数,首先使用input函数让用户进行信息的输入,然后把用户输入的信息保存在列表中,最后打印在界面中。

值得注意的几点是:我们把用户的信息保存在列表中,需要创建一个列表,因为这个列表里面的信息不仅仅是在增加学员信息这个函数中,后面我们还会被用到,所以需要将其定义在函数之外,使其变成全局变量,并且在函数内更改时需要申明它是全局变量。并且,信息的输入基本都是需要配对的,如:{姓名:张三},所以我们需要把存储的数据变成字典,然后保存在列表里面(到了详细的地方,对语句不知道或者不懂,就可以直接百度搜索,但是一定要想好到底要怎么样去实现这个功能)

代码如下:

student_information = [] #创建一个全局列表
def add_information():
#首先使用input函数让用户进行信息的输入
new_name = input("请输入姓名:")
new_gender = input("请输入性别:") global student_information #申明全局变量 #新增字典(用来存储相对于的信息)
student_information_new = {} #把用户输入的信息保存在列表中
student_information_new['name'] = new_name
student_information_new['gender'] = new_gender #在student_information中追加字典student_information_new
student_information.append(student_information_new)
print(student_information)

  这个函数是有一些问题,但是我们先把想到的翻译好,写好,最后调整优化程序的时候再来解决里面没有想到的问题。

删除学员信息:del_information()

删除学员信息:我们输入要删除的学员姓名(可以是其他的具有唯一性的指定信息,这里假设学员姓名不重复),然后然python把信息删除掉,最后在界面显示删除成功。

翻译翻译就是:首先使用输入函数input得到需要删除的学生信息姓名,然后在for语句中用这个姓名去遍历存储所有学生信息的student_information列表,从而找到该生姓名,最后删除该姓名对应的列表信息,并且在显示界面提示删除成功。

代码如下:

def del_information():
del_name=input('请输入要删除学生信息的姓名:')
global student_information #申明student_information是全局变量
for i in student_information: #让i遍历student_information
if i['name'] == del_name:
student_information.remove(i)
print('删除成功')

   值得注意的是:在编写程序时,如果一个字符串没有定义,则一定要加上 '  ',如同上面代码中的name一样。

在把所有的代码打上去后会发现一个很严重的问题,在页面的代码中,add_information()和del_information() 是标着红线的。这个是语句顺序原因,我们需要先申明函数,才能够调用函数。

整个代码如下:

print("------请选择功能------")
print("1.添加学员")
print("2.删除学员")
student_information = [] #创建一个全局列表
def add_information():
#首先使用input函数让用户进行信息的输入
new_name = input("请输入姓名:")
new_gender = input("请输入性别:") global student_information #申明全局变量 #新增字典(用来存储相对于的信息)
student_information_new = {} #把用户输入的信息保存在列表中
student_information_new['name'] = new_name
student_information_new['gender'] = new_gender #在student_information中追加字典student_information_new
student_information.append(student_information_new)
print(student_information)
def del_information():
del_name=input('请输入要删除学生信息的姓名:')
global student_information #申明student_information是全局变量
for i in student_information: #让i遍历student_information
if i['name'] == del_name:
student_information.remove(i)
print('删除成功') user_num=int(input("请输入功能序号:")) #用户输入选择的功能
if user_num == 1: #使用判断语句对用户输入进行判断
add_information() #如果用户输入1,则调用添加学员函数
elif user_num == 2: #使用判断语句对用户输入进行判断
del_information() #如果用户输入2,则调用删除学员函数
else:
print('输入有误') #如果用户输入其他,则显示输入错误

  这样的话,一个简单的不完善的学生管理系统就算是勉强完成了,但是其中还是有很多问题的,比如添加学员中,要是已经有了该生的信息应该怎么办;在删除学员信息中,要是没有该学员的信息应该怎么办;上面的代码只能运行一次,所以怎么让它不主动退出,而是人为的选择退出。而且还有其他很多功能,如修改、存储、调用学员信息应该如何做到。

这些问题的解决思路也是参考以上的步骤,先用自己的语言尽可能的详细描述,然后翻译成为编程软件的语言。

比如说我们要写一个修改学员信息的函数,这可以参考删除学员信息的函数。首先用自己的语言描述:我们输入要修改的学员信息的姓名,然后选择需要修改的地方,最后提示是否修改成功。

翻译翻译就是:首先用input语句得到需要修改信息的学员姓名,然后用for语句去遍历整个存储信息的列表,找到后提示用户输入需要修改的信息(如:选择修改选项:1.姓名,2.性别),最后修改列表中的信息,并且提示修改成功。

再比如说要存储学员的信息,我们可以想是不是需要创建一个文件来保存信息,这样的话需要使用操作文件的代码语句等等,诸如此类。

这些就属于后期程序的调整以及优化的过程了,在这个过程中我们需要去处理程序中出现的bug,以及是否能将代码改进(比如用类来定义学生和管理员),是否能够让功能更加完善等等。这就需要自己一个个的去尝试,具体方法也可以参考以上四个步骤,其中哪里不会搜百度,或者自己查看python的语法,甚至可以借鉴其他代码来完成。但是要记住一点,要是编程能力不够,先不要要求自己一步到位,先想好思路,然后按照思路写好程序,最后再去慢慢的优化。一个好的算法程序就是需要程序员一步一步的慢慢优化而来。

总结

对于简单的项目以及程序都可以用这个抽象的模型去套用,不过这个模型并不是很完善,主要思想就是先用自己的语言描述程序的每一步,然后想办法翻译成编程软件的语言,最后对代码进行优化和调整。这个本身就是编写程序的一个思路过程,但是如果有想法时,按照模型慢慢去套用,慢慢去详细化的话,会促使得自身更加想去实现它,因为你的想法正在一步步的具体化,而且通过程序的语法和算法的帮助,还能够真正的去实现它。

很重要的一点是:要把自己的想法详细化,尝试用自己学过的程序语法知识去实现它;如果哪一步无法实现,就去查找资料,或者替换成另一种方法,最好不要因为自己无法实现哪个步骤而放弃了自己的想法。

个人记录:对于python学习的反思和总结(一)的更多相关文章

  1. CodeCombat代码全记录(Python学习利器)--Kithgard地牢代码1

    Kithgard地牢注意:在调用函数时,要在函数的后面加上括号内容,否则在python中,将不会认为你在调用这个函数内容,而你的英雄将像木头一样站在原地不会执行上左下右的移动!!! hero.move ...

  2. 46 python学习笔记

    0 引言 之前用python跑过深度学习的代码,用过一段时间的jupiter和tensorflow:最近在Ubuntu下搭建起了VSCode + Anaconda的python开发环境,感觉很好用,尤 ...

  3. 大学四年的Python学习笔记分享之一,内容整理的比较多与仔细

    翻到以前在大学坚持记录的Python学习笔记,花了一天的时间整理出来,整理时不经回忆起大学的时光,一眨眼几年就过去了,现在还在上学的你们,一定要珍惜现在,有个充实的校园生活.希望这次的分享对于你们有学 ...

  4. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

  5. Python学习记录day5

    title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...

  6. 记录Python学习中的几个小问题

    记录Python学习中的几个小问题,和C#\JAVA的习惯都不太一样. 1.Django模板中比较两个值是否相等 错误的做法 <option value="{{group.id}}&q ...

  7. [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source …

    [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source - [Pyth ...

  8. python学习第三次记录

    python学习第三次记录 python中常用的数据类型: 整数(int) ,字符串(str),布尔值(bool),列表(list),元组(tuple),字典(dict),集合(set). int.数 ...

  9. Python学习记录day8

    目录 Python学习记录day8 1. 静态方法 2. 类方法 3. 属性方法 4. 类的特殊成员方法 4.1 __doc__表示类的描述信息 4.2 __module__ 和 __class__ ...

随机推荐

  1. VSCode——滚动鼠标控制字体大小

    第一步:找到设置 文件-->首选项-->设置 第二步:打开settings.json文件 第三步:在settings.json文件中添加 "editor.mouseWheelZo ...

  2. Pytest 系列(24)- allure 环境准备

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html allure 和 pytest 相 ...

  3. Git 系列教程(10)- 仓库别名

    Git 别名 前言 Git 并不会在你输入部分命令时自动推断出你想要的命令 如果不想每次都输入完整的 Git 命令,可以通过 git config 文件来轻松地为每一个命令设置一个别名 $ git c ...

  4. 记录一下Vray5中文汉化版本中导出EXR或vrimg多通道文件的那些坑和解决方法

    最近在给一个培训机构代课,学生英语基础差,就安装了Vray5的中文版,噩梦从此开始. 做过合成的都知道,需要输出多通道到NUKE或者AE中进行合成,通常情况下把多个pass分成不同的文件对硬盘反复读写 ...

  5. DOM对象入门

    1.概念 2.script最好是放在后面,等html的文档内容加载完毕,不然获取不到 3.事件基本操作 第一种绑定事件html和js耦合度高,用第二种 4.灯开关事件使用

  6. FastAPI(2)- 快速入门

    安装 FastAPI pip install fastapi # 将来需要将应用程序部署到生产环境可以安装 uvicorn 作为服务器 pip install uvicorn 最简单的代码栗子 fro ...

  7. Mybatis-基本学习(上)

    目录 Mybatis mybatis开始 -----环境准备 一.简介 1.什么是MyBatis 2.持久化 3.持久层 4.为什么需要Mybatis? 二.第一个Mybatis程序 1.搭建环境 1 ...

  8. python动态网站爬虫实战(requests+xpath+demjson+redis)

    目录 前言 一.主要思路 1.观察网站 2.编写爬虫代码 二.爬虫实战 1.登陆获取cookie 2.请求资源列表页面,定位获得左侧目录每一章的跳转url(难点) 3.请求每个跳转url,定位右侧下载 ...

  9. 使用python实现xls批量转为xlsx

    利用win32库来实现 # -*- coding:utf-8 -*- import os import win32com.client as win32 #需要转换的数据目录 inputdir = u ...

  10. 制作python程序windows安装包(飞机大战源码)

    本文以飞机大战源码为例: 1.首先使用pyinstaller -w xxx.py打包   -w的意思是不显示命令行:飞机大战源码由多个.py文件以及一些图片,音乐文件组成,我们将main.py打包, ...