2018-08-31 day10 python基础 函数和文件操作(含作业,学生管理系统)

1.函数作为变量

在python中,函数就是一种特殊的类型。声明函数的时候,其实就是在声明类型是function的变量。(变量能做的,函数都可以做)

1.给变量赋值
def func1():
    print('abc')
    
a = func1
a()
func1()
'''
abc
abc
'''

2.函数作为列表的元素(可以把函数存放到列表中)
a = []
for x in range(3):
    def fun1():
        print('abc')
    a.append(fun1)

print(a)
a[0]()
'''
[<function fun1 at 0x008DB8A0>, <function fun1 at 0x008DB2B8>, <function fun1 at 0x008DB8E8>]

abc
'''
3.函数作为函数的参数(回调函数)
def fun1():
    print('a')

def fun2():
    print('b')


def  mai_fun(n):
    n()

mai_fun(fun2)
'''
b
'''
4.函数作为函数的返回值
def fun(str1):
    if str1 == '+':
        def sum2(*n):
            sum1 = 0
            for num in n:
                sum1 += num
            return sum1
        return sum2
print(fun('+')(1,2,3))
'''
6

2.生成器和生成式

1.可以把迭代器看成一种容器,类似列表。生成器就是来生成迭代器。

2.生成式--------产生一个迭代器的表达式
a = (x for x in range(10))
print(next(a))
print(next(a))
结果:0,1
'''
1.a是生成器,能够生成0-9中的所有的数字。
2.生成器和迭代器都是通过next来获取里面的数据
'''
2.b = (char for x in 'waqsw' if  x =='wa')
'''
后面可以加判断条件。
'''

3.list1 = [x for x in range(10)]
'''
通过将生成式产生的迭代器转换成了一个列表
'''

4.将生成器转换成字典(容器类型的元素是元组,并且元素中有且只有两个元素,才能转换成字典)
dict1 = [(x,x+1) for x in range(10)]
print(dict1)
dict2 = dict(dict1)
print(dict2)
'''
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10)]
{0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}
'''
练习,key,value互换。
dict2 = {'a':1,'b':2}
dict3 = dict(((dict2[x],x) for x in dict2))
dict1 = dict(((v,k) for k,v in {'a':1,'b':2}.items()))

print(dict1)
print(dict3)
'''
{1: 'a', 2: 'b'}
{1: 'a', 2: 'b'}
'''

3.yield

1.只要函数中有yield关键字,那么这个函数就会变成一个生成器。(只要有yield不管有没有执行到yield,函数的调用结果都是生成器)
2.有yield的函数,在调用函数的时候不再是获取返回值,而是产生一个生成器对象,生成器对象中保留的是函数体。
3.当通过next获取生成器中的数据的时候,才会去执行函数体,执行到yield为止,并且将yield后面的结果作为生成的数据返回。同时记录结束的位置,下次再调用next的时候,从上次结束的位置接着往后执行。
'''
def fun1():
    yield 1
    yield 1

    x = y = 1
    while True:
        yield x+y
        x,y = y,x+y

gen = fun1()
for _ in range(10):
    print(next(gen),end=' ')
'''斐波拉切数列
1 1 2 3 5 8 13 21 34 55 

4.生成器和生成式产生的对象就是迭代器。

iter1 = iter([1,2,3,4,5])
print(next(iter1))

for item in iter1:
    print(item,end=' ')
'''
1
2 3 4 5 
'''
将列表转换成迭代对象

5.文件操作

1.程序中不管操作任何文件,不管怎么操作,过程都是:打开文件-->操作(读/写)--->关闭文件
2.做数据持久化,本地化,都要使用文件来保存数据(数据库文件,txt文档,json文件,plist,xml文件等,二进制文件(图片,视频,音频等))

a.文本文件的操作

1.打开文件
open(文件地址,打开方式,encoding=编码方式)
'''
a.文件地址:文件所在的地址(路径)。绝对路径和相对路径。

b.打开方式:
'r' ------ > 读(默认值),以文本的形式返回(str)
'rb'------> 读,读出来的内容以二进制(bytes)的形式返回。

'w' ------> 写,写文本到文件中(先抹除文本的原内容在写入,如果文件不存在,会自动创建)
'wb'------>写,写二进制数据到文件中
'a' -------->写(追加),在原有的内容后面写。

c.编码方式:以文本的形式读和写的时候才需要设置编码方式。utf -8(万国码)

'''
2.操作文件
open函数的返回值是被打开的文件对象
f1 = open(r'C:/Users/Administrator/Desktop/1.txt','r')
f2 = open(r'C:/Users/Administrator/Desktop/1.txt','w')
一.读
'''
f1.read()  # 读所有内容,将结果返回。
f1.readline()  # 一行一行的读
注意:当打开这个文件,没关闭之前。假如读一行,下次再读就从第二行开始。
'''
二.写
'''
f2.write()  # 'w' 抹除之前的内容,然后写。如果想不抹除就用 'a'

