【列表的使用】用python完成购物打印商品列表


优点

  1. 能够符合题目的要求,充分运用所学到的知识。
  2. 可以判断输入是否为数字,和判断输入范围是否正确。若输入不符合要求,可以继续重复输入,直到输入正确才开始判断。
  3. 注释充分,能够让你轻松阅读与理解。

考虑的因素

1、 用户可能没有选择任何商品,直接退出。
2、 用户可能输入的信息不正确,要怎么处理。
3、 输入的信息有时是字母,有时是整型数,该怎么分别判断。
4、 用户选择商品可能不重复,可能重复。
5、 用户选择同一个商品两次及以上,比较好的是应该视为这个商品购买两件及以上。
6、 用户多次选择商品,中间输入信息时又出错了,该怎么处理。
7、 打印用户选择了的商品列表,应该考虑到多件相同商品的价格计算,及总额统计。
8、 打印购物车列表时,商品编号是商品标识,如同超市中商品的条形码一样,应该和原始产品的编号对应,而不应该重新排序。
9、 打印购物车列表具体商品时,如何固定长度输出,这个未解决,所以单价小的商品信息打印出来,格式有点乱。
10、购物车多件相同商品的去重打印。
11、购物车cart重复存入的商品,去重后,如何解决下标的问题,避免报错,无法打印后面的总额。这里试验了很久,解决了下标原始范围和列表去重后下标范围的问题。可能是删除指定元素后,列表中的这个元素被删除了,但原始长度还是在内存里,还是在原始的范围内取。希望能了解增删改查等在内存中的存储机制。


代码

# -*- coding= utf-8 -*-
# Author: Mr.chen
# @File : gouwu.py
# @Software: PyCharm

# -*- coding= utf-8 -*-
# Author: Mr.chen
# @Time : 2021/1/28 14:59
# @Author: 
# @User : asus
# @Site :
# @File : __init__.py.py
# @Software:

products = [["iphone", 6888], ["MacPro", 14800], ["小米6", 2499], ["Coffee", 31], ["Book", 60], ["Nike", 699]]  # 设置商品
print("------打印商品列表------")
print("编号\t商品名\t单价")    # 表头
for product in range(len(products)):
    print(product, end="\t")
    for money in range(len(products[product])):
        print(products[product][money], end="\t")
    print(end="\n")
print(end="\n")                       # 排版:空一行
cart = []                             # 空购物车,待存放用户选择的商品
bianhao = []                          # 空编号列表,待存放用户输入的商品编号
print("提示:\n    加商品入购物车:请输入对应的商品编号\n    选择完毕退出:请输入字母q")
print("-"*35)                         # 排版:一条虚线
print(end="\n")                       # 排版:空一行

print("请问您想买什么?")                   # 询问语
number = input("请输入您购买的商品编号:")   # 提示输入的信息
if number not in ["q", "0", "1", "2", "3", "4", "5"]:    # 判断用户输入的内容是否符合要求
    print("您输入的信息不符合规范,请重新输入!")   # 不符合输入要求时给用户的提示语。
elif number == "q":                     # 判断用户是否直接选择退出:即不购买
    print(end="\n")                      # 排版:空一行
    print("您选择了0个商品加入购物车。") # 提示用户的选择结果
else:                                      # 如果用户有选择加入购物车的商品
    usernumber = int(number)  # input输入得到的数据都是字符串性,强制转型为整型。
    while 0 <= usernumber <= 5:
        bianhao.append(usernumber)  # 将用户输入的商品编号放入bianhao列表中。
        number = input("继续输入商品编号或退出:") # 提示用户继续选择商品还是退出。
        if number not in ["q", "0", "1", "2", "3", "4", "5"]:  # 判断用户输入的内容是否符合要求
            print("您输入的信息不符合规范,请重新输入!")
        elif number == "q":                        # 用户选择退出,
            break                                     # 则跳出整个输入循环语句块。
        else:
            usernumber = int(number)    # 用户继续选择商品,则重复while循环,存储用户输入的数据及判断用户行为。

print(end="\n")                       # 排版:空一行
total = 0                              # 定义购物车商品总价格:起始值为0
bianhao.sort()                      # 对用户输入的商品编号升序排序。
for a in bianhao:                     # 逐个获取bianhao列表中的元素,赋值给变量a。
    cart.append(products[a])    # 把用户输入的商品编号对应的商品存入购物车cart列表中

print("-----打印购买的商品列表-----")    # 打印提示内容:用户加入购物车的商品列表
print("编号\t商品名\t单价\t数量\t合计")    # 表头
for i in range(len(cart)):
    if i == len(cart):      # 列表的长度永远比列表最后一个元素的下标大 1. 数字相等时,说明超出了列表范围,不存在这个元素。可能是当有重复商品时,下面去重了,但 i 的范围还是在内存里,
        break               # 这个检测去重后,在列表bianhao中,以 i 为下标的元素是否存在,是否超出了列表下标范围,超出说明全部完成,跳出整个循环,以勉报错。
    print(bianhao[i], end="\t")             # 打印:商品编号
    shuliang = cart.count(cart[i])         # 同一件商品的件数是多少
    heji = cart[i][-1] * shuliang          # 同一件商品的合计价格:单价 * 数量
    total += heji                             # 总计:全部商品价格的总和。
    print(cart[i][0], end="\t")      # 打印嵌套列表的元素:商品名 单价
    if int(cart[i][1]) > 10000:      # 格式化输出
        print(cart[i][1], end=" ")
    elif int(cart[i][1]) > 1000:
        print(cart[i][1], end="  ")
    elif int(cart[i][1]) > 100:
        print(cart[i][1], end="   ")
    elif int(cart[i][1]) > 10:
        print(cart[i][1], end="    ")
    else:
        print(cart[i][1], end="     ")
    print(shuliang, end="\t")              # 打印:数量
    print(heji, end="\n")                   # 打印:合计
    while shuliang != 1:                    # 循环去掉重复的商品,直至只剩 1 件
        del cart[i]
        del bianhao[i]
        shuliang = cart.count(cart[i])

print(end="\n")                              # 排版:空一行
print("总计:%d元。" % total)               # 打印:总价格

输入方案举例

1、 q 不购买直接退出

2、 4、2、q 多个选择后退出

3、 k 一开始就输入错误

4、 52 一开始就输入错误

5、 1、a、2、2、q 同件商品购买多件,及中途输入错误


课程连接

Python列表学习视频


  • 如果可以的话,希望能为我的帖子点个赞,谢谢
评论 1 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

陈老大 NO.1

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值