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。嗯,慢慢来吧。

 

posted @ 2018-08-29 16:00  CP喜欢晒太阳  阅读(108)  评论(0)    收藏  举报