zoukankan      html  css  js  c++  java
  • 一个简单的购物商城,记录一下。

      1 #!/usr/bin/env python3
      2 Menu = {
      3     '电器':{
      4         '电视':{'索尼':'¥2999','康佳':'¥3999','飞利浦':'¥4999','购物车':'购物车','返回':'返回','退出':'退出'},
      5         '洗衣机':{'美的':'¥999','海尔':'¥1099','奥克斯':'¥1599','购物车':'购物车','返回':'返回','退出':'退出'},
      6         '中央空调':{'格力':'¥5699','日立':'¥18999','海信':'¥28999','购物车':'购物车','返回':'返回','退出':'退出'},
      7         '购物车':'购物车',
      8         '返回':'返回',
      9         '退出':'退出'
     10         },
     11     '数码产品':{
     12         '手机':{'苹果':'¥12999','小米':'¥3299','华为':'4299','购物车':'购物车','返回':'返回','退出':'退出'},
     13         '电脑':{'联想':'¥6999','戴尔':'¥8999','惠普':'¥7999','购物车':'购物车','返回':'返回','退出':'退出'},
     14         '摄影机':{'索尼相机':'¥19999','佳能':'¥1999','尼康':'¥6999','购物车':'购物车','返回':'返回','退出':'退出'},
     15         '购物车': '购物车',
     16         '返回':'返回',
     17         '退出':'退出'
     18         },
     19     '服装':{
     20         '鞋子':{'阿迪':'¥699','耐克':'¥599','李宁':'¥499','购物车':'购物车','返回':'返回','退出':'退出'},
     21         '衣服':{'七匹狼':'¥689','花花公子':'¥109','美特斯邦威':'¥209','购物车':'购物车','返回':'返回','退出':'退出'},
     22         '裤子':{'森马':'¥119','班尼路':'¥229','佐丹奴':'¥339','购物车':'购物车','返回':'返回','退出':'退出'},
     23         '购物车': '购物车',
     24         '返回':'返回',
     25         '退出':'退出'
     26         },
     27     '购物车':'购物车',
     28     '退出':'退出',
     29     }
     30 import time                                                                         #时间模块
     31 local_time = time.strftime('%Y{y}%m{m}%d{d} %H:%M:%S').format(y='',m='',d='')    #定义一个时间格式
     32 
     33 
     34 def black_list():                                              #打开文件写入黑名单函数
     35     with open("black_list", "a") as black:
     36         black.write('
    '+user_input.strip())                  #将变量user_input写到文件中,
    为换行
     37 
     38 def lis():                                                          #显示购物车空函数
     39     print('您的购物车里什么都没有哦,快去选购吧!
    '
     40           '请输入%s或%s' % (previous, sign_out))
     41     for i in enumerate(lis_previous_sign_out, 1):                   #循环将列表中元素前加序号,从1开始
     42         print(i[0], i[1])                                           #打印元祖i的第一个和第二个元素
     43         dic_previous_sign_out[str(i[0])] = i[1]                     #循环将i的第一个元素加为字典中keys,第二个元素为values
     44 
     45 def exit():                                                         #结算退出函数
     46     ye = float(balance.strip('')) - float(sum(js_list))            #浮点计算,float为浮点,这里strip用来去掉字符串的符号,
     47     # sum()求和函数,这里用来计算列表js_list中所有元素的总和,js_list中为每个商品购买的总价
     48     if ye >= 0:                                                 #余额大于等于0
     49         while True:
     50             shopping = input('继续购物y或者结算退出商城n,输入y or n:').strip()
     51             if len(shopping) == 0:
     52                 print('输入不能为空,请重新输入!')
     53                 continue
     54             if shopping == 'y':
     55                 return False                                #返回False
     56             if shopping == 'n':
     57                 print('本次购物总计消费¥%s元,余额:¥%s元' % (float(sum(js_list)), ye))
     58                 print('欢迎下次购买,'
     59                       '用户%s退出商城!'
     60                       '%s' % (user_input, local_time))
     61                 return True
     62             else:
     63                 print('输入有误,请重新输入!')
     64                 continue
     65     else:
     66         print('余额不足请充值')
     67         return True
     68 
     69 def js_Settlement():                                        #结算函数
     70     while True:
     71         settlement = input('继续购物y或者结算n,输入%s/%s:' % ('y', 'n')).strip()
     72         if settlement == 'y':
     73             continue_flag = True
     74             break
     75         elif len(settlement) == 0:
     76             print('输入不能为空')
     77             continue
     78         elif settlement == 'n':
     79             for i in enumerate(Shopping_Cart.items(), 1):
     80                 # print(i)  i = (1:(索尼:{¥2999:[1,]}))
     81                 sp = i[1][0]                                        #i[1]=(索尼:{¥2999:[1,]}) i[1][0]=索尼
     82                 dj = list(i[1][1])[0]                               #i[1][1]={¥2999:[1,]},list(i[1][1])=(¥2999:[1,]),
     83                 # list(i[1][1])[0]=¥2999
     84                 sl = i[1][1][list(i[1][1])[0]].count(1) #i[1][1]={¥2999:[1,]},list(i[1][1])[0]=¥2999,
     85                 # i[1][1][list(i[1][1])[0]]=字典{¥2999:[1,]}取keys¥2999得到values[1],count(1)列表计算方法,统计列表中元素1有多少个
     86                 zj = int(dj.strip('')) * sl    #¥2999用strip去掉符号¥,乘以sl
     87                 js_list.append(zj)              #将zj用append方法追加到列表js_list中
     88                 print('%s 商品:%s 单价:%s 数量:%s 总价:%s' % (i[0], sp, dj, sl, zj))
     89             while True:
     90                 settlement = input('确认结算,确认y或者退出商城n,输入y or n:')
     91                 ye = float(balance.strip('')) - float(sum(js_list)) #浮点计算,sum(js_list)为列表js_list所有元素总和
     92                 print('本次购物总计消费¥%s元' % (float(sum(js_list))))
     93                 if settlement == 'y':
     94                     if exit():                              #判断函数exit()返回True
     95                         return True
     96                     else:
     97                         return False
     98                 if settlement == 'n':
     99                     return False
    100             # if break_flag == True:
    101             #     break
    102         else:
    103             print('输入有误,请输入y/n')
    104             continue
    105 
    106 def shopping_cart():
    107     if Shopping_Cart:
    108         js_Settlement()
    109     else:
    110         while True:
    111             lis()  # 调用函数lis()
    112             user_choice = input('输入编号:').strip()
    113             if user_choice == list(dic_previous_sign_out)[0]:
    114                 return True
    115             elif user_choice == list(dic_previous_sign_out)[1]:
    116                 return False
    117             elif len(user_choice) == 0:
    118                 print('输入不能为空!!!')
    119                 continue
    120             else:
    121                 print('输入有误,请重新输入!!!')
    122                 continue
    123 
    124 with open('user_passwd', 'r') as f:                             #打开用户密码文件
    125     user = dict(line.strip().split(":") for line in f if line)#将文件内容转换为字典
    126 
    127 passwd_error = []                                             #创建密码错误列表,密码错误一次将用户写入列表
    128 user_does_not_exist = []                                      #创建不存在用户列表,不存在用户写入列表
    129 Shopping_Cart = {}                                             #购物车空字典
    130 dic_menu = {}                                                   #商品展示第一级空字典
    131 dic_class = {}                                                  #商品展示第二级空字典
    132 dic_commodity = {}
    133 lis_previous_sign_out = ['返回商城','退出商城']                           #购物车中列表
    134 dic_previous_sign_out = {}                                       #购物车中空字典
    135 balance = '¥100000.00'
    136 break_flag = False                                            #默认设置为False,用来退出多层循环
    137 continue_flag = False                                          #默认设置为False,用来退出当前循环
    138 previous = '返回商城'
    139 sign_out = '退出商城'
    140 js_list = []                                            #每个商品的总价写入这个列表,商品*数量
    141 
    142 for i in range(10):                                             #循环10次
    143     user_input = input("Name:").strip()                         #输入账号,strip去除两侧空格
    144     user_passwd = input("Passwd:").strip()                      #输入密码,strip去除两侧空格
    145     with open("black_list","r") as black:                       #打开黑名单文件
    146         for line in black:
    147             if user_input == line.strip():                         #判断用户是否在黑名单中
    148                 Tips = '账户%s被锁定,请与管理员联系!'%user_input      #定义字符串,将用户输入变量带入字符串,%s代替用户输入
    149                 print(Tips.center(30,'*'))                          #字符串center方法,字符串居中,30为总长度,空白处用*代替
    150                 break_flag = True                                   #将break_flag的值重新定义
    151                 break                                               #退出循环
    152         if break_flag == True:                                      #判断break_flag的值是否为True
    153             break
    154         if len(user_input) == 0 or len(user_passwd) == 0:      #判断用户输入是否为空格
    155             Tips = '用户名或密码不能为空!'
    156             print(Tips.center(30,'*'))
    157             continue                                         #退出本次循环
    158     if user_input in user and user[user_input] == user_passwd:#判断用户名和密码是否一致
    159         Tips = '''
    160         %s 欢迎用户%s登录商城'''%(local_time,user_input)
    161         print(Tips.strip())                     #格式化输出%s来代替变量
    162         msg = '''
    163         用户:%s   账户余额:%s
    164         '''%(user_input,balance)
    165         print(msg.strip())
    166         while True:
    167             for i in enumerate(Menu, 1):                                #将字典第一级的kyes打印出来并加上序号,从1开始
    168                 print(i[0],i[1])                                        #i为元祖,这里循环打印元祖的第一个元素和第二个元素
    169                 dic_menu[str(i[0])] = i[1]                              #循环将i的第一个元素写到字典dic_menu中为keys,
    170                 # 第二个元素写到字典中为vlaues。
    171             user_choice_1 = input('请选择商品分类或退出:').strip()
    172             if user_choice_1 == list(dic_menu)[-1]:
    173                 break
    174             elif user_choice_1 == list(dic_menu)[-2]:
    175                 if shopping_cart():
    176                     continue
    177                 else:
    178                     break_flag = True
    179                     break
    180             elif len(user_choice_1) == 0:
    181                 print('输入不能为空!!!')
    182                 continue
    183             elif user_choice_1 in list(dic_menu)[0:3]:              #判断用户输入是否在列表的0-3,0包含0,3为小于3
    184                 while True:
    185                     for i in enumerate((Menu[dic_menu[user_choice_1]]), 1):
    186                         print(i[0], i[1])
    187                         dic_class[str(i[0])] = i[1]
    188                     user_choice_2 = input('请选择商品:').strip()
    189                     if user_choice_2 == list(dic_class)[-1]:
    190                         break_flag = True
    191                         break
    192                     elif user_choice_2 == list(dic_class)[-2]:
    193                         continue_flag = True
    194                         break
    195                     elif user_choice_2 == list(dic_class)[-3]:
    196                         if shopping_cart():             #注意:判断函数返回值会执行函数,这里不需要单独在执行函数,否则会重复执行
    197                             continue
    198                         else:
    199                             break_flag = True
    200                             break
    201                     elif len(user_choice_2) == 0:
    202                         print('输入不能为空!!!')
    203                         continue
    204                     elif user_choice_2 in list(dic_class)[0:3]:         #判断用户输入是否在列表的0-3,0包含0,3为小于3
    205                         commodity = Menu[dic_menu[user_choice_1]][dic_class[user_choice_2]]
    206                         while True:
    207                             for i in enumerate(commodity.items(),1):
    208                                 if i[0] < 4:                            #enumerate方法为字典前添加序号,添加后为元祖:(1,(索尼:¥2999))
    209                                     # 循环元祖,取元祖第一个元素比较,小于4输出
    210                                     print(i[0], i[1][0], ':', i[1][1])#格式化输出,例:(1,(索尼:¥2999))为i,i[0]为1,i[1]为(索尼:¥2999),
    211                                     # i[1][0]为索尼,i[1][1]为¥2999
    212                                 elif i[0] >= 4:
    213                                     print(i[0], i[1][0])
    214                                 dic_commodity[str(i[0])] = i[1][0]
    215                             user_choice_3 = input('请选择购买商品编号:').strip()
    216                             if user_choice_3 == list(dic_commodity)[-1]:   #判断用户输入是否和列表最后一个元素相等,-1代表最后一个
    217                                 break_flag = True
    218                                 break
    219                             elif user_choice_3 == list(dic_commodity)[-2]:
    220                                 continue_flag = True
    221                                 break
    222                             elif user_choice_3 == list(dic_commodity)[-3]:
    223                                 if shopping_cart():
    224                                     continue
    225                                 else:
    226                                     break_flag = True
    227                                     break
    228                             elif len(user_choice_3) == 0:
    229                                 print('输入不能为空!!!')
    230                                 continue
    231                             elif user_choice_3 in list(dic_commodity)[0:3]:
    232                                 print('%s:%s已经加入购物车' % (dic_commodity[user_choice_3], commodity[dic_commodity[user_choice_3]]))
    233                                 k = dic_commodity[user_choice_3]
    234                                 v = commodity[dic_commodity[user_choice_3]] #commodity = Menu[dic_menu[user_choice_1]][dic_class[user_choice_2]]
    235                                 if Shopping_Cart:                               #判断字典Shopping_Cart是否为空,这里非空
    236                                     if k in Shopping_Cart and v == list(Shopping_Cart[k])[0]:
    237                                         Shopping_Cart[k][v].append(1)           #Shopping_Cart[k][v]取出列表用append方法追加1进去
    238                                     if k not in Shopping_Cart:
    239                                         Shopping_Cart[k] = {v: [1, ]}
    240                                 else:
    241                                     Shopping_Cart[k] = {v:[1,]}
    242                                 if js_Settlement():         #判断函数的返回值,为True
    243                                     break_flag = True
    244                                     break
    245                                 else:                       #函数返回值False
    246                                     continue
    247                                 # if break_flag == True:
    248                                 #     break
    249                                 # if continue_flag == True:
    250                                 #     continue
    251                             else:
    252                                 print('输入有误,请重新输入!!!')
    253                                 continue
    254                         if break_flag == True:
    255                             break
    256                         if continue_flag == True:
    257                             continue
    258                     else:
    259                         print('输入有误,请重新输入!!!')
    260                         continue
    261                 if break_flag == True:
    262                      break
    263                 if continue_flag == True:
    264                     continue
    265 
    266             else:
    267                 print('输入有误,请重新输入!!!')
    268                 continue
    269         if break_flag == True:
    270             break
    271         if continue_flag == True:
    272             continue
    273     elif user_input not in user:                            #判断用户是都存在
    274         Tips = '用户%s不存在,请重试!'%user_input
    275         print(Tips.center(30,'*'))
    276         user_does_not_exist.append(user_input)              #用户不存在就写入用户不存在列表中
    277         if user_does_not_exist.count(user_input) == 5:      #统计用户不在列表中不存在的用户次数,超过5次锁定
    278             Tips = '尝试次数过多,账户%s锁定!'%user_input
    279             print(Tips.center(30,'*'))
    280             black_list()                                    #调用函数black_list
    281             break
    282     else:
    283         Tips = '密码错误!'
    284         print(Tips.center(30,'*'))
    285         passwd_error.append(user_input)                     #将密码错误用户写入密码错误列表中
    286         if passwd_error.count(user_input) == 3:             #统计密码错误用户是否超过3次
    287             Tips = '密码错误3次,账户%s锁定,请联系管理员!'%user_input
    288             print(Tips.center(30,'*'))
    289             black_list()                                    #调用函数black_list
    290             break
    291         else:
    292             continue                                       #退出当前循环
    293 else:
    294     Tips = '尝试次数过多!'
    295     print(Tips.center(30,'*'))
  • 相关阅读:
    hdu1072 逃离迷宫系列 bfs
    hdu1495 倒水bfs
    hdu 1548 A strange lift (bfs)
    hdu1728 逃离迷宫bfs
    hdu1548 奇怪的电梯 dfs dijkstra bfs都可以,在此奉上dfs
    delphi 窗体的位置和高宽度-TForm:Letf、Top、Width、Height、ClientWidth、ClientHeight
    Delphi 鼠标控制函数GetCursorPos、SetCursorPos
    Delphi CoCreateGuid()函数 获取GUID
    Delphi出现“borland license information was found,but it is not valid for delphi”的错误,无法运行的解决方法
    一维条形码生成与识别技术
  • 原文地址:https://www.cnblogs.com/xieyi5420/p/10563913.html
Copyright © 2011-2022 走看看