Как распечатать диапазон на основе двух списков, введенных пользователем? - PullRequest
0 голосов
/ 01 апреля 2019

Итак, в основном, я хочу написать программу на Python, в которой на основе двух списков, таких как этот:

minsalary = [22000,41000,10000,51500,13000]

maxsalary = [35000,95000,34000,65000,31000] 

Пользователь вводит ввод и на основании ввода программа печатает диапазон на основена входе И позиции.Каждый индекс соответствует работе и диапазону.Таким образом, индекс (позиция) 0 в minsalary и индекс 0 в maxsalary оба являются диапазоном, соответствующим заданию 0. Таким образом, от 22000 до 35000 при индексе 0 - это само по себе задание.

Оно основано на максимальной зарплате,каждый диапазон соответствует индексу (или позиции задания)
Таким образом, если пользователь введет 30000, программа выведет лучший диапазон от 22000 до 35000 на основе позиции 0 (индекс).

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Это будет работать без смешения минимальных / максимальных значений различных индексов (например, 33000):

minsalary = [22000,41000,10000,51500,13000]
maxsalary = [35000,95000,34000,65000,31000]
salary    = 14000
index     = min((b-a,i) for i,(a,b) in enumerate(zip(minsalary,maxsalary)) if salary in range(a,b+1))[1]
print(f'Best range is {minsalary[index]} to {maxsalary[index]}, use position {index}')

Вот разбитая версия, чтобы лучше изолировать каждый шаг:

ranges          = zip(minsalary,maxsalary)  # [ (min,max), (min,max), ... ]
indexedRanges   = enumerate(ranges)         # [ (0,(min,max)), (1,(min,max)) ... ]
eligibleIndexes = [ (b-a,i) for i,(a,b) in indexedRanges if salary>=a and salary <= b ] # [ (size,2), (size,4) ]
smallest        = min(eligibleIndexes) # (size,4)
index           = smallest[1]
print(f'Best range is {minsalary[index]} to {maxsalary[index]}, use position {index}')
  • Переменная ranges преобразует два массива в массив кортежей с (минимальным, максимальным) окладами в диапазонах.
  • Переменная indexedRanges добавляет индекс (позицию) к кортежам диапазонов
  • eligibleIndexes фильтрует indexedRanges, чтобы сохранить только те элементы, где заработная плата находится внутри диапазона, и возвращает размер диапазона и соответствующий индекс
  • Переменная smallest получает минимальную запись eligibleIndexes, которая имеет наименьший размер диапазона. В результате получается кортеж с размером и индексом.
  • index наилучшего допустимого диапазона - это вторая часть smallest кортежа.
0 голосов
/ 01 апреля 2019

Использование встроенного min с key:

minsalary = [22000,41000,10000,51500,13000]

maxsalary = [35000,95000,34000,65000,31000] 

def ranger(user_input):
    lower = min(minsalary, key = lambda x: abs(x-user_input))
    upper = min(maxsalary, key = lambda x: abs(x-user_input))
    print('Best range is %s to %s, use position %s' % (lower, upper, maxsalary.index(upper)))

Выход:

ranger(13000)
# Best range is 13000 to 31000, use position 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...