函数和列表-如何使用函数关联两个列表?

时间:2019-11-16 00:22:53

标签: python list function

这是我第一次在这里提问,我是编程新手,所以要保持谦虚。我正在尝试创建一个代码,在该代码中,用户输入一周中每一天的销售额,并且这些功能显示每天的销售额并显示最高销售额/平均销售额/行为的一天。

预期结果将类似于:

Mondays sales: $200
Tuesdays sales: $100
Wednesday sales: $50
Thursday sales: $75
Friday sales: $100
Saturday sales: $250
Sunday sales: $75
Highest sales achieved on Saturday with $250

但是,现在每个结果打印了7次,我不知道如何在相关日期引用最大值

这是我到目前为止所拥有的:

days_week=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]

def fillList(salesList):
    for index in range(len(days_week)):
        user_input=int(input("Enter sales for "+ days_week[index]+": " ))
        salesList.append(user_input)


def showSales(salesList):
    for sales in salesList:
        for index in range(len(days_week)):
                print(days_week[index],"sales: $", sales)

def highestSales(salesList):
    print("Highest sales of the week was achieved on",max(salesList))



def main():
    salesList=[]
    fillList(salesList)
    showSales(salesList)
    highestSales(salesList)

main()

做出建议的更改后,该程序现在可以“运行”,并按预期显示当天的销售额。

days_week=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]

def fillList(salesList):
    for day in days_week:
        user_input=int(input("Enter sales for "+ day+": " ))
        salesList.append(user_input)

def showSales(salesList):
    for num in range(len(days_week)):
        print(days_week[num],"sales: $", salesList[num])

def highestSales(salesList):
    print("Highest sales of the week was achieved on",max(salesList))

def main():
    salesList=[]
    fillList(salesList)
    showSales(salesList)
    highestSales(salesList)

main()    

但是,我试图显示销售最多的日期。是否可以将两个列表一起添加?还是有一种简单的方式来显示用户输入最多的日期?

3 个答案:

答案 0 :(得分:0)

您的showSales(saleslist)中有一个for循环。我认为您只有内部的for循环才能获取days_week所需的索引。

最简单的解决方法是在for循环中使用计数器,例如:

def showSales(salesList):
    i = 0;
    for sales in salesList:
        print(days_week[i],"sales: $", sales)
        i += 1

Python对此用例enumerate也有一个内置函数。枚举返回计数器和迭代器,如下所示:

def showSales(salesList):
    for i , sales in enumerate(salesList):
        print(days_week[i],"sales: $", sales)

尽管第一种方法在所有语言中都是通用的,并且在学习时会更加清晰-所以我建议明确使用计数器。

答案 1 :(得分:0)

请仔细考虑循环的作用。根据您的代码,第一个列表中的每个项目都会被迭代7次以上,然后Python移至下一个项目并重复7次,因此您将每个结果打印7次。

对于功能showSales,请尝试以下操作:

def showSales(salesList):
    for num in range(len(days_week)):
        print(days_week[num],"sales: $", salesList[num])

作为旁注,您可以改进fillList,因为您无需为列表创建范围对象,它已经可以迭代了。例如:

def fillList(salesList):
    for day in days_week:
        user_input=int(input("Enter sales for "+ day+": " ))
        salesList.append(user_input)

现在,您每天只循环一次。

答案 2 :(得分:0)

欢迎堆栈溢出@Jnoe。

所以你有两个问题。

第一:为什么要打印7次结果?

正如人们提到的那样,您在showSales(salesList)中有两个嵌套的for语句。要获得我相信您想要的行为,您可以删除for的内在因素,并利用以下事实:每个销售在销售列表中的索引与在days_week列表中进行销售的那一天相同。要获取此索引,可以使用list.index(value)函数。此函数返回列表中value的索引。

因此,为了清楚起见,在您的示例中您具有:

salesList.index(75)将返回6,days_week [6]是星期日,即发生75交易的日期。

所以您的代码应如下所示:

def showSales(salesList):
    for sales in salesList:
        print(days_week[salesList.index(sales)],"sales: $", sales)

第二:如何参考相关日期的最大值?

您现在可能应该已经知道答案了。您可以使用以前使用的相同功能,但现在可以查找包含在销售清单中的最大值的索引。

所以您的代码应该是这样的:

def highestSales(salesList):
    print("Highest sales of the week was achieved on", days_week[salesList.index(max(salesList))])

这意味着从salesList中获取最大值,然后获取此值发生时的salesList索引,现在获取该索引的days_week。

小心!

因为list.index(value)返回您作为参数传递的值第一次出现在列表中的索引,所以如果您在不同的日子有相同的销售,则可能会出现不良的行为。

要适应这种情况,您可以使用list comprehension,但我认为这超出了您的问题范围。