Kodomo

Пользователь

Содержание

  1. Примеры ответов
    1. 1
    2. 2
    3. 3
    4. 4
    5. 5

Решения могуть быть совсем разными. Вот некоторые варианты:

Примеры ответов

1

   1 >>> import math
   2 >>> print("%.3f" % math.radians(10))
   3 0.175

2

   1 >>> beans = 2 ** 64 - 1
   2 >>> bean_grams = 0.062
   3 >>> print("%3.3e kg" % (beans * bean_grams / 1000))
   4 1.144e+15 kg

Зная, что описание % для строк где-то есть, я тыкал так и нашёл про %e: docs.python.org -> Library reference -> Sequence types: ... str ... -> String methods -> String formatting operations. Так как интересен только порядок, то "floating point exponential format" – это то, что нужно.

3

   1 >>> figures = "RNBQKBNR" + "\n"
   2 >>> pawns = "p" * 8 + "\n"
   3 >>> line1 = "  ++" * 4 + "\n"
   4 >>> line2 = "++  " * 4 + "\n"
   5 >>> white = " ".join(pawns) + line1 + " ".join(figures) + line2
   6 >>> black = "#".join(figures) + line1 + "#".join(pawns) + line2
   7 >>> print(black + (line1 * 2 + line2 * 2) * 2 + white)
   8 R#N#B#Q#K#B#N#R#
   9   ++  ++  ++  ++
  10 p#p#p#p#p#p#p#p#
  11 ++  ++  ++  ++  
  12   ++  ++  ++  ++
  13   ++  ++  ++  ++
  14 ++  ++  ++  ++  
  15 ++  ++  ++  ++  
  16   ++  ++  ++  ++
  17   ++  ++  ++  ++
  18 ++  ++  ++  ++  
  19 ++  ++  ++  ++  
  20 p p p p p p p p 
  21   ++  ++  ++  ++
  22 R N B Q K B N R 
  23 ++  ++  ++  ++  

Тут я использовал хитрую штуку .join, которую некоторые могли случайно заметить в help(str).

   1 >>> help(str.join)
   2 Help on method_descriptor:
   3 
   4 join(...)
   5     S.join(sequence) -> string
   6     
   7     Return a string which is the concatenation of the strings in the
   8     sequence.  The separator between elements is S.

Т.е. "разделитель".join("что-нибудь") сделает строку, в которой между каждыми двумя буквами в "что-нибудь" стоит "разделитель". В некоторых случаях это очень полезная штука.

Некоторые поступали так:

   1 >>> w = "w%s" * 8
   2 >>> white = w % ('R', 'N', 'B', 'Q', 'K', 'B', 'N', 'R')

Ещё один подход был в том, чтобы различать чёрных и белых регистром букв:

   1 >>> black = "rnbqkbnr"
   2 >>> white = black.upper()
   3 >>> print(white)
   4 RNBQKBNR

До метода upper можно дотянуться разными путями. Как я показал тут: "строка".upper() даёт "СТРОКА". Догадываясь о существовании такого метода, но не зная, где его искать, можно было посмотреть в документацию по подулю string и найти такое:

   1 >>> import string
   2 >>> white = string.upper(black)

Конечно, можно было бы обойтись и попросту одним вызовом print и ничего не выдумывать.

4

   1 >>> "Pbatengf! Unir lbh thrffrq gung lbh pna qrpbqr vg yvxr k.qrpbqr('ebg13')? Gur qbpf ner urer: uggc://qbpf.clguba.bet/yvoenel/fgqglcrf.ugzy#fge.rapbqr naq frr Fgnaqneq Rapbqvatf gurer.".decode("rot13")
   2 u"Congrats! Have you guessed that you can decode it like x.decode('rot13')? The docs are here: http://docs.python.org/library/stdtypes.html#str.encode and see Standard Encodings there."

Основная подсказка (которую я озвучивал тем, кто при мне дошёл до этой задачи) состояла в том, что питон прямо сразу умеет расшифровывать код Цезаря. Первая попытка поиска: docs.python.org -> Library Reference -> Sequence types ... str ... -> String methods -> ищем слово decode или encode -> Standard encodings -> ищем слово caesar. А дальше вопрос в том, чтобы разобраться, как же этим пользоваться :)

Альтернативный метод:

   1 >>> import string
   2 >>> a = "abcdefghijklm"
   3 >>> A = a.upper()
   4 >>> b = "nopqrstuvwxyz"
   5 >>> B = b.upper()
   6 >>> caesar = string.maketrans(a + A + b + B, b + B + a + A)
   7 >>> cipher = "Pbatengf! Unir lbh thrffrq gung lbh pna qrpbqr vg yvxrk.qrpbqr('ebg13')? Gur qbpf ner urer: uggc://qbpf.clguba.bet/yvoenel/fgqglcrf.ugzy#fge.rapbqr naq frr Fgnaqneq Rapbqvatf gurer."
   8 >>> print(cipher.translate(caesar))
   9 Congrats! Have you guessed that you can decode it likex.decode('rot13')? The docs are here: http://docs.python.org/library/stdtypes.html#str.encode and see Standard Encodings there.

5

   1 >>> print("Abj sbe gur ynfg gnfx. Ortva jvgu >>> cqo_pbqr = '1z5k' (gurer znl or bgure fgevat). Cevag bhg 2-aq naq 3-eq fgevatf bs CQO fgehpgher vqragvsvrq ol guvf pbqr. Fgehpherf znl or qbjaybnqrq sebz: sgc://sgc.jjcqo.bet/cho/cqo/qngn/fgehpgherf/nyy/cqo/cqo{cqo_pbqr}.rag.tm (Uvag: frr qbpf sbe zbqhyrf heyyvo2 naq tmvc).".decode('rot13'))
   2 Now for the last task. Begin with >>> pdb_code = '1m5x' (there may be other string). Print out 2-nd and 3-rd strings of PDB structure identified by this code. Strucures may be downloaded from: ftp://ftp.wwpdb.org/pub/pdb/data/structures/all/pdb/pdb{pdb_code}.ent.gz (Hint: see docs for modules urllib2 and gzip).

Первым делом читаем документацию по urllib2 и gzip. Проще на сайте, но можно и так:

   1 >>> import gzip
   2 >>> help(gzip)

Получается (всё равно совершенно нетривиально):

   1 >>> pdb_code = '1m5x'
   2 >>> import urllib2
   3 >>> import gzip
   4 >>> import StringIO
   5 >>> url = "ftp://ftp.wwpdb.org/pub/pdb/data/structures/all/pdb/pdb%s.ent.gz" % pdb_code
   6 >>> gzipped = urllib2.urlopen(url).read()
   7 >>> pdb = gzip.GzipFile(fileobj=StringIO.StringIO(gzipped)).read()
   8 >>> lines = pdb.split("\n")[1:3]
   9 >>> print("\n".join(lines))
  10 TITLE     CRYSTAL STRUCTURE OF THE HOMING ENDONUCLEASE I-MSOI BOUND             
  11 TITLE    2 TO ITS DNA SUBSTRATE