一个简单的购物商城,记录一下。
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('\n'+user_input.strip()) #将变量user_input写到文件中,\n为换行 37 38 def lis(): #显示购物车空函数 39 print('您的购物车里什么都没有哦,快去选购吧!\n' 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,'*'))
转载于:https://www.cnblogs.com/xieyi5420/p/10563913.html
一个简单的购物商城,记录一下。相关推荐
- 设计一个简单的购物页面(html+css+php)
水平有限,精力有限,很多东西写得可能不那么详细,有不懂可以留言提问,懂的尽量解答 首先讲一下,购物页面肯定会涉及到数据库部分的,我这篇文章数据库方面不会详细讲,就简单给个思路.购物需要用到cookie ...
- php实现一个简单的购物网站
实现一个简单的购物网站 一.考试时间:8小时 二.开发工具:DW 三.数据库:见附件 四.需要实现的页面: Index:浏览商品页面,显示商品列表,用户可以点击"购买". View ...
- 用Vue+Node搭建网上购物商城——记录篇
PC端网上购物商城 github地址 前言 项目采用的技术栈: Vue+Node+MySQL 前端:用Vue-cli搭建,使用Vue全家桶+element-ui 后端:express框架 数据库:My ...
- 从0开始利用宝塔linux面板+DSShop搭建一个简单的购物网站
宝塔linux面板的安装详情在这 德尚官网 利用DSSshop搭建一个单店铺商城 在软件商店一键部署 找到DSSshop点击一键安装 在网站设置出添加一下ip 添加完之后在浏览器上方输入ip地址进行安 ...
- 一个简单的购物类网站
最近给学校做了一个购物类的网站:捐赠网站;模式和淘宝是一样的:选择商品->选择数量->填写留言(评价)->付款(支付宝付款);逻辑比较简单. 接下来的几天,我将就编程中遇到的一些问题 ...
- 一个简单的OPPO商城页面
HTML+css 欢迎来学习 <!DOCTYPE html> <html><head><meta charset="utf-8">& ...
- 用RPA工具写一个简单的数据汇总记录
老婆大人的要求是要把4个excel表格的某几行的数据汇总到一个台账中,因为水平实在不行只能用RPA工具写了. 首先弄一个输入界面给她选择,第一个是台账,其他是需要汇总的分表(图片打码位置是公司名所以就 ...
- 用HTML和css写一个简单地购物小票
效果图 HTML代码 <!DOCTYPE html> <html><head><meta charset="utf-8" />< ...
- javaweb超级简单网上购物商城系统源码SSM框架结构
项目介绍 系统开发平台:Windows 10 技术框架:ssm 前端框架:jquery+div+css 开发环境:IDEA+mysql8.x 浏览器:Chrome或360浏览器 项目展示: 前端页面 ...
最新文章
- Installation error: INSTALL_FAILED_UPDATE_INCOMPATIBLE解决方法
- 安徽大学大一高数第二章习题册答案
- OpenCASCADE:OCCT应用框架OCAF之函数机制使用示例
- VTK:图片之ImageShiftScale
- 手机app上的consent管理
- K-Means原理详解与Java代码实现细节
- 关于iBatis中的错误提示(必须以 或 /结尾,有时并不是你的结尾没有以 /结束,而是这个标签里面有问题!!)(更重要的是sqlMap的修改手段!!!)
- 关于echart 图表自适应问题的解决办法
- 分布式消息系列:详解RocketMQ的简介与演进、架构设计、关键特性与应用场景
- linux fdisk ntfs,2014.1.2 学习记录(fdisk、ntfs)
- 各种材料衣服的保养 全面知识分享
- 抓取手机端app日志的方法总结
- python解析钩针图解到markdown文件/requests/BeautifulSoup
- Sniffing_Spoofing Report
- 用小程序组装App,小程序容器技术好比基建
- Jupyter notebook文字排版笔记
- VariantsTransport_SAP刘梦_新浪博客
- 多活分布式数据中心如何实现DNS域名解析和负载均衡?
- 十级龙王间的决斗(C++)
- Python分析5000+抖音大V,发现大家都喜欢这类视频!