print(' ')  while True: #Запускаем бесконечный цикл      x = input('Введите название входного файла:  ') #Программа просит пользователя ввести с клавиатуры название входного файла      y = input('Введите название выходного файла:  ') #Программа просит пользователя ввести с клавиатуры название выходного файла      try:          f = open(x,'r') #Открываем входной файл          try:              g = open(y,'r') #Открываем выходной файл              g = open(y,'w')              s='+'+20*'-'+'+'+20*'-'+'+'+20*'-'+'+'              print(s)              print('|    Число           |    Квадрат числа   |    Куб числа       |')              print(s) #Сделали шапку таблицы              g.write(s+'\n')              g.write('|    Число           |    Квадрат числа   |    Куб числа       |\n')              g.write(s+'\n') #Записали шапку таблицы в выходной файл              k = f.readline() #Считали первую строку файла              while k is not '': #Задаем цикл пока k не пустая строка (в конце файла находиться пустая строка, то есть этот цикл можно воспринимать как "пока не конец файла")                  try:                      k1 = int(k) #Преобразуем первую строку файла в число, если это число целое. Если число не целое, в таком случае будет выходить ValueError.                      k = str(k1) #Преобразуем целое число обратно в строку                      p2 = str(k1**2) #Преобразуем в строку квадрат числа                      p3 = str(k1**3) #Преобразуем в строку куб числа                  except ValueError: #Если строка не целое число, то отлавливаем ValueError                      try:                          k1 = round(float(k),4) #Преобразуем строку в вещественное число и округляем его до четырех знаков после запятой. Если исходная строка - не число, то будет выходить ValueError.                          k = str(k1) #преобразуем вещественное число обратно в строку                          p2 = str(round(k1**2,4)) #Преобразуем в строку квадрат числа                          p3 = str(round(k1**3,4)) #Преобразуем в строку куб числа                      except ValueError: #Если строка не является числом, то отлавливаем ValueError                          k1 = k[:-1] #Удаляем перевод строки с помощью среза                          k = k1                           p2 = 'не число'                          p3 = 'не число'                  s1='|'+(20-len(k))*' '+k                  s2='|'+(20-len(p2))*' '+p2                  s3='|'+(20-len(p3))*' '+p3                  print(s1+s2+s3+'|') #Выводим само число, квадрат числа и куб числа. Если же данная стока - не число, выводим сообщение об этом                  print(s) #Выводим часть рамки таблицы                  g.write(s1+s2+s3+'|\n') #Записываем само число, квадрат числа и куб числа в выходной файл.                  g.write(s+'\n')                  k = f.readline() #Считываем следующую строку              g.close() #Закрываем выходной файл          except IOError:              print('выходной файл не найден')          f.close() #Закрываем входной файл       except IOError: #Если файл не существует, то отлавливаем исключение IOError          print('входной файл не найден') #Если вышло исключение, выводим об этом сообщение      r=input('Хотите выйти? (yes/no)   ') #Программа спрашивает пользователя, хочет ли он выйти.      if r == 'yes':          break #Если пользователь ответил положительно, выходим из бесконечного цикла, и программа завершает свою работу