@Anastas_os
Пытаюсь программировать)

Здравствуйте, есть файл с ИНН сотрудников за 1-е полугодие и за 2-е, как вывести ИНН сотрудника с наибольшей зарплатой за первое полугодие?

Вот мой код но он выводит неверный ответ:

def salary():
      infile = open("C:/Users/OWNER/Desktop/3/salary.txt","r",encoding="utf-8")
      arr = []
      arr1 = []
      max = 0
      num = 0

      arr = infile.readlines()

      for i in arr:
            if i and i != "\n":
                 num = i.split(",") 

      for summ in arr1:
            if (max<int(summ[1])):
                max = int(summ[1])
                num=summ
      print(num[0])

salary()


6055f423602a4786332609.png
1234567898,99424,99524
1234567891,91300,95020
1234567897,91870,98200
1234567894,63400,67510
1234567899,80500,76020
1234567892,68070,65500
1234567893,76320,78000
1234567895,97600,96050
1234567810,98060,97200
1234567896,78030,83002
Может быть проблема этом кусочке кода:

for i in arr:
if i and i != "\n":
num = i.split(",")
но без него программа совсем не работает :( Буду благодарна за любой совет, спасибо!
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 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
Правда здесь не учитывается что может быть более одного сотрудника с одинаковой зарплатой.
Ответ написан
Комментировать
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)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
27 нояб. 2024, в 17:41
2000 руб./за проект
27 нояб. 2024, в 17:26
1 руб./за проект
27 нояб. 2024, в 17:17
3000 руб./за проект