在python中使用并行数组的初学者

时间:2015-03-21 03:19:50

标签: python

我已经被程序困住了将近一个星期。我正在尝试创建一个程序,在两个并行数组(名称和销售额)中输入销售人员的名称及其当月的总销售额,并确定哪个销售人员的销售额最高(最大)

Names = [" "]*3
Sales = [0]*3
Index = 0
Max = 0

K = 0

Names[K] = input("Enter salesperson's name and monthly sales: (To Exit enter   * or 0)")
Sales[K] = int(input("Enter monthly sales:"))

while (Names[K] !="*"):
    if Sales[K] > Max :
       index = K
       Max = Sales[index]

       K = K + 1


print("Max sales for the month: ",Max)
print("Salesperson: ",(Names[Index]))

它没有提示用户3次获取姓名和工资,而是只询问一次,我收到此错误:

Enter salesperson's name and monthly sales: (To Exit enter * or 0)jon Enter monthly sales:3 
Traceback (most recent call last): 
File "C:\Users\User\Downloads\sales.py", line 18, in <module> while (Names[K] !="*"): 
IndexError: list index out of range

2 个答案:

答案 0 :(得分:0)

我建议不要使用&#39;并行数组&#39;您将名称和销售数字放入dictionary。以下是您需要的内容:

totals = {}
name = input("enter name: ")
while name:
    sales = int(input("enter sales: "))
    totals[name] = sales
    name = input("enter name: ")

此代码也将继续接受新名称,直到您输入空白名称。

从这里开始你应该像这样使用pythons Counter类:

# move this import to the top of the file
from collections import Counter

c = Counter(totals)
max_seller = max(c)
print("Max sales for the month", totals[max_seller])
print("Salesperson:", max_seller)

答案 1 :(得分:0)

您的代码仅在循环开始之前提示用户输入一次,因此除非在第一次输入*,否则循环将永远不会结束。由于您将数组限制为大小3,因此当K大于2时会出现错误。在Python中,您可以使用append方法来增加列表的大小,但如果您希望它们像固定长度数组那样您需要在K变得等于数组大小之前,在代码中包含一些内容,以便在用户无法输入*时捕获。