数据类型、字符编码、文件处理


一 引子
  • 二 数字
  • 三 字符串
  • 四 列表
  • 五 元组
  • 六 字典
  • 七 集合 
  • 八 数据类型总结
  • 九 运算符
  • 十 字符编码
  • 十一 文件处理
  • 十二 作业
  • https://www.bilibili.com/video/av26786159)   >>> x=1-2j >>> x.real 1.0 >>> x.imag -2.0   详细:http://www.cnblogs.com/linhaifeng/articles/5935801.html#_label34

    http://www.cnblogs.com/linhaifeng/articles/5950339.html 

    http://www.cnblogs.com/linhaifeng/articles/5984922.html

    十二 作业

    #作业一: 三级菜单
    #要求:
    打印省、市、县三级菜单
    可返回上一级
    可随时退出程序
    menu = {
        '北京':{
            '海淀':{
                '五道口':{
                    'soho':{},
                    '网易':{},
                    'google':{}
                },
                '中关村':{
                    '爱奇艺':{},
                    '汽车之家':{},
                    'youku':{},
                },
                '上地':{
                    '百度':{},
                },
            },
            '昌平':{
                '沙河':{
                    '老男孩':{},
                    '北航':{},
                },
                '天通苑':{},
                '回龙观':{},
            },
            '朝阳':{},
            '东城':{},
        },
        '上海':{
            '闵行':{
                "人民广场":{
                    '炸鸡店':{}
                }
            },
            '闸北':{
                '火车战':{
                    '携程':{}
                }
            },
            '浦东':{},
        },
        '山东':{},
    }
    
    
    
    tag=True
    while tag:
        menu1=menu
        for key in menu1: # 打印第一层
            print(key)
    
        choice1=input('第一层>>: ').strip() # 选择第一层
    
        if choice1 == 'b': # 输入b,则返回上一级
            break
        if choice1 == 'q': # 输入q,则退出整体
            tag=False
            continue
        if choice1 not in menu1: # 输入内容不在menu1内,则继续输入
            continue
    
        while tag:
            menu_2=menu1[choice1] # 拿到choice1对应的一层字典
            for key in menu_2:
                print(key)
    
            choice2 = input('第二层>>: ').strip()
    
            if choice2 == 'b':
                break
            if choice2 == 'q':
                tag = False
                continue
            if choice2 not in menu_2:
                continue
    
            while tag:
                menu_3=menu_2[choice2]
                for key in menu_3:
                    print(key)
    
                choice3 = input('第三层>>: ').strip()
                if choice3 == 'b':
                    break
                if choice3 == 'q':
                    tag = False
                    continue
                if choice3 not in menu_3:
                    continue
    
                while tag:
                    menu_4=menu_3[choice3]
                    for key in menu_4:
                        print(key)
    
                    choice4 = input('第四层>>: ').strip()
                    if choice4 == 'b':
                        break
                    if choice4 == 'q':
                        tag = False
                        continue
                    if choice4 not in menu_4:
                        continue
    
                    # 第四层内没数据了,无需进入下一层
    三级菜单面条版 
    menu = {
        '北京':{
            '海淀':{
                '五道口':{
                    'soho':{},
                    '网易':{},
                    'google':{}
                },
                '中关村':{
                    '爱奇艺':{},
                    '汽车之家':{},
                    'youku':{},
                },
                '上地':{
                    '百度':{},
                },
            },
            '昌平':{
                '沙河':{
                    '老男孩':{},
                    '北航':{},
                },
                '天通苑':{},
                '回龙观':{},
            },
            '朝阳':{},
            '东城':{},
        },
        '上海':{
            '闵行':{
                "人民广场":{
                    '炸鸡店':{}
                }
            },
            '闸北':{
                '火车战':{
                    '携程':{}
                }
            },
            '浦东':{},
        },
        '山东':{},
    }
    
    
    
    #part1(初步实现):能够一层一层进入
    layers = [menu, ]
    
    while True:
        current_layer = layers[-1]
        for key in current_layer:
            print(key)
    
        choice = input('>>: ').strip()
    
        if choice not in current_layer: continue
    
        layers.append(current_layer[choice])
    
    
    
    #part2(改进):加上退出机制
    layers=[menu,]
    
    while True:
        if len(layers) == 0: break
        current_layer=layers[-1]
        for key in current_layer:
            print(key)
    
        choice=input('>>: ').strip()
    
        if choice == 'b':
            layers.pop(-1)
            continue
        if choice == 'q':break
    
        if choice not in current_layer:continue
    
        layers.append(current_layer[choice])
    三级菜单文艺青年版
    #作业二:请闭眼写出购物车程序
    #需求:
    用户名和密码存放于文件中,格式为: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':
            #1、登陆
            tag=True
            count=0
            while tag:
                if count == 3:
                    print('\033[45m尝试次数过多,退出。。。\033[0m')
                    break
                uname = input('用户名:').strip()
                pwd = input('密码:').strip()
    
                with open(db_file,'r',encoding='utf-8') as f:
                    for line in f:
                        line=line.strip('\n')
                        user_info=line.split(',')
    
                        uname_of_db=user_info[0]
                        pwd_of_db=user_info[1]
                        balance_of_db=int(user_info[2])
    
                        if uname == uname_of_db and pwd == pwd_of_db:
                            print('\033[48m登陆成功\033[0m')
    
                            # 登陆成功则将用户名和余额添加到列表
                            current_userinfo=[uname_of_db,balance_of_db]
                            print('用户信息为:',current_userinfo)
                            tag=False
                            break
                    else:
                        print('\033[47m用户名或密码错误\033[0m')
                        count+=1
    
        elif choice == '2':
            uname=input('请输入用户名:').strip()
            while True:
                pwd1=input('请输入密码:').strip()
                pwd2=input('再次确认密码:').strip()
                if pwd2 == pwd1:
                    break
                else:
                    print('\033[39m两次输入密码不一致,请重新输入!!!\033[0m')
    
            balance=input('请输入充值金额:').strip()
    
            with open(db_file,'a',encoding='utf-8') as f:
                f.write('%s,%s,%s\n' %(uname,pwd1,balance))
    
        elif choice == '3':
            if len(current_userinfo) == 0:
                print('\033[49m请先登陆...\033[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("Added product " + pname + " into shopping cart,\033[42;1myour current\033[0m balance " + 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('\n').split(',')
                                            l[-1]=str(balance_of_db)
                                            line=','.join(l)+'\n'
    
                                        write_f.write(line)
                                os.remove(src_file)
                                os.rename(dst_file,src_file)
    
                                print('购买成功,请耐心等待发货')
    
                            shopping_cart={}
                            current_userinfo=[]
                            tag=False
    
    
                    else:
                        print('输入非法')
    
    
        else:
            print('\033[33m非法操作\033[0m')
    购物车程序面条版