个人记录:对于python学习的反思和总结(一)
在写代码时,总是遇到写着写着不知道怎么写了的情况,或者无法把自己的想法用程序表达出来,所以有时候我们需要建立一个自己的编程思路,对一个具体程序的编程有一个比较清晰的想法;因此我把自己的思路总结了一下,对多数的编程问题抽象为一些具体的步骤,使得编程问题变得具体化。想法未必具有普遍性,只是一个个人的编程思路。
一、抽象化模型
对于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
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学习的反思和总结(一)的更多相关文章
- CodeCombat代码全记录(Python学习利器)--Kithgard地牢代码1
Kithgard地牢注意:在调用函数时,要在函数的后面加上括号内容,否则在python中,将不会认为你在调用这个函数内容,而你的英雄将像木头一样站在原地不会执行上左下右的移动!!! hero.move ...
- 46 python学习笔记
0 引言 之前用python跑过深度学习的代码,用过一段时间的jupiter和tensorflow:最近在Ubuntu下搭建起了VSCode + Anaconda的python开发环境,感觉很好用,尤 ...
- 大学四年的Python学习笔记分享之一,内容整理的比较多与仔细
翻到以前在大学坚持记录的Python学习笔记,花了一天的时间整理出来,整理时不经回忆起大学的时光,一眨眼几年就过去了,现在还在上学的你们,一定要珍惜现在,有个充实的校园生活.希望这次的分享对于你们有学 ...
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
- Python学习记录day5
title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...
- 记录Python学习中的几个小问题
记录Python学习中的几个小问题,和C#\JAVA的习惯都不太一样. 1.Django模板中比较两个值是否相等 错误的做法 <option value="{{group.id}}&q ...
- [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source …
[Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source - [Pyth ...
- python学习第三次记录
python学习第三次记录 python中常用的数据类型: 整数(int) ,字符串(str),布尔值(bool),列表(list),元组(tuple),字典(dict),集合(set). int.数 ...
- Python学习记录day8
目录 Python学习记录day8 1. 静态方法 2. 类方法 3. 属性方法 4. 类的特殊成员方法 4.1 __doc__表示类的描述信息 4.2 __module__ 和 __class__ ...
随机推荐
- 如何获取 Android CPU 核心数 (Java/C++)
1 前言 最近学习Power HAL方面相关知识,透过Power HAL 去配置CPU的Freq需要先确定 CPU 核数.便先了解如何获取 Android CPU 核数. 2 Java层获取方式 // ...
- UNION / UNION ALL 区别
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: Union All:对两个结果集进行并集操作,包括重复行,不进行排序: 使用union all: select top 5 ...
- 20210809 Merchant,Equation,Rectangle
做过,但当时咕了 T3 Merchant 先特判 \(t=0\),之后斜率一定会起作用. 考虑最终选择的物品集合,它们的斜率和一定大于 \(0\),因此答案具有单调性,可以二分. 实现的时候注意细节 ...
- Python - 面向对象编程 - __del__() 析构方法
del 语句 Python 提供了 del 语句用于删除不再使用的变量 语法 del 表达式 删除变量的栗子 var = "hello" del var print(var) # ...
- Linux学习笔记--终端命令
~ 表示用户目录路径 ls 显示当前目录下的文件或目录 -l 列出文件纤细信息l(list) -a 列出当前目录下所有文件及目录, 包含隐藏的a(all) mkdir 创建目录 -p 创建目录 ...
- 【Git】给不同目录配置不同的用户名和邮箱
场景 使用 git 时,对于公司项目和个人项目想用不同的用户名和邮箱提交,简单的解决方式就是对 git 仓库单独配置 user.name 和 user.email: 直接修改当前仓库的 .git/co ...
- ldconfig与 /etc/ld.so.conf
现在我们知道了动态与静态函数库,也知道了当前的Linux大多是将函数库做成动态函数库,下面来讨论增加函数库读取性能的方法.我们知道,内存的访问速度是硬盘的好几倍,所以,如果将常用的动态函数库加载到内存 ...
- node实战小例子
第一章 2020-2-6 留言小本子 思路(由于本章没有数据库,客户提交的数据放在全局变量,接收请求用的是bodyParser, padyParser使用方法 app.use(bodyParser.u ...
- pip国内源设置
在目录 C:\Users\Administrator下新建pip目录 C:\Users\Administrator\pip 添加 pip.ini 文件 pip.ini内容设置为 [global] in ...
- ECMAScript 2021(ES12)新特性简介
简介 ES12是ECMA协会在2021年6月发行的一个版本,因为是ECMAScript的第十二个版本,所以也称为ES12. ES12发行到现在已经有一个月了,那么ES12有些什么新特性和不一样的地方呢 ...