个人记录:对于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('请输入第二个数:')
个人记录:对于python学习的反思和总结(一)       (2).让其计算结果  
c = a+b
个人记录:对于python学习的反思和总结(一)    (3).显示出来  
print(c)
个人记录:对于python学习的反思和总结(一)   总代码:
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的语法,甚至可以借鉴其他代码来完成。但是要记住一点,要是编程能力不够,先不要要求自己一步到位,先想好思路,然后按照思路写好程序,最后再去慢慢的优化。一个好的算法程序就是需要程序员一步一步的慢慢优化而来。

总结

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

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

上一篇:用PowerShell AppX命令时出现“For more information, run ‘Import-Module Appx‘”,解决办法,适用于win11 dev安装Android子系统


下一篇:.net Core CodeFirst结合MySql