zoukankan      html  css  js  c++  java
  • python-code-01

    函数作业:
    1、复习函数参数的使用
    2、实现如下功能
    编写用户注册函数,实现功能
    1、在函数内接收用户输入的用户名、密码、余额
    要求用户输入的用户名必须为字符串,并且保证用户输入的用户名不与其他用户重复
    要求用户输入两次密码,确认输入一致
    要求用户输入的余额必须为数字
    2、要求注册的用户信息全部存放于文件中
    def func():
        tag = True
        # 取出当前文件所有的用户名,用于判断后面用户是否已经存在
        name_line = []
        with open('db', 'rt', encoding='utf-8') as f_db:
            for line in f_db:
                line = line.strip('
    ').split(':')
                name_line.append(line[0])
    
        while tag:
            # 验证注册用户名的合法性
            name_inp = input('username>>: ').strip()
            if not name_inp.isalpha():
                print('用户名必须全是字符')
                continue
            if name_inp in name_line:
                print('用户名已注册')
                continue
    
            while tag:
                # 验证密码的合法性
                pwd_inp = input('password>>: ')
                pwd_inp_chk = input('password>>: ')
                if pwd_inp != pwd_inp_chk:
                    print('两次密码不一致')
                    continue
    
                while tag:
                    # 验证余额的合法性
                    balance = input('balance>>: ').strip()
                    if not balance.isdigit():
                        print('必须为整数')
                        continue
                    # 以上条件全成立,则写入文件
                    with open('db', 'at', encoding='utf-8') as f_info:
                        f_info.write('%s:%s:%s
    ' % (name_inp, pwd_inp, balance))
                    print('注册成功')
                    tag = False
    func()
    View Code
    编写用户转账函数,实现功能
    1、传入源账户名(保证必须为str)、目标账户名(保证必须为str)、转账金额(保证必须为数字)
    2、实现源账户减钱,目标账户加钱
    def func_transfer():
        import os
        tag = True
        #取出当前文件内所有的用户名,用于后面判断账号名是否存在
        line_name = []
        with open('db', 'rt', encoding='utf-8') as f_name:
            for line in f_name:
                line = line.strip('
    ').split(':')
                line_name.append(line[0])
    
        while tag:
            #验证转出账号名的合法性
            name_s = input('转出账户名>>: ').strip()
            if not name_s.isalpha():
                print('必须为纯字母')
                continue
            if name_s not in line_name:
                print('转出账户名不存在')
                continue
            #取出此账号名转账前的账号余额,用于后面判断后面转账金额是否足够
            with open('db','rt',encoding='utf-8') as f_b:
                for line in f_b:
                    line = line.strip('
    ').split(':')
                    if name_s == line[0]:
                        balance = line[2]
                        balance = int(balance)
            print('当前余额:%s' %balance)
            while tag:
                #验证转入账号名的合法性
                name_d = input('转入账户名>>: ')
                if not name_d.isalpha():
                    print('必须为纯字母')
                    continue
                if name_d not in line_name:
                    print('转出账户名不存在')
                    continue
                while tag:
                    #验证转账金额是否充足
                    transfer_amount = input('转账金额>>: ')
                    if not transfer_amount.isdigit():
                        print('转账金额必须为整数')
                        continue
                    transfer_amount = int(transfer_amount)
                    if transfer_amount > balance:
                        print('余额不足,从新输入')
                        continue
                    #上面的条件都符合,则修改文件
                    with open('db','rt',encoding='utf-8') as read_f,
                            open('db.swap','wt',encoding='utf-8') as write_f:
                        for line in read_f:
                            line = line.strip('
    ').split(':')
                            if name_s == line[0]:
                                line[2] = int(line[2]) - transfer_amount
                                line[2] = str(line[2])
                            if name_d == line[0]:
                                line[2] = int(line[2]) + transfer_amount
                                line[2] = str(line[2])
                            line_new = ':'.join(line)
                            line_new = line_new +'
    '
                            write_f.write(line_new)
                    os.remove('db')
                    os.rename('db.swap','db')
                    print('转账完成')
                    tag = False
    func_transfer()
    View Code
    编写用户验证函数,实现功能
    1、用户输入账号,密码,然后与文件中存放的账号密码验证
    2、同一账号输错密码三次则锁定

    3、这一项为选做功能:锁定的账号,在五分钟内无法再次登录
    提示:一旦用户锁定,则将用户名与当前时间写入文件,例如: egon:1522134383.29839
    实现方式如下:

    import time

    current_time=time.time()
    current_time=str(current_time) #当前的时间是浮点数,要存放于文件,需要转成字符串
    lock_user='%s:%s ' %('egon',current_time)

    然后打开文件
    f.write(lock_user)

    以后再次执行用户验证功能,先判断用户输入的用户名是否是锁定的用户,如果是,再用当前时间time.time()减去锁定的用户名后
    的时间,如果得出的结果小于300秒,则直接终止函数,无法认证,否则就从文件中清除锁定的用户信息,并允许用户进行认证
    import time
    import os
    
    name_info = []
    with open('db','rt',encoding='utf-8') as f0:
        for line0 in f0:
            line0 = line0.strip('
    ').split(':')
            name_info.append(line0[0])
    # print(name_info)
    
    lock_users = []
    with open('db_lock','rt',encoding='utf-8') as f_lock:
        for line1 in f_lock:
            line1 = line1.strip('
    ').split(':')
            lock_users.append(line1[0])
    # print(lock_users)
    
    tag = True
    while tag:
    
        name_inp = input('username>>: ').strip()
        if name_inp not in name_info:
            print('用户名不存在')
            continue
    
        if name_inp in lock_users:
            current_time = time.time()
            # print('用户已被锁定')
            with open('db_lock', 'rt', encoding='utf-8') as f_lock_time:
                for line2 in f_lock_time:
                    line2 = line2.strip('
    ').split(':')
                    if name_inp == line2[0]:
                        name_lock_time = line2[1]
                        name_lock_time = float(name_lock_time)
                        # print(name_lock_time,type(name_lock_time))
            valid_time = current_time - name_lock_time
            #时间戳差值转为秒
            if valid_time < 300:
                print('锁定状态')
                tag = False
            else:
                with open('db_lock','rt',encoding='utf-8') as f3,
                        open('db_lock.swap','wt',encoding='utf-8') as f4:
                    for line3 in f3:
                        line3_new = line3.strip('
    ').split(':')
                        if name_inp != line3[0]:
                            f4.write(line3)
                os.remove('db_lock')
                os.rename('db_lock.swap','db_lock')
    
        with open('db', 'rt', encoding='utf-8') as f1:
            for line in f1:
                line = line.strip('
    ').split(':')
                if name_inp == line[0]:
                    name_pwd = line[1]
                    break
    
        count = 1
        while count <= 3:
            pwd_inp = input('password>>: ')
            if pwd_inp == name_pwd:
                print('验证成功')
                tag = False
                break
            else:
                print('密码错误')
                count += 1
                if count == 4:
                    current_time = time.time()
                    current_time = str(current_time)
                    lock_user = '%s:%s
    ' % (name_inp, current_time)
                    with open('db_lock','at',encoding='utf-8') as f2:
                        f2.write(lock_user)
                    print('%s 用户已被锁定五分钟' %name_inp)
                    tag = False
    View Code
    #作业二:请闭眼写出购物车程序
    #需求:
    # 用户名和密码存放于文件中,格式为:egon|egon123
    # 启动程序后,先登录,登录成功则让用户输入工资,然后打印商品列表,失败则重新登录,超过三次则退出程序
    # 允许用户根据商品编号购买商品
    # 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
    # 可随时退出,退出时,打印已购买商品和余额
    #******************购物车
    import os
    product_list = [['Iphone7',5800],
                    ['Coffee',30],
                    ['疙瘩汤',10],
                    ['Python Book',99],
                    ['Bike',199],
                    ['ViVo X9',2499],
    
                    ]
    
    shopping_cart={}
    current_userinfo=[]
    db_file=r'db.txt'
    while True:
        print('''
        1 注册
        2 登录
        3 购物
        ''')
        choice=input('请选择:').strip()
        if choice =='1':
            while True:
                name=input('username:')
                password=input('password:')
                conf_password=input('conf password')
                balance=input('balance:')
                if password ==conf_password:
                    with open(db_file,'a') as f:
                        f.write('%s,%s,%s
    '%(name,password,balance))
                    break
                else:
                    print('两次密码不一致')
        elif  choice =='2':
            count=0
            tag=True
            while tag:
                if count ==3:
                    print('错误过多,退出')
                    break
                name=input('name')
                password=input('password')
                with open(db_file,'r') as f:
                    for line in f:
                        user_info=line.split(',')
                        user_name=user_info[0]
                        user_password=user_info[1]
                        user_balance=int(user_info[2])
                        if user_name == name and user_password == password:
                            current_userinfo=[user_name,user_balance]
                            print('登录成功')
                            print('用户信息为:',current_userinfo)
                            tag=False
                            break
                        else:
                            print('用户名密码错误')
                            count+=1
    
    
        elif choice == '3':
            if len(current_userinfo) == 0:
                print('33[49m请先登陆...33[0m')
            else:
                #登陆成功后,开始购物
                uname_of_db=current_userinfo[0]
                balance_of_db=current_userinfo[1]
    
                print('尊敬的用户[%s] 您的余额为[%s],祝您购物愉快' %(
                    uname_of_db,
                    balance_of_db
                ))
    
                tag=True
                while tag:
                    for index,product in enumerate(product_list):
                        print(index,product)
                    choice=input('输入商品编号购物,输入q退出>>: ').strip()
                    if choice.isdigit():
                        choice=int(choice)
                        if choice < 0 or choice >= len(product_list):continue
    
                        pname=product_list[choice][0]
                        pprice=product_list[choice][1]
                        if balance_of_db > pprice:
                            if pname in shopping_cart: # 原来已经购买过
                                shopping_cart[pname]['count']+=1
                            else:
                                shopping_cart[pname]={'pprice':pprice,'count':1}
    
                            balance_of_db-=pprice # 扣钱
                            current_userinfo[1]=balance_of_db # 更新用户余额
                            print(pname + " 添加到购物车,余额为: " + str(balance_of_db))
    
                        else:
                            print("产品价格是{price},你还差{lack_price}".format(
                                price=pprice,
                                lack_price=(pprice - balance_of_db)
                            ))
                        print(shopping_cart)
                    elif choice == 'q':
                        print("""
                        ---------------------------------已购买商品列表---------------------------------
                        id          商品                   数量             单价               总价
                        """)
    
                        total_cost=0
                        for i,key in enumerate(shopping_cart):
                            print('%22s%18s%18s%18s%18s' %(
                                i,
                                key,
                                shopping_cart[key]['count'],
                                shopping_cart[key]['pprice'],
                                shopping_cart[key]['pprice'] * shopping_cart[key]['count']
                            ))
                            total_cost+=shopping_cart[key]['pprice'] * shopping_cart[key]['count']
    
                        print("""
                        您的总花费为: %s
                        您的余额为: %s
                        ---------------------------------end---------------------------------
                        """ %(total_cost,balance_of_db))
    
                        while tag:
                            inp=input('确认购买(yes/no?)>>: ').strip()
                            if inp not in ['Y','N','y','n','yes','no']:continue
                            if inp in ['Y','y','yes']:
                                # 将余额写入文件
    
                                src_file=db_file
                                dst_file=r'%s.swap' %db_file
                                with open(src_file,'r',encoding='utf-8') as read_f,
                                    open(dst_file,'w',encoding='utf-8') as write_f:
                                    for line in read_f:
                                        if line.startswith(uname_of_db):
                                            l=line.strip('
    ').split(',')
                                            l[-1]=str(balance_of_db)
                                            line=','.join(l)+'
    '
    
                                        write_f.write(line)
                                os.remove(src_file)
                                os.rename(dst_file,src_file)
    
                                print('购买成功,请耐心等待发货')
    
                            shopping_cart={}
                            current_userinfo=[]
                            tag=False
        else:
            print('非法输入')
    
    # enumerate(列表或字典)
    View Code
    product_list = [['Iphone7',5800],
                    ['Coffee',30],
                    ['疙瘩汤',10],
                    ['Python Book',99],
                    ['Bike',199],
                    ['ViVo X9',2499],
    
                    ]
    
    import os
    name_exist = []
    current_user_info = []
    tag1 = True
    while tag1:
        msg = '''
        1 注册
        2 登录
        3 购物
        '''
        print(msg)
    
        is_exist = os.path.exists('db_shopping')
        if is_exist:
            with open('db_shopping', 'r') as f:
                for line in f:
                    line = line.strip('
    ').split(':')
                    name_exist.append(line[0])
        else:
            with open('db_shopping', 'w'):
                pass
    
        choice = input('请选择>>: ').strip()
        if choice == '1':
            while True:
                name_inp = input('username>>: ').strip()
                if name_inp in name_exist:
                    print('用户名已存在')
                    continue
                else:
                    break
    
            while True:
                pwd_inp = input('password>>: ')
                pwd_inp_check = input('check_password>>: ')
                if pwd_inp != pwd_inp_check:
                    print('两次密码不一致')
                else:
                    break
    
            while True:
                balance = input('balance>>: ')
                if not balance.isdigit():
                    print('余额必须是整数')
                else:
                    break
    
            user_info = '%s:%s:%s
    ' %(name_inp,pwd_inp,balance)
            with open('db_shopping','a') as f:
                f.write(user_info)
            print('注册成功')
    
        elif choice == '2':
            count = 1
            tag = True
            while tag:
                if count == 4:
                    print('重试超过3次,退出')
                    break
                name_inp2 = input('请输入用户名>>: ').strip()
                pwd_inp2 = input('请输入密码>>: ')
                with open('db_shopping','r') as f2:
                    for line2 in f2:
                        line2 = line2.strip('
    ').split(':')
                        name_db2 = line2[0]
                        pwd_db2 = line2[1]
                        balance_db2 = line2[2]
                        if name_inp2 == name_db2  and pwd_inp2 == pwd_db2:
                            current_user_info = [name_db2,pwd_db2,balance_db2]
                            print('登录成功')
                            tag = False
                            break
    
                    else:
                        count += 1
                        print('用户名或密码不存在')
    
        elif choice == '3':
            if len(current_user_info) == 0:
                print('请先登录')
                continue
            name3 = current_user_info[0]
            balance3 = current_user_info[2]
            shopping_cart = []
            while True:
                for index, product in enumerate(product_list):
                    info = '商品编号:%s 商品名:%s 价格:%s' % (index, product[0], product[1])
                    print(info)
    
                choice3 = input('请选择商品编号>>: ').strip()
                if  not choice3.isdigit():continue
                choice3 = int(choice3)
                if not 0 <= choice3 < len(product_list):
                    print('商品编号输入错误')
                    continue
    
                while True:
                    product_count = input('请输入要购买的数量').strip()
                    if not product_count.isdigit():
                        print('数量必须是整数')
                        continue
                    else:
                        break
    
                product_name = product_list[choice3][0]
                product_price = product_list[choice3][1]
                product_count = int(product_count)
                product_cp = product_count * product_price
                balance3 = int(balance3)
    
                if balance3 > product_cp:
                    balance3 -= product_cp
                else:
                    print('余额不足')
                    continue
    
                for line3 in shopping_cart:
                    if product_name == line3['商品名']:
                        line3['商品数量'] += product_count
                        break
                else:
                    shopping_info = {'商品名':product_name,'商品价格':product_price,'商品数量':product_count,'余额':balance3}
                    shopping_cart.append(shopping_info)
    
                cmd = input('退出Y/y>>: ')
                if cmd == 'Y' or cmd == 'y':
                    print(shopping_cart)
                    with open('db_shopping','r') as read_f,open('db_shopping.swap','w') as write_f:
                        for line4 in read_f:
                            line4 = line4.strip('
    ').split(':')
                            if name3 == line4[0]:
                                line4[2] = str(balance3)
                            line4 = ':'.join(line4)+'
    '
                            write_f.write(line4)
                    os.remove('db_shopping')
                    os.rename('db_shopping.swap','db_shopping')
                    tag1 = False
                    break
        else:
            print('输入错误')
    View Code
    # 作业一: 三级菜单
    # 要求:
    # 打印省、市、县三级菜单
    # 可返回上一级
    # 可随时退出程序
    menu = {
        '北京': {
            '海淀': {
                '五道口': {
                    'soho': {},
                    '网易': {},
                    'google': {}
                },
                '中关村': {
                    '爱奇艺': {},
                    '汽车之家': {},
                    'youku': {},
                },
                '上地': {
                    '百度': {},
                },
            },
            '昌平': {
                '沙河': {
                    '老男孩': {},
                    '北航': {},
                },
                '天通苑': {},
                '回龙观': {},
            },
            '朝阳': {},
            '东城': {},
        },
        '上海': {
            '闵行': {
                "人民广场": {
                    '炸鸡店': {}
                }
            },
            '闸北': {
                '火车战': {
                    '携程': {}
                }
            },
            '浦东': {},
        },
        '山东': {},
    }
    
    layer = [menu,]   #核心功能
    while True:
        if len(layer) == 0:break
        current_layer = layer[-1] #核心功能
        for k in current_layer:   #核心功能
            print(k) #核心功能
        choice = input('选择>>: ').strip() #核心功能
        if choice == 'q':
            break
        if choice == 'b':
            layer.pop()
            continue
        if not current_layer[choice]:break
        layer.append(current_layer[choice]) #核心功能
    View Code
  • 相关阅读:
    二分查找代码
    顺序查找代码
    js原生获取css属性
    前端使用nginx上传文件时,进度获取不对
    动态赋值poster,无法显示
    git 命令收藏
    promise笔记
    vscode自定义代码块
    vuex的初始化
    webstorm添加自定义代码块
  • 原文地址:https://www.cnblogs.com/xujinjin18/p/9148195.html
Copyright © 2011-2022 走看看