• Как с помощью значения переменной выйти на имя сотрудника в другом файле?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Коротко можно так:
    with open('salary.txt') as file:
    	lines = file.read().splitlines()
    
    with open('workers.txt') as file:
    	lines2 = file.read().splitlines()
    
    max_salary = max([x.split(',')[1] for x in lines])
    inn = [x.split(',')[0] for x in lines if x.split(',')[1] == max_salary][0]
    max_salary_user = [x.split(',')[0] for x in lines2 if x.split(',')[1][4:] == inn][0]
    
    print(max_salary_user)

    Насколько я понял, вас ставит в ступор конструкции вида:
    max_salary = max([x.split(',')[1] for x in lines])
    Но в них нет ничего страшного. Данная конструкция является эквивалентом следующей:
    my_list = [] # Создаем пустой список
    
    for x in lines: # перебираем каждую строку
    	my_list.append(x.split(',')[1]) # Каждую строку делим по запятым, берем второй элемент и добавляем в список.
    
    print(my_list) # В списке будет ['99424', '91300', '91870', '63400', '80500', '68070', '76320', '97600', '98060', '78030']
    print(max(my_list)) # С помощью функции max берем сомое большое число из списка.


    Попробуйте потренироваться на следующем простом примере: Есть список чисел - от 1 до 15. Нам нужно выбрать числа, которые больше 7 и меньше 13. Можно сделать так:
    i = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
    
    for x in i:
    	if x > 7 and x < 13:
    		print(x)

    А можно сделать короче:
    i = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
    
    num = [x for x in i if x > 7 and x < 13]
    print(num)
    Ответ написан
    4 комментария
  • Здравствуйте, есть файл с ИНН сотрудников за 1-е полугодие и за 2-е, как вывести ИНН сотрудника с наибольшей зарплатой за первое полугодие?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Немного велосипедно, но работает:
    with open('salary.txt') as file:
    	lines = file.read().splitlines()
    
    max_salary = max([x.split(',')[1] for x in lines])
    max_salary_user = [x.split(',')[0] for x in lines if x.split(',')[1] == max_salary][0]
    print(max_salary_user)

    >>> 1234567898
    Правда здесь не учитывается что может быть более одного сотрудника с одинаковой зарплатой.
    Ответ написан
    Комментировать
  • Здравствуйте, есть файл с ИНН сотрудников за 1-е полугодие и за 2-е, как вывести ИНН сотрудника с наибольшей зарплатой за первое полугодие?

    Vindicar
    @Vindicar
    RTFM!
    salaries = [] # список будет содержать пары значений ИНН-зарплата
    # открываем файл так, чтобы он потом был закрыт, что бы ни случилось
    with open('salary.txt', 'rt', encoding='utf-8') as src:
        for line in src: # перебираем строки в файле
            try: # на случай, если строка неправильная
                row = line.split(',') #делим строку на части
                INN, salary = row[0], row[1] 
                # ИНН оставим строкой
                salary = int(salary) # зарплата - целое число?
                # если всё прошло как надо, добавляем пару в список
                # обратите внимание на двойные скобки
                salaries.append( (INN, salary) ) 
            except: # если была ошибка, ругаемся на строку
                print('Некорректная строка пропущена:', repr(line))
                # pass # ну или просто пишем pass чтобы ничего не делать
    # теперь все данные у нас в списке
    # могли бы и не делать список, а сканировать сразу файл,
    # если нужен только максимум, а файл большой
    # находим максимум стандартной функцией
    # функция вернёт элемент списка, т.е. пару значение ИНН-зарплата
    # key показывает, по какому критерию сравнивать элементы списка
    # в нашем случае элемент №1 (с нуля), т.е. зарплата
    max_INN, max_salary = max(salaries, key = (lambda row: row[1]))
    print(max_INN)
    Ответ написан
    Комментировать
  • Код выводит правильные ответы, но очень раздражает ошибка(IndexError: list index out of range), кто знает как исправить?

    @o5a
    Проблема возникает из-за самого файла с данными. В какой-то из строк не более трех запятых, поэтому она не может быть разложена через split на 5 элементов. Возможно там вообще пустая строка (возможно даже в самом конце файла). Если файл небольшой, это и визуально будет заметно.

    Можно вывести эти неправильные данные при ошибке через обработку исключений например:
    for i in arr1:
        try:
            if(35>(2017-int(i[4]))):
                print(i[1], "-", 2017-int(i[4]),"годика")
        except IndexError:
            print("Кривая строка", i)
    Ответ написан
    1 комментарий