Attachment 'transpon.py'

Download

   1 #!/usr/bin/env python
   2 # coding: utf
   3 '''
   4 Транспонировать матрицу, т. е. ввести таблицу (список списков или список строк, по желанию) и вывести её отраженной относительно главной диагонали, например:
   5   {{{
   6   />>>>>\              /|||||\
   7   |  A  |              >  D  <
   8   | B C |              > B F <
   9   |D   E| превратить в >A   H<
  10   | F G |              > C G <
  11   |  H  |              >  E  <
  12   \<<<<</              \|||||/
  13   }}}
  14    * оформить в виде функции
  15    * написать функцию-генератор каких-нибудь красивых таблиц, вроде приведённой
  16 '''
  17 
  18 import random
  19 
  20 def prt(table):
  21     print '\n'.join(["".join(l) for l in table])+'\n'
  22 
  23 def transpose(table):
  24     t=[]
  25     for i in xrange(len(table[0])):
  26         t.append([])
  27         for k in xrange(len(table)):
  28             t[-1].append(table[k][i])
  29     return t
  30 
  31 def transpose1(table):
  32     return [[table[k][i] for k in xrange(len(table))] for i in xrange(len(table[0]))]
  33 
  34 def tablegen(w,h):
  35     'Генератор таблички «бегущий жук»'
  36     # индекс вектора, сами вектора и измененя индекса
  37     v,dxy,dv=0,((-1,1),(1,1),(1,-1),(-1,-1),),(0,0,1,3)
  38     # следы
  39     chars=[ "/+*+",
  40             "+\\+*",
  41             "*+/+",
  42             "+*+\\" ] #"
  43     # внутренняя таблица
  44     t=[[' ']*(w-2) for i in xrange(h-2)]
  45     # старт
  46     i,k=random.randrange(w-2),random.randrange(h-2)
  47     # побежали
  48     for counter in xrange((w-2)*(h-2)/6):
  49         # индекс нового направления
  50         nv=dv[(v+random.choice(dv))%len(dv)]
  51         # след
  52         t[k][i]=chars[v][nv]
  53         # переход по направлению (массив==тор. TODO: отражение)
  54         i,k=(i+dxy[nv][0])%(w-2),(k+dxy[nv][1])%(h-2)
  55         v=nv
  56     # красивая рамочка
  57     t=[['/']+['^']*(w-2)+['\\']]+ \
  58       [['<']+l+['>'] for l in t]+ \
  59       [['\\']+['_']*(w-2)+['/']]
  60     return t
  61 
  62 w,h=input("Введите w,h: ")
  63 T=tablegen(w,h)
  64 prt(T)
  65 prt(transpose(T))

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.

You are not allowed to attach a file to this page.