Операции с текстами

Разбор одной из задач

Задача состояла в том, чтобы реализовать функцию print_square(n), печатающую полый квадрат \(n\times n\).

Приведём две реализации: первая пользуется оператором умножения текста на число, а вторая парой циклов имитирует работу каретки, а «цвет» пикселя считает отдельной функцией.

Реализация 1

def print_square(n):
  line_a = '*' * n + '\n'
  line_b = '*' + ' ' * (n-2) + '*\n'
  
  if   n >= 2: print(line_a + line_b*(n-2) + line_a)
  elif n == 1: print('*')
  else:        print('')

Реализация 2

def print_square(n):
  for y in range(n):
    for x in range(n):
      print(pixel(n,x,y),end='')
    print()
    
def pixel(n,x,y):
  if x == 0 or x == n-1: return '*'
  if y == 0 or y == n-1: return '*'
  return ' '

Упражнения

  1. Реализовать функцию print_squares(n,k), печатающую друг за другом k квадратов \(n\times n\). Пример работы для \(n=4\), \(k=4\):
**** **** **** ****
*  * *  * *  * *  *
*  * *  * *  * *  *
**** **** **** ****
  1. Реализовать функцию print_diamond(n), печатающую «ромбик» с «диагональю» \((2n-1)\). Пример работы для \(n=3\):
  *
 * *
*   *
 * *
  *
  1. Реализовать функцию print_diamonds(n,k), печатающую друг за другом \(k\) ромбиков. Пример работы для \(n=3\), \(k=4\):
  *     *     *     *
 * *   * *   * *   * *
*   * *   * *   * *   * 
 * *   * *   * *   * *
  *     *     *     *
  1. Программа принимает на вход число \(N\), а затем — \(2^N\) строчек с \((N+1)\) целым числом каждая. Если соответствующие строчки можно интерпретировать как полную (присутствуют все возможные комбинации значений) таблицу булевой функции, программа должна печатать СДНФ так, как в примере. В противном случае программа должна печатать WRONG TABLE. Пример работы:}
2
0 0 1
1 1 1
0 1 1
1 0 0

X1X2 v x1x2 v X1x2