Python代码函数封装、输入验证及产品价格并排展示求助
改进后的Python产品订单处理代码
以下是满足需求的完整代码,包含功能封装、输入验证、并排展示等优化:
def process_product_order(): products = [] prices = [] # 录入5次有效产品信息 for _ in range(5): # 产品名称非空验证 while True: product_name = input("请输入产品名称:") if product_name.strip(): break print("产品名称不能为空,请重新输入!") # 产品价格有效验证(正整数) while True: try: product_price = int(input("请输入产品价格:")) if product_price > 0: break print("价格必须是正整数,请重新输入!") except ValueError: print("输入的不是有效数字,请重新输入!") products.append(product_name) prices.append(product_price) # 冒泡排序:价格从高到低,同步调整产品顺序 swapped = True while swapped: swapped = False for x in range(1, len(prices)): if prices[x] > prices[x-1]: # 交换价格 prices[x-1], prices[x] = prices[x], prices[x-1] # 同步交换对应产品 products[x-1], products[x] = products[x], products[x-1] swapped = True # 并排展示排序后的产品与价格 print("\n排序后的产品列表(价格从高到低):") print(f"{'产品名称':<15} {'价格(£)':>10}") print("-" * 25) for name, price in zip(products, prices): print(f"{name:<15} {price:>10}") # 计算总价(最便宜的第5个产品免费) total_price = sum(prices) - prices[4] print(f"\n订单总价为 £{total_price}(第5个产品免费)") # 执行函数 process_product_order()
关键改进说明
- 功能封装:将所有逻辑封装到
process_product_order()函数中,代码结构更清晰,可直接调用复用 - 空输入验证:
- 产品名称:通过
strip()判断是否为空,循环直到输入有效名称 - 产品价格:结合
try-except处理非数字输入,同时验证价格为正整数,确保输入有效性
- 产品名称:通过
- 并排展示:使用格式化字符串
f"{name:<15} {price:>10}"实现左对齐产品名称、右对齐价格,搭配分隔线提升可读性 - 排序逻辑优化:保持原冒泡排序逻辑,确保价格与产品名称始终同步交换,避免对应关系错乱
- 总价计算优化:直接用总和减去第5个产品价格,避免修改原价格数组,逻辑更清晰
内容的提问来源于stack exchange,提问作者DonVeritas
相关产品推荐
相关产品推荐