'''
1.当以读的形式打开文件的时候,如果文件不存在,程序会报错。
2.当以写的形式写文件的时候,如果文件不存在,文件会被创建。

作业

1.student_system.py
"""__author__=txf"""
import operation
import login_register


def start_page():
    print('++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++')
    print(' ' * 10 + '1.登录')
    print(' ' * 10 + '2.注册')
    print(' ' * 10 + '3.退出')
    print('++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++')


def verification():
    while True:
        start_page()
        user_input = input('请输入你想选择功能:')
        if user_input.isdigit():
            if user_input == '1':
                login_register.login()
            elif user_input == '2':
                login_register.register()
            elif user_input == '3':
                break
            else:
                print('没有此功能,请重新输入')
                verification()
        else:
            print('请输入正确的的数字!!!')
            verification()


def mian_system():
    verification()

if __name__ == '__main__':
    mian_system()
2.flie_operation.py
"""__author__=txf"""
"""__author__=txf"""
import login_register
import operation
import student_system


def add_id(filename):
    path = './%s.txt' %filename
    id_list = []
    with open(path,'r',encoding='utf-8') as f:
        while True:
            a = f.readline().lstrip()
            if not a:
                break
            else:
                m = a.strip(',').strip().split(',')
                id_list.append(m[0])

    return (len(id_list) + 1)

def add_admin(username,userpass):
    with open('./admin.txt','a') as f:
        f.write('%s,%s\n' %(username,userpass))
        f.close()
    student_system.mian_system()

def login_check(username,userpass):
    with open('./admin.txt','r',encoding='utf-8') as f:
        while True:
            a = f.readline().lstrip()
            if not a:
                break
            m = a.strip(',').strip().split(',')
            if m[0] == username and m[1] == userpass:
                print('登录成功')
                operation.choose_opereation(username)
            elif m[0] == username and m[1] != userpass:
                print('密码错误请重新输入')
                login_register.login()
            else:
                print('用户不存在')
                login_register.login()


def user_repetition(user):
    with open('./admin.txt','r',encoding='utf-8') as f:
        while True:
            a = f.readline()
            if not a:
                break
            m = a.strip(',').strip().split(',')
            print(m[0])
            if m[0] == user:
                return  True
            else:
                return False


def add_student(admin,name,sex,hoby,tel):
    path = './%s.txt' % admin
    id = str(add_id(admin))
    str1 = '%s,%s,%s,%s,%s' %(id,name,sex,hoby,tel)
    with open(path,'a' ) as f:
        f.write(str1+'\n')
        f.close()
    print('添加完成')
    up_down(admin)


def up_down(admin):
    print('1.返回上一层')
    print('2.退出重新登录')
    print('3.退出程序')
    user_input = input('请输入你的选择:')
    if user_input == '1':
        operation.choose_opereation(admin)
    elif user_input == '3':
        exit(0)
    elif user_input == '2':
        student_system.verification()

def all_info(filename):
    path = './%s.txt' %filename
    with open(path,'r',encoding='utf-8') as f:
        while True:
            a = f.readline()
            if not a:
                break
            m = a.strip(',').strip().split(',')
            if len(m) == 17:
                continue
            print('学号:%s 姓名:%s 性别:%s 爱好:%s 电话:%s' % (m[0],m[1],m[2],m[3],m[4]))
    up_down(filename)


def select_one_student(filename,info:str):
    path = './%s.txt' % filename
    with open(path,'r') as f:
        while True:
            a = f.readline()
            if not a:
                break
            m = a.strip(',').strip().split(',')
            if info.isdigit():
                if m[0] == info:
                    print('学号:%s 姓名:%s 性别:%s 爱好:%s 电话:%s' % (m[0], m[1], m[2], m[3], m[4]))

            elif info.isalpha():
                if m[1] == info:
                    print('学号:%s 姓名:%s 性别:%s 爱好:%s 电话:%s' % (m[0], m[1], m[2], m[3], m[4]))

            else:
                print('请输入正确的查询内容,id或者姓名')
                select_one_student(filename,info)
    up_down(filename)


def update_info(filename,id,user_choose,user_update):
    info_list = []
    path = './%s.txt' % filename
    with open(path,'r',encoding='utf-8') as f:
        while True:
            a = f.readline()
            m = a.strip().split(',')
            if not a:
                break
            else:
                if m[0] == id:
                    m[int(user_choose)] = user_update
                    info_list.append(m)
                else:
                    info_list.append(m)
    with open(path,'w') as f:
        for x in info_list:
            if len(x) == 1:
                f.write('\n')
            else:
                f.write(','.join(x)+'\n')
    up_down(filename)


def delet_student(id,admin):
    info_list = []
    path = './%s.txt' % admin
    with open(path, 'r', encoding='utf-8') as f:
        while True:
            a = f.readline()
            m = a.strip().split(',')
            if not a:
                break
            else:
                if m[0] == id:
                    info_list.append('delete one person')
                else:
                    info_list.append(m)
    with open(path, 'w') as f:
        for x in info_list:
            f.write(','.join(x) + '\n')
    up_down(admin)

3.login_register.py
"""__author__=txf"""
"""__author__=txf"""

import flie_operation
import os
import student_system


def register():
    file_exit()
    user_name = input('请输入你的姓名:')
    while not user_name:
        print('姓名不能为空,请重新输入')
        register()

    if flie_operation.user_repetition(user_name):
        print('管理用户已经存在,请重新输入')
        student_system.mian_system()

    else:
        user_pass1 = input('请输入密码:')
        user_pass2 = input('请再次输入密码:')
        if user_pass1 != user_pass2:
            print('两次密码不一致,请重新输入!!!')
            register()
        elif len(user_pass1) < 3:
            print('密码长度过低,请至少输入3位数密码')
            register()
        else:
            print('注册成功')
            path1 = './%s.txt' %user_name
            with open(path1, 'w') as f:
                print('创建管理文件成功')
            flie_operation.add_admin(user_name,user_pass1)


def login():
    file_exit()
    user_name = input('请输入用户名:')
    user_pass = input('请输入密码:')
    flie_operation.login_check(user_name,user_pass)

def file_exit():
    path = os.getcwd()
    if os.path.exists(r'%s/admin.txt' % path):
        pass
    else:
        with open('./admin.txt', 'w') as f:
            print('admin文件不存在,已经创建')
            print('用户不存在,请注册')
            register()
4.operation.py
import flie_operation
import student_system
def select_info(filename):
    user_input = input('1---查询全部信息 2-----查询部分信息:')
    if user_input == '1':
        flie_operation.all_info(filename)
    elif user_input == '2':
        user_input = input('请输入姓名或者id:')
        flie_operation.select_one_student(filename,user_input)
    else:
        print('无此功能')
        select_info(filename)


def dele_info(filename):
    user_input = input('请输入id,忘记请输入f:')
    if user_input == 'f':
        select_info(filename)
    elif user_input.isdigit():
        flie_operation.delet_student(user_input,filename)
    else:
        print('输入错误请重新输入')
        dele_info(filename)

def update_info(filename):
    user_input = input('请输入你的id,如果忘记id,请输入f:')
    if user_input == 'f':
        select_info(filename)
    else:
        use_choose = input('请输入想修改的选项:1.姓名 2.性别 3.爱好 4.电话:')
        use_update = input('请输入修改的内容:')
        flie_operation.update_info(filename,user_input,use_choose,use_update)


def add_info(filename):
    user_name = input('学生姓名:')
    user_sex  = input('性别:')
    user_hoby = input('爱好:')
    user_tel  = input('电话:')
    flie_operation.add_student(filename,user_name,user_sex,user_hoby,user_tel)

def choose_opereation(admin):
    print('1.添加学生')
    print('2.删除学生')
    print('3.查看学生')
    print('4.修改学生')
    print('5.退出')
    print('6.重新登录')

    while True:
        user_input = input('请输入你的操作:')
        if user_input == '1':
            add_info(admin)
        elif user_input == '2':
            dele_info(admin)
        elif user_input == '3':
            select_info(admin)
        elif user_input == '4':
            update_info(admin)
        elif user_input == '5':
            exit(0)
        elif user_input == '6':
            student_system.verification()
        else:
            print('无此功能,请重新输入')
            choose_opereation(admin)

运行student_system.py即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,776评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,527评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,361评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,430评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,511评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,544评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,561评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,315评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,763评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,070评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,235评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,911评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,554评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,173评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,424评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,106评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,103评论 2 352

推荐阅读更多精彩内容

  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,942评论 17 410
  • 前几天,一个网友不知在哪里得知我是做情感类公众号的,就加了我qq,起先只是相互加了,并没有找我聊一句话。 过了两天...
    阿澜的半亩良田阅读 4,136评论 12 5
  • 大家都知道一句话,方法总比困难多。但往往我们在面对困难的时候经常会束手无策,逃避,甚至不了了之。在困难面前,做或者...
    伊森田慧慧阅读 462评论 2 0
  • 今早称55.5,晚上不吃果然管用 今天继续努力吧! 有时候第六感真的很准,所以不要说女人整天疑神疑鬼。
    赵海芸阅读 78评论 0 0
  • 图文/茉莉 写于20180104 长江后浪推前浪,前浪拍死在岸上。可别小看新来的实习生,职场变幻莫测,下一秒,你就...
    茉莉的小茶馆阅读 563评论 5 3