Как взять расчет из класса и записать его в файл

У меня есть задание написать класс BMI со следующими переменными экземпляра: first_name, last_name, identity_card, height и weight. Я должен рассчитать значение ИМТ. Мне также нужно написать программу, которая будет считывать файл в экземпляры класса BMI. Программа рассчитает значение ИМТ и распечатает все исходные данные плюс рассчитанный ИМТ для нового файла.

Например, с файлом:

Yossi Bar 012345678 178 70 
Yuri Gagarin 123456789 157 50
Dana Kama 234567890 160 60
Yona Anerox 345678901 165 43
Dina Dot 456789012 170 80
Rubi Rasmos 567890123 180 100
Rodika Rambam 678901234 170 60

Моя проблема в том, что я не могу понять, как добавить расчет ИМТ в новый файл.

Вот что у меня есть:

class BMI:

    def __init__(self, first_name, last_name, identity_card, height, weight):
        self._first_name = first_name
        self._last_name = last_name
        self._identity_card = identity_card
        self._height = height
        self._weight = weight

    def GetName(self):
        return self._first_name + " " + self._last_name
    
    def GetID(self):
        return self.identity_card
    
    def GetHeight(self):
        return self.height
    
    def GetWeight(self):
        return self.weight

    def GetBMI(self):
        return (self._weight) / self._height ** 2

def makebmi(infostr):
    first_name, last_name, identity_card, height, weight = infostr.split("\t")
    return BMI(first_name, last_name, identity_card, height, weight)
    
def main(): 
   filename = input("enter the file name: ")
   newfilename = input("enter the new file name: ") 
   with open(filename,'r') as firstfile, open(newfilename,'a') as secondfile: 
    # read content from first file
      for line in firstfile: 
            # append content to second file 
            secondfile.write(line)
           
if __name__ == '__main__':
    main()

     


     

person lian2005    schedule 13.02.2021    source источник
comment
stackoverflow.com/questions /23238352/ Вы можете получить помощь здесь   -  person Shaikh Mohammed Ammar    schedule 13.02.2021
comment
Похоже, вам нужно написать ту же строку, что и прочитанную, с некоторыми дополнительными данными, то есть line = '{}\t{}'.format(line, makebmi.GetBMI()).   -  person Reti43    schedule 13.02.2021


Ответы (1)


Я немного изменил ваш код. попробуй и скажи мне, это то, что ты хотел.

class BMI:

  def __init__(self, first_name, last_name, identity_card, height, weight):
      self._first_name = first_name
      self._last_name = last_name
      self._identity_card = identity_card
      self._height = height
      self._weight = weight

  def GetName(self):
      return self._first_name + " " + self._last_name

  def GetID(self):
      return self.identity_card

  def GetHeight(self):
      return self.height

  def GetWeight(self):
      return self.weight

  def GetBMI(self):
      return round(int(self._weight) / int(self._height) ** 2,3)

def makebmi(infostr):
  first_name, last_name, identity_card, height, weight = infostr.split()
  return BMI(first_name, last_name, identity_card, height, weight)

def main(): 
  filename = input("enter the file name: ")
  newfilename = input("enter the new file name: ") 
  with open(filename,'r') as firstfile, open(newfilename,'a') as secondfile: 
  # read content from first file
    for line in firstfile: 
          # append content to second file 
          secondfile.write(line.rstrip()+" " + str(makebmi(line).GetBMI())+"\n")
       
  if __name__ == '__main__':
    main()

или если вы хотите отсортировать его от наибольшего до наименьшего ИМТ. Это один из способов.

class BMI:

  def __init__(self, first_name, last_name, identity_card, height, weight):
    self._first_name = first_name
    self._last_name = last_name
    self._identity_card = identity_card
    self._height = height
    self._weight = weight

  def GetName(self):
    return self._first_name + " " + self._last_name

  def GetID(self):
    return self.identity_card

  def GetHeight(self):
    return self.height

  def GetWeight(self):
    return self.weight

  def GetBMI(self):
    return round(int(self._weight) / int(self._height) ** 2, 3)


def makebmi(infostr):
  first_name, last_name, identity_card, height, weight = infostr.split()
  return BMI(first_name, last_name, identity_card, height, weight)


def main():
  filename = input("enter the file name: ")
  newfilename = input("enter the new file name: ")
  with open(filename, 'r') as firstfile, open(newfilename, 'a') as secondfile:
    # read content from first file
    ls = []
    for line in firstfile:
        # append content to second file
        ls.append(str(makebmi(line).GetBMI()) + "-" + line.rstrip())
    ls.sort(reverse=True)
    for ele in ls:
        secondfile.write(' '.join(ele.split('-')[1:])+" " +ele.split('-')[0]+'\n')
        
if __name__=='__main__':
  main()
person SURYA TEJA    schedule 13.02.2021
comment
Большое спасибо, я не могу поверить, что это было настолько простое решение. - person lian2005; 13.02.2021
comment
Отредактировал основной ответ. пожалуйста, проверь это. - person SURYA TEJA; 13.02.2021