如何为每日输入生成独立列表?Python代码问题排查
问题:每日销售数据列表累加问题
需要为每天输入的销售数据生成独立列表,已编写input_sales_day、input_sales和print_sales三个函数,但运行后每日列表会累加之前的数据,无法得到预期的每日独立销售数据列表。
当前代码
p = [] def input_sales_day(nbp): for i in range(nbp): np = input("Product Name: ") qv = input("quantity sold : ") p.append('{} {}'.format(qv, np)) return p def input_sales(nbp, d): sl = [] for j in range(d): n = input_sales_day(nbp) sl.append('day {} : {}'.format(j+1, n)) return sl def print_sales(sl): return '\n'.join(sl) print(print_sales(input_sales(2, 3)))
实际输出
Product name: z1 quantity sold : 1 Product Name: z1 quantity sold : 1 Product name : z2 quantity sold : 2 Product Name: z2 quantity sold : 2 Product name : z3 quantity sold : 3 Product Name: z3 quantity sold: 3 Day 1 : ['1 z1', '1 z1'] Day 2 : ['1 z1', '1 z1', '2 z2', '2 z2'] Day 3: ['1 z1', '1 z1', '2 z2', '2 z2', '3 z3', '3 z3']
期望输出
Day 1: ['1 z1', '1 z1'] Day 2 : ['2 z2', '2 z2'] Day 3 : ['3 z3', '3 z3']
解决方案
问题根源在于全局变量p:每次调用input_sales_day时,都是往同一个全局列表p里追加数据,没有重置,导致后续天数的数据会累加之前的内容。
只需要把p的定义移到input_sales_day函数内部,让每次调用函数时都创建一个新的空列表,就能实现每日数据独立:
def input_sales_day(nbp): p = [] # 每次调用函数时创建新的空列表 for i in range(nbp): np = input("Product Name: ") qv = input("quantity sold : ") p.append('{} {}'.format(qv, np)) return p def input_sales(nbp, d): sl = [] for j in range(d): n = input_sales_day(nbp) sl.append('day {} : {}'.format(j+1, n)) return sl def print_sales(sl): return '\n'.join(sl) print(print_sales(input_sales(2, 3)))
修改后,每次调用input_sales_day都会生成一个全新的列表存储当日销售数据,不会和之前天数的数据混淆,运行结果就能符合期望输出。
内容的提问来源于stack exchange,提问作者Yao Min
相关产品推荐
相关产品推荐

