第二章练习题

时间:2023-02-24 00:13:14

                                            第二章练习题

第二章练习题

 

  • 购物车程序

 1 #功能要求:
 2 #启动程序后,让用户输入工资,然后打印商品列表
 3 #允许用户根据商品编号购买商品
 4 #用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
 5 #用户可一直购买商品,可随时退出,退出时,打印已购买商品和余额
 6 
 7 products = [
 8     {"name":'Iphone',"price":6888},
 9     {"name":'MacPro',"price":14800},
10     {"name":'小米',"price":2499},
11     {"name":'Coffee',"price":31},
12     {"name":'Book',"price":80},
13     {"name":'NikeShoes',"price":799}
14 ]
15 wages = int(input('请输入您的工资:'))
16 shopping_car = []           # 创建购物车
17 exit_flag = False          # 标志位,控制while循环
18 while not exit_flag:
19     print('--------商品列表--------')
20     for index, i in enumerate(products):
21         print(index, i)              #打印商品列表
22     choice = (input('请输入您要购买的商品编号:'))
23     if choice.isdigit():             #isdigit   用来判断像不像阿拉伯(整数)
24         choice = int(choice)         # str转换为int
25         if 0 <= choice < len(products):           # 判断输入的数字是否超过列表的长度
26             if wages >= products[choice].get('price'):       # products[choice]表示输入的编码在列表中对应的值
27                 wages -= products[choice].get('price')
28                 print('您的余额为:', wages)
29                 shopping_car.append(products[choice])          # 将选择的商品加入购物车
30                 print("已将您要购买的商品:%s 添加进购物车" % (products[choice]))
31             else:
32                 print('您的余额不足!')
33         else:
34             print('您要购买的商品不存在!')
35     elif choice == "q":
36         print('-----您已购买的商品-----')
37         for index, k in enumerate(shopping_car):
38             print(index, k)
39         print('账户余额为:', wages)
40         exit_flag = True              #停止循环

 

  • 三级菜单

      1 #功能要求(列表、菜单):
      2 #现有省、市、县三级结构,要求程序启动后,允许用户可依次选择进入各子菜单
      3 #可从任意一级菜单往回上一级
      4 #可从任意一级菜单退出程序
      5 menu = {
      6     '河北省':{
      7         '石家庄市':{
      8             '元氏县':{
      9                 '苏阳乡':{ },
     10                 '赵同乡':{ }
     11             },
     12             '赞皇县':{
     13                 '南清河乡': { },
     14                 '西阳泽乡': { }
     15             }
     16         },
     17         '衡水市': {
     18             '饶阳县':{
     19                 '留楚乡': { },
     20                 '五公镇': { }
     21             },
     22             '阜城县':{
     23                 '建桥乡': { },
     24                 '古城镇': { }
     25             }
     26        }
     27     },
     28     '山西省': {
     29         '太原市': {
     30              '清徐县': {
     31                  '留楚乡': { },
     32                  '五公镇': { }
     33              },
     34              '晋源区': {
     35                  '晋阳湖': { },
     36                  '晋阳古城': { }
     37              }
     38             },
     39         '大同市': {
     40              '大同县': {
     41                  '周士庄': { },
     42                  '吉家庄': { }
     43              },
     44              '左云县': {
     45                  '保安堡': { }
     46              }
     47          }
     48     }
     49 }
     50 stay_flag = False          # 标志位,控制while循环    当用户输入某个字符时停留在本级菜单上
     51 return_flag = False          # 标志位,控制while循环    当用户输入某个字符时返回上一级菜单上
     52 flag_list = ['s','r']
     53 while not return_flag:
     54     print("您可以选择的省份:")
     55     print("*******************************")
     56     for k in menu:
     57         print(k)
     58     print("*******************************")
     59     choicename = input("请输入您所在的省份(s跳出程序;r返回上一级菜单):").strip()  #strip 去掉多余的空格、换行、Tab键
     60     print("*******************************")
     61 
     62     if choicename in menu:
     63         while not stay_flag and not return_flag:
     64             for k1 in menu[choicename]:
     65                 print(k1)
     66             print("*******************************")
     67             choicename1 = input("请输入您所在的市区(s跳出程序;b返回上一级菜单):").strip()
     68             print("*******************************")
     69             if choicename1 == 's':  # 当输入的是s时,跳出程序
     70                 exit()
     71             elif choicename1 == 'r':  # 当输入r时,将return_flag标志置为True,本循环层不开始,返回上一层
     72                 return_flag = True
     73 
     74             if choicename1 in menu[choicename]:
     75                 while not stay_flag and not return_flag:
     76                     for k2 in menu[choicename][choicename1]:
     77                         print(k2)
     78                     print("*******************************")
     79                     choicename2 = input("请输入您所在的县(s跳出程序;r返回上一级菜单):").strip()
     80                     print("*******************************")
     81                     if choicename2 == 's':
     82                         exit()
     83                     elif choicename2 == 'r':
     84                         return_flag = True
     85 
     86                     if choicename2 in menu[choicename][choicename1]:
     87                         while not stay_flag and not return_flag:
     88                             for k3 in menu[choicename][choicename1][choicename2]:
     89                                 print(k3)
     90                             print("*******************************")
     91                             choicename3 = input("请输入s或r(s跳出程序;r返回上一级菜单):").strip()
     92                             print("*******************************")
     93                             if choicename3 == 's':
     94                                 exit()
     95                             elif choicename3 == 'r':
     96                                 return_flag = True
     97                             else:
     98                                 print("这是最后一级")
     99                         else:                               # 给return_flag标志位重新赋值为False,确保第三级菜单可以正常循环
    100                             return_flag = False
    101                     elif choicename2 in flag_list:          # 避免输入s或b,程序停在当前菜单层或返回上级菜单层时提示错误,请重新输入。
    102                         pass
    103                     else:
    104                         print("县名输入错误,请重新输入")
    105 
    106                 else:                                       #给return_flag标志位重新赋值为False,确保第二级菜单可以正常循环
    107                     return_flag = False
    108             elif choicename1 in flag_list:
    109                 pass
    110             else:
    111                 print("市名输入错误,请重新输入")
    112 
    113         else:                                                # 给return_flag标志位重新赋值为False,确保第一级菜单可以正常循环
    114             return_flag = False
    115     elif choicename in flag_list:
    116         pass
    117     else:
    118         print("省名输入错误,请重新输入!")

     

  • 三级菜单(简化版)

     1 menu = {
     2     '河北省':{
     3         '石家庄市':{
     4             '元氏县':{
     5                 '苏阳乡':{ },
     6                 '赵同乡':{ }
     7             },
     8             '赞皇县':{
     9                 '南清河乡': { },
    10                 '西阳泽乡': { }
    11             }
    12         },
    13         '衡水市': {
    14             '饶阳县':{
    15                 '留楚乡': { },
    16                 '五公镇': { }
    17             },
    18             '阜城县':{
    19                 '建桥乡': { },
    20                 '古城镇': { }
    21             }
    22        }
    23     },
    24     '山西省': {
    25         '太原市': {
    26              '清徐县': {
    27                  '留楚乡': { },
    28                  '五公镇': { }
    29              },
    30              '晋源区': {
    31                  '晋阳湖': { },
    32                  '晋阳古城': { }
    33              }
    34             },
    35         '大同市': {
    36              '大同县': {
    37                  '周士庄': { },
    38                  '吉家庄': { }
    39              },
    40              '左云县': {
    41                  '保安堡': { }
    42              }
    43          }
    44     }
    45 }
    46 current_layer,layers = (menu,[])
    47 while True:
    48     for keys in current_layer:print(keys)         #合成一层展示
    49     choice = input(">>>:").strip()               #strip  去除多余字符
    50     if not choice:continue
    51     if choice in current_layer:
    52         layers.append(current_layer);current_layer = current_layer[choice]
    53     elif choice == 'r': #r代表返回上一级菜单;
    54         if len(layers) != 0:
    55             current_layer = layers.pop()
    56         else:
    57             print("回到第一层")
    58     elif choice == 's':#s代表退出程序
    59         exit("退出程序")