美文网首页
列表&字典的拓展应用

列表&字典的拓展应用

作者: endmoon | 来源:发表于2018-11-07 23:34 被阅读14次

    列表&字典的拓展应用

    1、使用普通的逻辑语句(面向过程)

    menu = '''
    请输入您的操作:
    1. 查询所有电影,请按1;
    2. 添加一个电影,请按2;
    3. 根据指定序号删除一个电影,请按3;
    4. 根据电影名删除一个电影,请按4;
    5. 退出系统,请按其它键。
    '''
    movies = [
        {"name": "蚁人1:黄蜂女现身", "category": "科幻", "date": "2018"},
        {"name": "蚁人2:黄蜂女现身", "category": "科幻", "date": "2018"},
        {"name": "蚁人3:黄蜂女现身", "category": "科幻", "date": "2018"}
    ]
    while True:
        c=input(menu)
        if c=="1":
            print("序号\t\t\t电影名称\t\t\t类别\t\t\t年代")
            for i,movie in enumerate(movies):
                # print("{0}\t\t\t{1}\t\t\t{2}\t\t\t{3}".format(i + 1, movie['name'], movie['category'], movie['date']))
                print("{0}\t{1}\t\t{2}\t\t\t{3}".format(i+1,movie['name'],movie['category'],movie['date']))
        elif c=="2":
            name = input("请输入电影名称:")
            category=input("请输入电影类别:")
            date=input("请输入年代:")
            movie={'name':name,'category':category,'date':date}
            movies.append(movie)
        elif c=="3":
            print("序号\t\t\t电影名称\t\t\t类别\t\t\t年代")
            for i, movie in enumerate(movies):
                print("{0}\t{1}\t\t{2}\t\t\t{3}".format(i + 1, movie['name'], movie['category'], movie['date']))
            number=int(input("请删除指定的序号:"))
            movies.pop(number-1)
            print("序号\t\t\t电影名称\t\t\t类别\t\t\t年代")
            for i,movie in enumerate(movies):
                # print("{0}\t\t\t{1}\t\t\t{2}\t\t\t{3}".format(i + 1, movie['name'], movie['category'], movie['date']))
                print("{0}\t{1}\t\t{2}\t\t\t{3}".format(i+1,movie['name'],movie['category'],movie['date']))
        elif c=="4":
            name=input("请输入要删除的电影名:")
            for movie in movies:
                # print(movie)
                if name in movie['name']:
                    movies.remove(movie)
                    print("序号\t\t\t电影名称\t\t\t类别\t\t\t年代")
                    for i, movie in enumerate(movies):
                        print("{0}\t{1}\t\t{2}\t\t\t{3}".format(i + 1, movie['name'], movie['category'], movie['date']))
    #
    

    2、使用函数(函数封装)

    # 查询方法
    def select():
        #使用字典保存每条电影对象,将电影名称 电影类型和电影年代作为键,然后使用列表保存每个装载电影对象的字典
        print("电影名称\t电影类型\t年代")
        #使用for循环遍历列表,得到每个字典对象,也就是每部电影信息(可以加上序号
        for i,movie in enumerate(movies):
        #然后通过键获取字典中每个属性的值
            print("{0}\t{1}\t{2}\t{3}".format(i+1,movie['name'],movie['category'],movie['date']))
    
    # select()
    # 添加方法
    def add():
        global movies
        name=input("请添加电影名称:")
        category=input("请添加电影类型:")
        date=input("请添加年代:")
        movie={'name':name,'category':category,'date':date}
        movies.append(movie)
        select()
    # add()
    
    #删除方法(序号)
    def count_del():
        select()
        numbers=int(input("请输入需要删除的序号:"))
        movies.pop(numbers-1)
        print("当前电影有:")
        select()
    # count_del()
    
    #删除电影(电影名)
    def del_movie():
        select()
        name=input("请输入需要删除的电影名:")
        i=0
        while i <= len(movies)-1:
            if name in movies[i]['name']:
                movies.remove(movies[i])
            i=i+1
        # for movie in movies:
        #     if name in movie['name']:
        #         movies.remove(movie)
        select()
    # del_movie()
    movies = [{'name': '蜘蛛侠', 'category': '科幻', 'date': '1990'},
              {'name': '猎魔人', 'category': '科幻', 'date': '2000'},
              {'name': '变形金刚', 'category': '科幻', 'date': '2010'}
              ]
    menu = '''
    请输入您的操作:
    1. 查询所有电影,请按1;
    2. 添加一个电影,请按2;
    3. 根据指定序号删除一个电影,请按3;
    4. 根据电影名删除一个电影,请按4;
    5. 退出系统,请按其它键。
    '''
    while True:
        c=input(menu)
        if c=="1":
            select()
        elif c=="2":
            add()
        elif c=="3":
            count_del()
        elif c=="4":
            del_movie()
        else:
            break
    

    3、使用类(面向对象)

    NAME CATEGORY DATE
    蜘蛛侠 科幻 1990
    猎魔人 科幻 2000
    变形金刚 科幻 2010
    # 这里采用ORM模型也就是(定义类):
    # 表---类
    # 对象--数据行
    # 属性--字段
    # 对数据进行增删改查--函数
    
    
    movies=[]
    class Movies:    #创建movies表
        def __init__(self,name,category,date):    #定义行字段,也就是表头属性
            self.name=name
            self.category=category
            self.date=date
    
        #设置方法
        #1.查询方法
        def select(self):
            for i,movie in enumerate(movies):
                print("序号\t\t\t电影名称\t\t\t电影类型\t\t\t年代")
                print("{0}\t\t\t{1}\t\t\t{2}\t\t\t{3}".format(i+1,movie['name'],movie['category'],movie['date']))
    
        #2.添加方法
        def add(self):
            movie={'name':self.name,'category':self.category,'date':self.date}
            movies.append(movie)
        #3.删除方法(序号)
        def count_del(self,number):
            self.number=number
            movies.pop(number-1)
        #4.删除方法(名称)
        def movie_del(self):
            i=1
            while i<=len(movies)-1:
                if movie in movies[i][self.name]:
                    movies.remove(movies[])
    
    
    M=Movies
    M1=Movies('蜘蛛侠','科幻','1990')   #定义字段
    M1.add()                            #插入记录
    M1.select()                       #查询记录
    M.del_count()                       #通过序号删除记录
    M.del_movie()                       #通过地域名称删除记录
    M2=Movies('猎魔人','科幻','2000')
    M2.add()
    M3=Movies('变形金刚','科幻','2010')
    M3.add()
    

    4、使用pymysql将列表信息保存至mysql数据库

    import pymysql
    
    #创建数据库连接、游标对象
    class mysql_init(object):
    
        def __init__(self, conn):
            self.conn = None
    
        # connect to mysql
        def connect(self):
            self.conn = pymysql.connect(
                host="localhost",
                port=3306,
                user="root",
                passwd="root",
                db="test",
                charset="utf8"
            )
    
        def cursor(self):
            try:
                return self.conn.cursor()
            except (AttributeError, pymysql.OperationalError):
                self.connect()
                return self.conn.cursor()
    
        def commit(self):
            return self.conn.commit()
    
        def close(self):
            return self.conn.close()
    
    
    def process():
        dbconn.connect()        #连接数据库对象
        conn = dbconn.cursor()   #创建游标对象
        # DropTable(conn)          #删除操作函数
        # CreateTable(conn)        #创建操作
        InsertDatas(conn)        #插入操作
        # QueryData(conn)        #查询操作
        dbconn.commit()         #提交并保存至数据库
        dbconn.close()          #关闭数据库连接
    
    #插入方法
    def InsertDatas(conn):
        conn=dbconn.cursor()
        # insert_sql = "insert into user_key values(%s)"
        insert_sql = "INSERT INTO movie VALUES(%s,%s,%s)"
        movies = [("大话西游","神话","1990-1-1")]
        conn.executemany(insert_sql, movies)
    
    
    #查询方法1
    def query(sql, conn):
        '''查询sql'''
        # conn=dbconn.cursor()
        conn.execute(sql)
        rows = conn.fetchall()     #查询表中的所有数据,相当于select * from table_name
        return rows  
    
    #查询方法2
    def QueryData(conn):
        sql = "select * from user_key"
        rows = query(sql, conn)
        printResult(rows)
    
    #删除方法1
    def DropTable(conn):
        # conn=dbconn.cursor()
        conn.execute("DROP TABLE IF EXISTS `user_key`")
    
    #删除方法2
    def DeleteData(conn):
        del_sql = "delete from user_key where id=2"
        conn.execute(del_sql)
    
    #创建方法
    def CreateTable(conn):
        # conn=dbconn.cursor()
        sql_create = ''' CREATE TABLE `movie` (`name` varchar(50) NOT NULL,
                                                `category` varchar(50) NOT NULL,
                                                `date` date NOT NULL
                      )'''
        conn.execute(sql_create)
    
    
    def printResult(rows):
        if rows is None:
            print("rows None")
        for row in rows:
            print(row)
    
    if __name__ == "__main__":
        dbconn = mysql_init(None)
        process()     #调用相应的函数方法
    

    5、使用Django理解列表&字典

    Django使用流程见其他文章

    5.1连接数据库

    #settings.py文件
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'demo',
            'USER':'root',
            'PASSWORD':'root'
        }
    }
    

    5.2.定义Movies类(也就是列名、字典键)

    from django.db import models
    
    class Movies(models.Model):
        name=models.CharField(max_length=64)
        category=models.CharField(max_length=64)
        date=models.CharField(max_length=64)
    
        class Meta:
            db_table="t_movies"
    

    5.3创建表

    makemigrations detail
    migrate detail
    

    5.4创建函数方法(也就是进行增删改查操作)

    from django.shortcuts import render
    from detail.models import Movies
    
    def add(request):
        if request.method=="GET":
            return render(request, 'addmovies.html')
        elif request.method=="POST":
            movies=Movies()
            movies.name=request.POST.get("name")
            movies.category=request.POST.get("category")
            movies.date=request.POST.get("date")
            movies.save()
            # return select(request)
            return redirect(to= reverse('movielist'))       #重定向方式
    
    def select(request):
        movies=Movies.objects.all()   #字典
        return render(request,'movielist.html',context={'movies':movies})
    

    5.5设置路由(调用函数至网页文件)

    from django.contrib import admin
    from django.conf.urls import url
    
    from detail import views
    urlpatterns = [
        url('admin/', admin.site.urls),
        url('addmovies/',views.add),
        url('movielist/',views.select,name='movielist')     #重定向方式
        #url('movielist/',views.select)
    ]
    

    5.6网页文件

    添加记录的页面

    <!DOCTYPE html>
    <html lang="en" xmlns="http://www.w3.org/1999/html">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form action="http://127.0.0.1:8000/addmovies/" method="POST">
            请输入电影名称:<input type="text"  name="name"><br>
            请输入电影类型:<input type="text" name="category"><br>
            请输入时间:<input type="text"  name="date"><br>
            <input type="submit" value="提交">
        </form>
    </body>
    </html>
    

    查询记录的页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>movie list</title>
    </head>
    <body>
        <table border="1" cellspacing="0">
            <tr>
                <th>name</th>
                <th>category</th>
                <th>date</th>
            </tr>
            {% for movie in movies %}
                <tr>
                    <td>{{ movie.name }}</td>
                    <td>{{ movie.category }}</td>
                    <td>{{ movie.date }}</td>
                </tr>
            {% endfor %}
        </table>
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:列表&字典的拓展应用

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