展示解决问题的过程

在这些笔记中,我将演示我用来解决问题的过程,包括概述我的工作和构造函数来帮助分解问题。

我们要解决的这道题的难度与期中考试的第三道题相当。由于这个问题给很多学生带来了麻烦,我想让你们了解一下我解决这类问题的过程会很有用。

这个问题

这个问题主要围绕一个包含连锁商店销售数据的文本文件。数据文件中的每一行都采用这种形式

<商店编号> <一周总销售额>

文件中的销售数据涵盖多个星期和多个商店。数据出现的顺序没有特别的顺序。

我们想要解决的问题是计算数据集中每个商店的平均销售额,然后找到并报告哪些商店的平均日销售额最高。

概述解决方案

解决问题的第一步是勾勒出解决问题所需的主要步骤。我以一组评论的形式写这个提纲。然后,这些注释也将作为程序主要部分的标题。

这是我最初写的一组评论。

#从文本文件中读取数据#构造数据文件中出现的不同商店编号的列表#计算赢博体育商店的平均销售额,然后确定哪个最好#打印结果

读取数据

在本课程中,我们已经看到了许多从文本文件中读取数据并将数据组织到适当列表中的程序示例。由于到目前为止,这个过程对每个人来说都应该是相当常规的,因此每个人都应该能够快速编写代码来完成此操作。在读取数据时,您需要做的另一件事是在注释中记录如何将读取的数据组织到列表中。

#从文本文件中读取数据#将文件中的数据组织成一个列表:# list中的每个项将是一个元组。每个元组中的第一项将是商店编号,第二项将记录一周的销售额。Data = [] f = open('sales.txt','r') for line in f.r elines (): parts = line.split() Data .append((int(parts[0]),float(parts[1])) f.r eclose ()

获取商店编号列表

上面大纲中的第二步是从原始数据集中提取不同存储编号的列表。这是一个非常复杂的任务,我们需要构造一个函数来帮助我们完成这个特定的子任务。

我要做的第一件事是在程序的主要部分编写一些代码,这些代码只是调用我们的函数来完成工作。

#创建一个数据文件中不同的存储号列表。

然后我就开始构造我们想要的函数。在构造函数时,我做的一件事是为函数配备一个doc字符串,该字符串记录了函数要做的事情。

def distinct_stores(data): ““”构造并返回数据列表中出现的不同存储编号的列表。”result = [] for store, sales in data: #该商店是否出现在我们的商店列表中?如果包含(store,result) == False: #如果不包含,则将此store添加到结果列表result.append(store)返回结果

在为这个函数编写代码的过程中,我遇到了一个需要解决另一个子问题的步骤:给定一个商店编号和我已经收集的商店编号列表,我能否判断新的商店编号是否已经出现在列表中?

解决这个问题的一种方法是构造另一个辅助函数来帮助我解决这个子问题。下面是我为此目的编写的函数。

def contains(item,my_list): ““”这个项目是否出现在my_list中?”“”对于my_list中的thing:如果item == thing:返回True返回False

另一种可能的方法是在Python语言中寻找一个内置特性来帮助我们确定某个数字是否已经出现在列表中。事实证明有这样一个语言特性,in操作符。

对于商店,数据中的销售额:#该商店是否出现在我们的商店列表中?如果store不在result中:#如果不在result中,将这个store添加到结果列表中。

计算平均销售额,寻找最好的

问题的最后一部分涉及计算商店列表中每个商店的平均销售额,然后找到销售额最高的商店。

搜索项目列表以找到“最佳”项目是我们在本课程中多次执行的任务。每个人都应该能够勾勒出一个循环来进行这样的搜索。

这是我写的代码来做搜索:

#计算赢博体育商店的平均销售额,然后确定哪个是最好的best_sales = 0 best_store = -1对于商店中的商店:如果average_sales > best_sales: best_sales = average_sales best_store = store (store,data

注意,这段代码要求我解决一个子问题:给定一个商店编号,我能否计算该商店的平均销售额?同样,我使用的方法是将此子问题分解为辅助函数的工作。这是完成这个计算的函数的代码。

def sales(store,data): ““”计算并返回商店编号由store参数给出的商店的平均销售额。”“” sum = 0 count = 0 for store_number, sales in data:如果store_number == store: sum += sales count += 1返回sum/count

计算平均值也是我们在这门课上做过几次的。我们知道,计算平均值需要将一组值相加,并记录相加的项数。

最后的结果

下面是完成程序的代码。

def contains(item,my_list): ““”这个项目是否出现在my_list中?”“”对于my_list中的thing: if item == thing:返回True返回False def distinct_stores(data): ““”构造并返回数据列表中出现的不同存储编号的列表。”result = [] for store, sales in data: #该商店是否出现在我们的商店列表中?如果不包含(store,result) == False: #如果不包含,则将此store追加到结果列表result.append(store)返回结果def sales(store,data): ““”计算并返回store参数给出的store编号的商店的平均销售额。”“” sum = 0 count = 0 for store_number, sales in data:如果store_number == store: sum += sales count += 1返回sum/count #从文本文件中读取数据#将文件中的数据组织成一个列表:列表中的每个项目将是一个元组。每个元组中的第一项将是商店编号,第二项将记录一周的销售额。data = [] f = open('sales.txt','r') for line in f.r edlines (): parts = line.split() data.append((int(parts[0]),float(parts[1]))) f.r close() #构造一个数据文件中出现的不同商店编号的列表stores = distinct_stores(data) #计算赢博体育商店的平均销售额,然后确定哪个是最好的best_sales = 0 best_store = -1对于商店中的商店:average_sales = sales(store,data)如果average_sales > best_sales:best_sales = average_sales best_store = store#打印结果Print(“最好的商店是商店号”,best_store) Print(“它的平均销售额”,best_sales)