在网上看到了金角大王(Alex)老师的课,老师讲课很幽默,开始记录每一次学习作业的内容,欢迎大家交流以及代码的使用。

1. day2作业内容
     程序:购物车程序
     需求:
              1.启动程序后,让用户输入工资,然后打印商品列表
              2.允许用户根据商品编号购买商品
              3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
              4.可随时退出,退出时,打印已购买商品和余额
              5.用户入口:
                   5.1商品信息存储在文件里
                   5.2已购商品,余额的记录(采用文本储存)
              6.商家入口:
                   6.1可添加商品,修改商品价格
 2. day2代码
      登入时需先输入账户名称,管理员账号:PyDragon,用户账号:大龙 。对应了两个不同的操作界面,并每次结束程序和开始程序时都从本地文本文件中读取列表信息,实现数据在本地的存储。
      具体代码如下:

#coding:utf-8
#引入python内置函数os
import os#购物系统类
class shoppingSystem():FoodName = NoneFoodCost = 0Function = NoneCost = 0System = TrueUserName = NoneSalary = 0Money = 0user_and_salaryList = [["大龙",0]]productList = []buyList = []tplt = "{0:>4}\t{1:>4}\t{2:>6}"# {1:{3}^8} 1表示位置,{3}表示用第3个参数来填充,^表示居中,8表示占8个位置,chr(12288)中文空格tplt_1 = "{0:>4}\t{1:{3}^8}\t{2:>0}"#数据文件导入初始化def init_file(self):self.read_data(self.buyList,'buyList')self.read_data_2(self.productList,'productList')#用户名登入def MainShop(self):self.read_money('money')self.UserName = input("输入用户名:")if self.GM():self.GM_display()self.GM_function()elif self.check_user():self.display()self.buy()else:print("用户名不存在,请重新输入")self.MainShop()#判断是否为管理员用户名def GM(self):if self.UserName == 'PyDragon':return 1#主界面显示def display(self):print(self.tplt.format('购买编号','食物名称','单价(元)',chr(12288)))for index,item in enumerate(self.productList):print(self.tplt_1.format(index,item[0],item[1],chr(12288)))print('当前账户剩余:'+str(self.Money)+'元')print('已购清单(F)  退出系统(Q)')#管理员主界面显示def GM_display(self):print('----------------管理员后台界面-----------------')print('增加食品(A) 删除食品(D) 修改价格(C) 查询菜单(L)')print('退出系统(Q)')print('-----------------------------------------------')#管理员功能def GM_function(self):self.Function = input("执行功能按键编号:")if self.Function == 'a':self.function_a()elif self.Function == 'd':self.function_d()elif self.Function == 'c':self.function_c()elif self.Function == 'l':self.function_l()elif self.Function == 'q':self.save_data_2(self.productList,'productList')exit()else:print('输入错误,请重新输入执行功能')self.GM_function()#管理员更改食物价格def function_c(self):self.FoodName = input("输入要更改的食物名称:")self.FoodCost = input("输入"+'\033[1;32;0m'+str(self.FoodName)+'\033[0m'+"新价格")if self.FoodCost.isdigit():if not self.check_food():i = self.find_food_number()self.productList[i][1] = self.FoodCostprint(('\033[1;32;0m'+str(self.FoodName)+'\033[0m')+'修改成功')print('继续修改(C)  返回主菜单(R)')choose = input()if choose == 'c':self.function_c()elif choose == 'r':self.GM_display()self.GM_function()else:print('输入错误,自动返回主菜单')self.GM_display()self.GM_function()else:print('食物名重复,请重新核对输入')self.function_a()else:self.GM_display()print('\033[1;31;0m价格非法输入,退回至主菜单\033[0m')self.GM_function()#管理员添加食物功能def function_a(self):self.FoodName = input("输入食物名称:")self.FoodCost = input("输入"+'\033[1;32;0m'+str(self.FoodName)+'\033[0m'+"单价")if self.FoodCost.isdigit():if self.check_food():self.productList.append([self.FoodName,int(self.FoodCost)])print(('\033[1;32;0m'+str(self.FoodName)+'\033[0m')+'添加成功')print('继续添加(A)  返回主菜单(R)')choose = input()if choose == 'a':self.function_a()elif choose == 'r':self.GM_display()self.GM_function()else:print('输入错误,自动返回主菜单')self.GM_display()self.GM_function()else:print('食物名重复,请重新核对输入')self.function_a()else:self.GM_display()print('\033[1;31;0m价格非法输入,退回至主菜单\033[0m')self.GM_function()#管理员查看食物功能def function_l(self):self.show_food()print('返回主菜单(R)')choose = input()if choose == 'r':self.GM_display()self.GM_function()else:print('输入错误,自动返回主菜单')self.GM_display()self.GM_function()#管理员删除食物功能def function_d(self):self.FoodName = input('请输入要删除的食物名称:')if self.check_food():print('食物名称不存在,请检查确认后重新输入')self.function_d()for i in range(len(self.productList)):if self.FoodName == self.productList[i][0]:self.productList.remove(self.productList[i])print("删除"+'\033[1;31;0m'+str(self.FoodName)+'\033[0m'+"成功")breakprint('继续删除(D)   返回主菜单(R)')choose = input()if choose == 'd':self.function_d()elif choose == 'r':self.GM_display()self.GM_function()else:print('输入错误,自动返回主菜单')self.GM_display()self.GM_function()#展示食物清单def show_food(self):print('------------食物清单-------------')print(self.tplt.format('购买编号','食物名称','单价(元)',chr(12288)))for index,item in enumerate(self.productList):print(self.tplt_1.format(index,item[0],item[1],chr(12288)))print('---------------------------------')#检查食物是否重名def check_food(self):for i in range(len(self.productList)):if self.FoodName == self.productList[i][0]:return 0else:return 1#c查询食物编号def find_food_number(self):for i in range(len(self.productList)):if self.FoodName == self.productList[i][0]:return ielse:return -1#用户名核对def check_user(self):for i in range(len(self.user_and_salaryList)):if self.UserName == self.user_and_salaryList[i][0]:self.Salary = input("认证成功,输入存储金额:")try:self.user_and_salaryList[i][1] += int(self.Salary)self.Money += self.user_and_salaryList[i][1]except Exception as e:print("请输入纯数字金额,异常:",e)self.check_user()return 1#购买功能def buy(self):while self.System:choose = input("输入你所要购买的食物编号:")if choose == 'q':self.save_data_1(self.buyList,'buyList')self.save_data_2(self.productList,'productList')self.save_money('money')print('-----------------------')print('欢迎使用本系统,下次再见')print('-----------------------')exit()elif choose == 'f':print('------------购买清单--------------')for i in self.buyList:print(i)print('账户当前余额:',self.Money)print('----------------------------------')self.return_way()elif choose.isdigit():choose = int(choose)if 0 <= choose < len(self.productList):if self.Money >= self.productList[choose][1]:self.Money -= self.productList[choose][1]self.Cost += self.productList[choose][1]self.buyList.append(self.productList[choose][0])self.display()print("-------------------------------------")print('购买成功,请继续输入编号购买或按Q键退出')print("-------------------------------------")else:self.display()print("-------------------")print("余额不足,请重新选择")print("-------------------")self.buy()else:print("-----------------")print("请输入有效食物编号")print("-----------------")else:print('输入错误')self.buy()#返回上级菜单def return_way(self):R = input('按R键返回上一级菜单')if R == 'r':self.display()else:self.return_way()#存储一维清单列表至本地文件def save_data_1(self,self_list,list_name):file_handle = open(list_name+'.txt','w',encoding="utf-8")for item in self_list:file_handle.write(item)file_handle.write('\n')file_handle.close()#存储二维清单列表至本地文件def save_data_2(self,self_list,list_name):file_handle = open(list_name+'.txt','w',encoding="utf-8")#删除原文件数据再写入file_handle.truncate()for item in self_list:file_handle.write(str(item[0]))file_handle.write(' ')file_handle.write(str(item[1]))file_handle.write('\n')file_handle.close()#读取二维清单列表内容def read_data_2(self,self_list,list_name):rs = os.path.exists(list_name+'.txt')if rs == True:file_handle = open(list_name+'.txt',mode='r',encoding="utf-8")contents = file_handle.readlines()for msg in contents:#去除\nmsg = msg.strip('\n')#使用 空格分割存储成一维数组foodfood = msg.split(' ')food[1] = int(food[1])self_list.append(food)file_handle.close()#读取一维清单列表内容def read_data(self,self_list,list_name):rs = os.path.exists(list_name+'.txt')if rs == True:# 1,打开文件file_handle = open(list_name+'.txt',mode='r',encoding="utf-8")#2.读取所有行contents = file_handle.readlines()#3.取出每一个元素for msg in contents:msg = msg.strip('\n')self_list.append(msg)file_handle.close()#存储Money至本地文件def save_money(self,list_name):file_handle = open(list_name+'.txt','w',encoding="utf-8")file_handle.truncate()file_handle.write(str(self.Money))file_handle.close()#读取Moneydef read_money(self,list_name):rs = os.path.exists(list_name+'.txt')if rs == True:file_handle = open(list_name+'.txt',mode='r',encoding="utf-8")try:self.Money = int(file_handle.readline())except Exception as e:print("请检查文件中的数据是否正确,异常:"+ str(e) )finally:file_handle.close()#window系统执行入口
if __name__ == '__main__':shoppingSystem().init_file()shoppingSystem().MainShop()

