美文网首页
Python 3.0 小例子

Python 3.0 小例子

作者: 如风如花不如你 | 来源:发表于2016-12-16 17:20 被阅读191次

    Python3.0以下编译会报错的。

    <small>以前在学习Python的时候,写的一个小例子,简单的说是为了锻炼一下面向对象而写的,分享出来:

    这是一个简单的学生信息管理系统,通过不同的模块构建,最后达成我们得目的,先看下最终效果:

    ------登录------
    账号:
    admin
    密码:
    123
    #------ 欢迎进入XXX系统 ----
    1.添加学生
    2.修改学生信息
    3.根据姓名查找学生 代码:name
    根据年龄查找学生 代码:age
    根据科目查找学生 代码:subject
    根据成绩查找学生 代码:score
    4.根据姓名删除学生
    5.显示所有学生信息
    

    大概的效果就是这样了,因为是初学的时候做的,很多东西没有去考虑,毕竟在开始的时候考虑太多,只会比较迷茫。我们先一步一步来咯。

    首先先定义个数据源来存放数据

    # coding=utf-8
    dict1 = {'name':'小明','age':18,'subject':'数学','score':99}
    list = [dict1]
    

    然后我的习惯是先考虑下一步的情况,所以要分析我们接下来要做的事情:登录,选择以及相应的处理方法,通过结果示例,我们需要做的是添加学生,修改学生,查找学生,删除学生,显示所有学生:
    那么我就可以先定义几种方法(只是设想,并不是具体的代码):

    登录: login
    主控制选择台: selectInfo
    添加学生信息: addStudent
    修改学生信息: editStudent
    具体的修改学生信息:editStudentInput
    这里有两种查询方式:一种是根据后面提示的代码进行查询
    一种是直接给出4个选项进行选择:
    查询方式1:searchStudentInfoA
    查询方式2:  searchStudentInfoB
    显示列表中所有学生信息: showStudentInfo
    用于将dict格式的显示成具体的格式: showStudentInfoWithDict
    删除学生信息: delStudentInfo
    

    以上基本就是我们需要用的方法了,知道了我们需要做什么,那么接下来就是具体的实施了,首先就是我们需要一个开始系统的方法:

    begin(list)
    

    简单暴力无污垢,也就是我们写到最后,就是为了这么一个begin.

    好了,接下来就是将begin进行完善。

    def begin(list):
        login()
        isEnd = False #用于判断是否结束系统
            #循环输入
        while(not isEnd):
            isEnd = selectedInfo(list)
        print('退出系统...')
    

    为什么要这样写,因为我们需要做的就是开始的时候需要先登录,登录都过不去,那是肯定是进入不了操作台的。所以登录里面需要的操作就是一个界面用于输入账号和密码,还有的就是保证输入是正确。

    #login 登录模块,用于用户登录,如果登录失败,会重复登录
    def login():
        isLogin = True#控制循环是否结束
        while(isLogin):
            print('------登录------')
            print('账号:')
            username = input()#输入用户名
            print('密码:')
            password = input()#输入密码
            if(username=='admin' and password=='123'):#判断用户名和密码是否正确
                isLogin = False
    

    在保证了登录一定成功之后,那么就需要考虑的是登录操作台的功能。这个可以说是个大集合,集成了所有的功能。我们需要给出提示,然后分别去实现不同的功能。

    #主页面选择模块
    def selectedInfo(list):
        #手动先设定学生的信息
        code = ['name','age','subject','score']
        print('#------ 欢迎进入XXX系统 ----')
        print('1.添加学生')    
        print('2.修改学生信息')
        print('3.根据姓名查找学生 代码:name')
        print('根据年龄查找学生 代码:age')
        print('根据科目查找学生 代码:subject')
        print('根据成绩查找学生 代码:score')
        print('4.根据姓名删除学生')
        print('5.显示所有学生信息')
        print('请输入您的选择:')
        sel = int(input()) #输入选择
        if(sel == 1):
            addStudent(list)#添加学生
        elif sel==2:
            editStudent(list)#修改学生信息
        elif sel==3:
            #------这是方式1------------
            # print('请输入对应的查找代码:')
            # myCode = input()
            # if myCode in code:    #判断输入的代码是否是合格的代码
                # searchStudentInfoA(list,myCode)#如果代码输入正确那么就开始查找
            # else:
                # print('您输入的代码不正确')
            #------这是方式2------------    
            print('1.姓名  2.年龄   3.成绩   4.科目 ')
            selected = int(input())
            searchStudentInfoB(list,selected)
                
        elif sel==4:
            delStudentInfo(list)#删除学生信息
        elif sel==5:
            showStudentInfo(list)#显示所有学生
        print('是否退出系统 1/0:') 
        return int(input())
    

    接下来的就是具体的实现方法了。

    #添加学生模块
    添加学生主要就是对list内容的追加,需要注意的可能就是输错值会崩溃,需要用到try except去捕捉可能发生的错误,当然更具体的捕获可以自己去自定义。
    def addStudent(list):
        newDict = {} #用于创建一个新学生
        isError = False #用于判断输入的时候,是否会发生错误
        while(not isError):
            try: #捕捉可能会发生的错误
                print('----添加学生----')
                print('学生姓名:')
                stuName = input()#输入学生姓名
                print('学生年龄:')
                stuAge  = int(input())#输入学生年龄
                print('学生科目:')
                stuSubject = input()#输入学生科目
                print('学生成绩:')
                stuScore = float(input())#输入学生成绩
                #创建一个字典,用于表示学生信息
                newDict = {'name':stuName,'age':stuAge,'subject':stuSubject,'score':stuScore}
                isError = True  #如果没有错误发生,那么就会设置isError的值为True,就表示可以结束循环了
            except ValueError:#只捕捉值的错误
                print('您输入的数据类型不匹配,请重新输入!')
            else:#如果没有错误的发生,那么将字典追加到列表中
                list.append(newDict)    #将字典添加到list中
                print('学生添加成功!')
    

    修改学生主要是从目标字典当中将目标取出来,然后对当前取出来的字典进行修改就可以了。

    #修改学生信息模块
    def editStudentInput(dict):
        print('请选择如下选项进行修改:')
        print('1.年龄  2.科目 3.成绩')
        sel = int(input())
        if(sel == 1):
            print('请输入新年龄:')
            newAge = int(input())
            dict['age'] = newAge    #重新给age赋值
        elif sel == 2:
            print('请输入新科目:')
            newSubject = input()
            dict['subject'] = newSubject#重新给subject赋值
        elif sel == 3:
            print('请输入新成绩:')
            newScore = float(input())#重新给Score赋值
            dict['score'] = newScore
    
    #修改学生信息 原理,在学生列表中寻找每一个学生对象,判断学生名称是否相同   
    def editStudent(list):
        print('---修改学生信息----')
        print('请输入需要修改的学生名称: ')
        stuName = input()
        for dict in list:   #在学生列表里面,寻找每一个学生信息
            if stuName == dict['name']:
                editStudentInput(dict)
                break;
                
    

    显示学生就在遍历整个list,然后在根据具体的格式输出就可以了

    #显示所有学生信息
    def showStudentInfo(list):
        for dict in list:
            showStudentInfoWithDict(dict)
        
    
    #用于将dict格式的显示成具体的格式
    def showStudentInfoWithDict(dict):
             print('名称:',dict['name'],'年龄:',dict['age'],'科目:',dict['subject'],'成绩:',dict['score'])
    

    删除也就是在整个list列表中去寻找,如果寻找到了之后,那么删除当前找到的dict字典就可以了

    #删除学生信息
    def delStudentInfo(list):
        print('请输入需要删除的学生姓名:')
        name = input()  #输入学生姓名
        for dict in list:   #遍历整个学生列表
            if name == dict['name']: #判断当前的学生是否是寻找的学生
                list.remove(dict)           #如果是的,那么就删除当前的学生所代表的字典
                break
    

    查找的也是同理,遍历整个list列表,然后找到输出就可以了

    #查找方式一
    def searchStudentInfoA(list,type):#通过代码来识别不同的选择类型
            print('请输入查找学生的',type)
            newType = input()
            if type == 'age':       #由于age和score不是字符串类型,需要将其转换成对应的类型
                newType = int(newType)
            elif type == 'score':
                newType = float(newType)
                
            for dict in list:       #遍历整个学生列表
                if newType == dict[type]: #判断当前的学生是否是寻找的学生
                    showStudentInfoWithDict(dict)
    
    #查找方式二              
    def searchStudentInfoB(list,type):
        #1.姓名  2.年龄   3.成绩   4.科目
            if type ==1:
                print('请输入查找学生的姓名')
                name = input()
                for dict in list:       #遍历整个学生列表
                    if name == dict['name']: #判断当前的学生是否是寻找的学生
                        showStudentInfoWithDict(dict)
            elif type==2:
                print('请输入查找学生的年龄')
                age = int(input())
                for dict in list:       #遍历整个学生列表
                    if age == dict['age']: #判断当前的学生是否是寻找的学生
                        showStudentInfoWithDict(dict)
            elif type==3:
                print('请输入查找学生的成绩')
                score = float(input())
                for dict in list:       #遍历整个学生列表
                    if score == dict['score']: #判断当前的学生是否是寻找的学生
                        showStudentInfoWithDict(dict)
            elif type==4:
                print('请输入查找学生的科目')
                subject = input()
                for dict in list:       #遍历整个学生列表
                    if subject == dict['subject']: #判断当前的学生是否是寻找的学生
                        showStudentInfoWithDict(dict)
    

    总的来说,这也是一种面向对象思想的简单表现吧。我们通过将功能模块化,将功能不要全部写在一个方法当中。这样分化了个体功能之后,使得在分配的任务的时候,大家都能各司其职。
    比如,XX去写登录,XX去写添加学生模块,XX去写修改之类的。让分工更加明确化。
    维护起来也容易。比如我们运行程序,一直都正常,突然走到修改的时候发生了错误,那么我就会知道是editStudentInfo的错误了,而不会在整个文件中去盲目的寻找。

    当然,Python并不是这样用的,具体的得到大家去一些项目的时候才能明白Python的强大,这里只是帮助初学者构建一种面向对象的编程思想。上面的讲解可以直接创建一个test.py,然后把代码全部贴进去编译就可以了。

    有任何问题大家都可以提出来,欢迎讨论。
    </small>

    相关文章

      网友评论

          本文标题:Python 3.0 小例子

          本文链接:https://www.haomeiwen.com/subject/yninmttx.html