day 03 函数、文件读写操作
第三周,先讲文件,前一天晚上晚睡。。早上感觉没咋听。下午函数,第一次接触,听着还行。这周的作业做得很应付,我印象中,这周不忙。但莫名其妙,练习题不会,没跟上。作业题也没啥思路,一直到周五讲直播,周六中午还在补课。噢,想起来了,周六生日,周五出去看电影,西红柿首富。周六中午和花乡的小伙伴吃饭,晚上去找崔朝。
主要是函数刚学,好多都不熟,看直播,很慌,勉强写了个大概。
#while里面有for,continue/break不太会用 def start(): print('''-------- 1.登录 2.注册 3.购物 4.退出''') l = [1,2,3,4] while 1: choice = int(input('请选择:')) if choice in l: return choice else: print('请重新输入1-4之间的一个数') def register(): dic = {} print('---注册您的账户---') account = input('设置用户名:').strip() f = open('账户密码记录.txt',encoding='utf-8') content = f.readlines() for i in content: if account == i.split()[0]: print('用户名已被注册,请使用其它用户名') continue key = input('请设置密码:').strip() f = open('账户密码记录.txt','a',encoding='utf-8') f.write('\n%s %s'%(account,key)) def login(): count = 3 while count > 0: print('请登录系统') name = input('输入您的用户名:').strip() password = input('输入您的密码:').strip() f = open('账户密码记录.txt',encoding='utf-8') content = f.readlines() for i in content: if (name == i.split()[0]) and (password == i.split()[1]): print('%s登录成功'%name) break else: count -= 1 print('用户名或密码输入有误,请重新输入\n' '您还有%s次机会'%count) continue def shop(): goods = [['电脑', 1999], ['鼠标', 50], ['键盘', 200], ['路由器', 98]] # 商品列表 account = int(input('请先给您的账户充值:').strip()) # 提示充值 shopping_list = [] #购物清单 print('-------商品列表如下-------') for i in goods: print(goods.index(i) + 1, i[0], i[1]) # 打印商品列表 while 1: choice = input('输入商品序号:\n').strip() if choice.isdigit(): # 判断输入的是否为数字 choice = int(choice) if 0 < choice <= len(goods): # 避免数字超过列表长度 print(goods[choice - 1]) shopping_list.append(goods[choice - 1]) # 加入购物车 print('已加购 ') else: print('序号输入有误,请重新输入') elif choice == 'n': print('结算,购物车如下:') print('商品', ' 数量 ', ' 单价') # 打印购物车 price = 0 for i in goods: if i in shopping_list: amount = shopping_list.count(i) print(i[0], ' * ', amount, ' ,', i[1]) # 统计同类商品个数 s = i[1] * amount price = price + s # 计算总价 print('总金额:', price) while account < price: print('余额不足,请删除部分商品!') print(shopping_list) n = int(input('输入要删除的商品在清单中的序号:').strip()) shopping_list.pop(n - 1) print(shopping_list) price = 0 for i in shopping_list: price += i[1] print(price) print('可以购买\n', shopping_list) print('此次共消费:', price) print('账户余额:', account - price) break elif choice.upper() == 'Q': if len(shopping_list) > 0: print('已支付,您的购物清单如下:') print('商品', ' 数量 ', ' 单价') price = 0 for i in goods: if i in shopping_list: amount = shopping_list.count(i) print(i[0], ' * ', amount, ' ,', i[1]) # 统计同类商品个数 s = i[1] * amount price = price + s # 计算总价 print('此次共消费:', price) print('账户余额:', account - price) break else: print('您本次未购买商品') break start() #shop()
先上代码,其实过了一周,对于购物车的逻辑还是不太清楚。我觉得是题目说的不太清,n结算和q退出,很智障。然后再说细节,老师的评语
只有一件商品的时候,会出现这个问题。其实这是上周的,这周直接拿来用了,这周的问题在于不会函数交互。其实当时再多看一会,可能就会了,还是时间花少了。最后练习题也是抄的,哎,很失败了。周六晚睡,一步错步步错。
后来知道了如何交互,弄一个列表,存上函数名。
def start(): l = ['登录','注册','购物','退出'] operation = {1:login,2:register,3:shop,4:quit} for i,j in enumerate(l,1): print(i,j); while 1: choice = int(input('请选择:')) if choice in operation.keys(): return operation[choice]() else: print('请重新输入1-4之间的一个数')
2018.10.21补充回头看的时候,发现还是有一些值得总结的。
首先是最基础的打印
,我发现我都忘了,首先是一个列表l,然后用到enumerate,这样就能做到打印出来的效果。再来是交互,这里很妙,通过设计字典,键就是对应的列表数字1,2,3,4;值是函数名(不加括号,这里有坑)。然后在用户选择的时候,通过return 字典[键](),对应到相应的功能。由于值是函数名,加括号就直接调用。
坑 :首先字典里面的值是函数名,不加括号;然后return 的后面加。当时不理解,试了一下,在函数名后面加括号,return那里不加。结果上来还没输入数字,就直接让我登录,才明白:字典里面加了括号就调用,上来就执行。由于位置先后的原因,先执行登录函数,所以只能是这个顺序。
这是最早学的交互,很好用,在下周的博客园作业里,也比较熟练得用到了。总结一下,先是用列表存汉字的功能,以便给用户显示;然后用字典存 数字和函数名,以便调用。
然后这里还有一个小点,是自己想到的,用了 字典.keys() 的方法,我觉得这个还挺好的,哈哈。
后面在面向对象,还有一个交互,到时候在那里写两者的区别。
后记:这周去上课,被老师苦口婆心教导,确实。然后想最近一直学前端,有必要练下python,开始找题。现在看来,最好的练手就是看以前的作业。好多当时挺熟练的,现在完全忘了改怎么弄,比如今天的enumerate。嗯,慢慢来吧。

浙公网安备 33010602011771号