вывод 'not found', если элемент отсутствует в списке - PullRequest
0 голосов
/ 01 декабря 2018

В настоящее время я работаю над проектом и застрял в нем на несколько часов ... Меня попросили выяснить, в каком месяце этот конкретный персонал зарабатывает больше всего, он работает нормально, если персонал присутствует в списке, однако это не так.не работает, если сотрудников нет в списке.

Вот что у меня сейчас ...

salary = ['Ken 1230 2170 1110 1030 1040 1480 1490 1360 1230 1460 1350 1490\n', 
                  'Shi 1190 1180 1500 1300 1250 1400 1150 1110 1240 2090 2000 1030\n', 
                  'John 1360 1370 1090 1190 1200 1490 1360 1240 1170 1370 1030 1390\n', 
                  'Mary 1140 1160 1440 1080 1270 2490 1330 1270 1190 1380 1180 1350\n', 
                  'Bernice 1440 2240 1160 1160 1280 1360 1150 1430 1320 1020 2400 2400\n']
salary = map(str.strip, salary)
salary = map(str.split, salary)
maxlist=[]
month=[]
n=input('Which staff?')
dict_month = {0:'January',1:'February',2:'March',3:'April',4:'May',5:'June',6:'July',7:'Augest',8:'September',9:'October',10:'November',11:'December'}
found_name = False

for i in salary:
    if i[0] == n:
        found_name = True
        del i[0]
        i = list(map(int, i))
        max_value = max(i)
        for j,k in enumerate(i):
            if k == max_value:
                maxlist.append(j)
for i in maxlist:
    if i in dict_month:
        month.append(dict_month[i])

if len(month)==1:
    print(n+' earns the most in '+ month[0])
else:
    print(n + " earns the most in " + ", ".join(month[:-1]) + " and " + month[-1] )

if not found_name:
    print('%s not found' % n)

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Вы должны включить обработку ошибок в свой код:

try:
    if len(month)==1:
        print(n+' earns the most in '+ month[0])
    else:
        print(n + " earns the most in " + ", ".join(month[:-1]) + " and " + month[-1] )
except IndexError:
    print('%s not found' % n)

Теперь программа не будет аварийно завершать работу при вводе пользователем неожиданного ввода:

Which staff? JOHN DOE
 JOHN DOE not found
>>> 
0 голосов
/ 01 декабря 2018

Проблема в том, что вы все равно проверяете список по месяцам, вам нужно использовать found_name ранее:

if found_name:
    if len(month)==1:
        print(n+' earns the most in '+ month[0])
    else:
        print(n + " earns the most in " + ", ".join(month[:-1]) + " and " + month[-1] )
else:
    print('%s not found' % n)

Нет month[-1], если вы не нашли имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...