2015-03-21 2 views
3

Я застрял в программе почти неделю. Что я пытаюсь сделать создать программу, которая вводит имена продавцов и их общий объем продаж за месяц в виде двух параллельных массивов (имен и продаж) и определить, какой продавец имеет наибольший объем продаж (Max)Новичок с параллельными массивами в 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 
+0

В чем вопрос? – Brionius

+0

он не запрашивает у пользователя 3 раза имя и зарплату, а вместо этого просто спрашивает один раз, и я получаю эту ошибку ::: Введите имя продавца и ежемесячные продажи: (Для выхода введите * или 0) jon Введите месячные продажи: 3 Traceback (последний последний звонок): Файл «C: \ Users \ User \ Downloads \ sales.py», строка 18, в while (Имена [K]! = "*"): IndexError: индекс списка вне диапазона –

ответ

0

Я полагаю, что вместо того, чтобы «параллельные массивы» вы помещаете имена и цифры продаж в a dictionary. Вот то, что это выглядит, как вам нужно:

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

Этот код также будет продолжать принимать новые имена, пока вы не введете пустое имя.

Отсюда следует, вероятно, использовать питонов 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) 
0

Ваш код только предлагает пользователю один раз для ввода перед началом цикла, поэтому цикл никогда не закончится, если * не вошел в первый раз. Поскольку вы ограничили свои массивы размером 3, вы получаете ошибку, когда K больше 2. В Python вы можете использовать метод append, чтобы увеличить размер ваших списков, но если вы хотите, чтобы они были похожими на массивы с фиксированной длиной, вам нужно включить что-то в свой код, чтобы поймать, когда пользователь не может ввести * до того, как K станет равным размеру массива.

Смежные вопросы