Oldboy Day3 HW by 徐杰炀

#作业一:for循环嵌套
https://www.cnblogs.com/linhaifeng/articles/7133167.html#_label14


打印99乘法表
for i in range(1, 10):
    for j in range(1, i+1):
        print("{}*{}={}\t".format(j, i, i*j), end='')
    print()


打印金字塔
size = 10
for i in range(size):
    num = 2*i + 1
    text = '*'*num
    print(text.center(size*2, ' '))

 


#作业二: 三级菜单
#要求:
打印省、市、县三级菜单
可返回上一级
可随时退出程序
menu = {
    '北京':{
        '海淀':{
            '五道口':{
                'soho':{},
                '网易':{},
                'google':{}
            },
            '中关村':{
                '爱奇艺':{},
                '汽车之家':{},
                'youku':{},
            },
            '上地':{
                '百度':{},
            },
        },
        '昌平':{
            '沙河':{
                '老男孩':{},
                '北航':{},
            },
            '天通苑':{},
            '回龙观':{},
        },
        '朝阳':{},
        '东城':{},
    },
    '上海':{
        '闵行':{
            "人民广场":{
                '炸鸡店':{}
            }
        },
        '闸北':{
            '火车战':{
                '携程':{}
            }
        },
        '浦东':{},
    },
    '山东':{},
}


ended = False
while not ended:
    province_list = []
    for i, province in enumerate(menu, 1):
        province_list.append(province)
        print(i, province)
    print('q 退出')
    ans1 = input('在以上选项中选择省份,请输入相应的编码>>>:')
    if ans1.isdigit():
        ans1 = int(ans1)
        if ans1 > len(province_list) or ans1 < 1:
            print('输入超过选项数目,请重新输入')
        else:
            level2_menu = menu.get(province_list[ans1-1])
            if level2_menu:
                while not ended:
                    district_list = []
                    for i, district in enumerate(level2_menu, 1):
                        district_list.append(district)
                        print(i, district)
                    print('b 返回上一级')
                    print('q 退出')
                    ans2 = input('在以上选项中选择区,请输入相应的编码>>>:')
                    if ans2.isdigit():
                        ans2 = int(ans2)
                        if ans2 > len(district_list) or ans2 < 1:
                            print('输入超过选项数目,请重新输入')
                        else:
                            level3_menu = level2_menu.get(district_list[ans2-1])
                            if level3_menu:
                                while not ended:
                                    area_list = []
                                    for i, area in enumerate(level3_menu, 1):
                                        area_list.append(area)
                                        print(i, area)
                                    print('b 返回上一级')
                                    print('q 退出')
                                    ans3 = input('在以上选项中选择区域,请输入相应的编码>>>:')
                                    if ans3.isdigit():
                                        ans3 = int(ans3)
                                        if ans3 > len(area_list) or ans3 < 1:
                                            print('输入超过选项数目,请重新输入')
                                        else:
                                            level4_menu = level3_menu.get(area_list[ans3 - 1])
                                            if level4_menu:
                                                for i, building in enumerate(level4_menu, 1):
                                                    print(i, building)
                                            print('已到菜单底部'.center(20, '-'))
                                            print('b 返回上一级')
                                            print('q 退出')
                                            while True:
                                                f_answer = input(':>>>')
                                                if f_answer == 'q' or f_answer == 'b':
                                                    break
                                                print('请输入正确的选项,q/b')
                                            if f_answer == 'q':
                                                ended = True
                                                print('菜单退出')
                                            elif f_answer == 'b':
                                                continue

                                    elif ans3 == 'q':
                                        ended = True
                                        print('菜单退出')

                                    elif ans3 == 'b':
                                        break

                                    else:
                                        print('请输入正确编码')
                            else:
                                print('已到菜单底部'.center(20, '-'))
                                print('b 返回上一级')
                                print('q 退出')
                                while True:
                                    f_answer = input(':>>>')
                                    if f_answer == 'q' or f_answer == 'b':
                                        break
                                    print('请输入正确的选项,q/b')
                                if f_answer == 'q':
                                    ended = True
                                    print('菜单退出')
                                elif f_answer == 'b':
                                    continue

                    elif ans2 == 'q':
                        ended = True
                        print('菜单退出')

                    elif ans2 == 'b':
                        break

                    else:
                        print('请输入正确编码')
            else:
                print('已到菜单底部'.center(20, '-'))
                print('b 返回上一级')
                print('q 退出')
                while True:
                    f_answer = input(':>>>')
                    if f_answer == 'q' or f_answer == 'b':
                        break
                    print('请输入正确的选项,q/b')
                if f_answer == 'q':
                    ended = True
                    print('菜单退出')
                elif f_answer == 'b':
                    continue

    elif ans1 == 'q':
        ended = True
        print('菜单退出')

    else:
        print('请输入正确编码')