3. 总结
   3.1 如果要对数据进行添删改查时注意不要使用元组,元组不能进行更改,这里要使用列表
   3.2 元组通常用于创建不可更改的数据,并告诉使用者这个数据不能更改
   3.3 通过引号隔开对可变参数进行字体颜色的修改 '\033[1;31;0m'+str(self.FoodName)+'\033[0m'
   3.4 在进行判断时用 == ,在进行赋值时用 =


"IE编程改善分析:敲代码是最快提升你编程能力的手段" ——————————by.PyDragon

【python_自动化运维教程作业】【day2】餐饮店自助点餐系统相关推荐

  1. 【Python自动化运维之路Day2】

    1. 常量命名规则 在Python中,会在变量命名上标明某变量是常量,通常采用全是大写的方式来标明,如: CONNECT= '127.0.0.1' PORT = '3306' 2.Python编译 p ...

  2. python linux运维教程 推荐_Linux 运维入门到跑路书单推荐

    一.基础入门 <鸟哥的Linux私房菜基础学习篇>:最具知名度的Linux入门书<鸟哥的Linux私房菜基础学习篇>,全面而详细地介绍了Linux操作系统.鸟哥的Linux私房 ...

  3. 一个颜值低但脾气超好的自动化运维实战入门教程

    注:本教程由廖高祥发布于实验楼,版权归原作者所有. 什么是自动化运维? 自动化运维是指将IT运维中日常的.大量的重复性工作自动化,把过去的手工执行转为自动化操作.自动化运维不单纯是一个维护过程,更是一 ...

  4. WebHook入门教程:快速实现自动化运维,如自动热部署、自动重启服务、自动备份数据库等等

    WebHook入门教程 当我们向Github仓库(其他支持webhook的Git仓库都可以)Push代码后,可以通过webhook向特定URL发起一次Post请求,本篇文章所说的WebHook,就是运 ...

  5. 云计算开发教程:Python自动化运维开发实战流程控制

    今天这篇文章是给大家分享一些云计算开发教程,今天讲解的是:Python自动化运维开发实战流程控制. Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. P ...

  6. DevOps实战 —— 如何高效地远程部署?自动化运维利器 Fabric 教程

    如何高效地远程部署?自动化运维利器 Fabric 教程 关于 Python 自动化的话题,在上一篇文章中,我介绍了 Invoke 库,它是 Fabric 的最重要组件之一.Fabric 也是一个被广泛 ...

  7. 自动化运维--封装win10系统教程

    自动化运维–封装win10系统教程 作者:蓝眼泪 1.拷贝封装资料到D盘 2.安装win10母盘,进入pe系统,选择桌面上的exi系统安装. 3.进入审核模式,按住ctrl+shift+f3. 4.启 ...

  8. MySQL数据库性能优化及自动化运维实践教程!DBA日常工作

    MySQL数据库性能优化及自动化运维实践教程!本文作者将站在更加全面的角度分享他在这一年多 DBA 工作中的经验,希望可以给大家带来启发和帮助. DBA 的日常工作 我觉得 DBA 真的很忙,我们来看 ...

  9. 云计算学习教程,Python自动化运维开发实战

    都忘记是什么时候知道python的了,我是搞linux运维的,早先只是知道搞运维必须会shell,要做一些运维自动化的工作,比如实现一些定时备份数据啊.批量执行某个操作啊.写写监控脚本什么的. 后来发 ...

