这是我第一次在这里提问,我是编程新手,所以要保持谦虚。我正在尝试创建一个代码,在该代码中,用户输入一周中每一天的销售额,并且这些功能显示每天的销售额并显示最高销售额/平均销售额/行为的一天。
预期结果将类似于:
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()
但是,我试图显示销售最多的日期。是否可以将两个列表一起添加?还是有一种简单的方式来显示用户输入最多的日期?
答案 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,但我认为这超出了您的问题范围。