emmm。。很繁琐,重复代码很多

用递归函数可以很有效得缩减代码长度,也更简单直接。还没学到,所以暂时不改进了



#作业三:请闭眼写出购物车程序
#需求:
用户名和密码存放于文件中,格式为:egon|egon123
启动程序后,先登录,登录成功则让用户输入工资,然后打印商品列表,失败则重新登录,超过三次则退出程序
允许用户根据商品编号购买商品
用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
可随时退出,退出时,打印已购买商品和余额
import os


# 设置文件路径
BASE_PATH = os.path.dirname(__file__)


# 商品预设
items_list = [
    {'product_name': '第一个商品', 'price': 100},
    {'product_name': '第二个商品', 'price': 200},
    {'product_name': '第三个商品', 'price': 500},
    {'product_name': '第四个商品', 'price': 700},
    {'product_name': '第五个商品', 'price': 1000},
    {'product_name': '第六个商品', 'price': 5000},
]

# 读取账号数据
with open(os.path.join(BASE_PATH, 'account.txt'), 'r') as f:
    accounts = f.readlines()

account_list = []
for account in accounts:
    account_comb = account.split('|')
    account_dict = {'user_name': account_comb[0], 'pwd': account_comb[1].strip('\n')}
    account_list.append(account_dict)


# 程序主体逻辑入口
failure_time = 0
ended = False
while failure_time < 4 and not ended:

    user_name = input('请输入登录用户名:>>>')
    pwd = input('请输入密码:>>>')
    login_dict = {'user_name': user_name, 'pwd': pwd}

    if login_dict in account_list:
        print('登陆成功')

        # 登录后操作
        while True:
            salary = input('请输入工资总额:>>>')
            if salary.isdigit():
                salary = int(salary)
                break
            else:
                print('输入错误,请输入正确工资数目')

        print('工资总额为{}'.format(salary))
        item_bought = []

        while not ended:
            for index, item in enumerate(items_list, 1):
                print('{}\t{}\t价格: {}元'.format(index, item.get('product_name'), item.get('price')))
                item['func_id'] = index
            print('按q退出')

            choice1 = ''
            while not ended:
                choice1 = input('请输入商品编码购买:>>>')
                if choice1.isdigit():
                    choice1 = int(choice1)
                    if not (0 < choice1 <= len(items_list)):
                        print('输入错误,请重新输入有效编码')
                    else:
                        break
                elif choice1 == 'q':
                    ended = True
                else:
                    print('输入错误,请重新输入有效编码')
            for item in items_list:
                if item.get('func_id') == choice1:
                    item_price = item.get('price')
                    if salary >= item_price:
                        salary = salary - item_price
                        item_bought.append(item.get('product_name'))
                        print('<{}>已购买成功,花费{}元,工资还剩{}元'.format(item.get('product_name'), item_price, salary))
                    else:
                        print('工资不够,{}没有购买成功'.format(item.get('product_name')))

        else:
            print('已购买物品: ', end='')
            if item_bought:
                for item in item_bought:
                    print('{}, '.format(item), end='')
                print()
                print('工资还剩{}元'.format(salary))
                print('谢谢惠顾')
            else:
                print('没有购买任何东西,谢谢惠顾')

    else:
        failure_time += 1
        print('登录失败,请重试')
        if failure_time > 3:
            print('失败超过三次,退出')

 

posted @ 2020-07-31 03:10  cutomorrow  阅读(145)  评论(0)    收藏  举报