最新文章

  1. 鼠标平滑滤波_38年依然保持旺盛创作力,罗技G Hero16K撑起无线游戏鼠标时代
  2. 年过35岁的程序员都去哪儿了
  3. Django学习笔记(5)---ForeignKey
  4. 解决数据库自增ID的问题
  5. mfc cedit 默认显示内容_拼多多评价不显示的几大原因,看完之后才知道是触碰了这几个环节...
  6. factors to consider about the publications
  7. 学习Python必须具备的五大技能!
  8. Js-parentNode、parentElement,childNodes、children 它们有什么区别呢?
  9. Tomcat启动报错整理
  10. redistemplate注入为null_Windows DLL 注入技术
  11. LeetCode 112路径总和-简单
  12. js 之for..in、表单及事件触发
  13. 小汤学编程之MySQL(一)——基本概念、使用前的准备和了解SQL
  14. 三个线程打印ABC10次,ABCABCABC....
  15. Python爬虫从入门到放弃(二十三)之 Scrapy的中间件Downloader Middleware实现User-Agent随机切换...
  16. 2019最新资料!共7T
  17. 美国节点服务器有什么优势,美国CN2服务器的概念与优势
  18. C盘没W ndows64,win10如何深度清理c盘
  19. WPF实现鼠标拖动框选功能
  20. 朱令被投毒案关键人物语料分析之孙维篇

热门文章

  1. JSP项目进度管理系统myeclipse开发sql数据库BS模式java编程网页结构
  2. 绿地签约十家酒店项目,轻资产输出步伐再提档
  3. storm java 例子_Storm 运行例子
  4. 三级指标 主成分分析_(完整版)主成分分析法的步骤和原理
  5. KVM管理虚拟机:常用命令
  6. 老人手机藏“吸费”陷阱
  7. mysql gtidpurged_7. MySQL复制全解析 Part 7 gtid_next和gtid_purged 系统变量解析
  8. 18938 汉诺塔问题
  9. Supervisor使用简介
  10. Unity3d实现阿拉伯语适配,不规则特殊字符的处理。