Отступ в питон скрипт

голоса
0

Цель: Учитывая PDB файл, выводит все пары остатков цистеина, образующих дисульфидные связи в третичной структуры белка. Лицензия: GNU GPL Сценарий: Эрик Миллер

#!/usr/bin/env python
import math

def getDistance((x1,y1,z1),(x2,y2,z2)):
   d = math.sqrt(pow((x1-x2),2)+pow((y1-y2),2)+pow((z1-z2),2));
   return round(d,3);

def prettyPrint(dsBonds):
   print Residue 1\tResidue 2\tDistance;
   for (r1,r2,d) in dsBonds:
   print  {0}\t\t {1}\t\t {2}.format(r1,r2,d);

def main():
   pdbFile = open('2v5t.pdb','r');
   maxBondDist = 2.5;

   isCysLine = lambda line: (line[0:4] == ATOM and line[13:15] == SG);
   cysLines = [line for line in pdbFile if isCysLine(line)];
   pdbFile.close();

   getCoords = lambda line:(float(line[31:38]),
      float(line[39:46]),float(line[47:54]));
   cysCoords = map(getCoords, cysLines);
   dsBonds = [];

   for i in range(len(cysCoords)-1):
      for j in range(i+1,len(cysCoords)):
         dist = getDistance(cysCoords[i],cysCoords[j]);
         residue1 = int(cysLines[i][23:27]);
         residue2 = int(cysLines[j][23:27]);
         if (dist < maxBondDist):
            dsBonds.append((residue1,residue2,dist));

   prettyPrint(dsBonds);

if __name__ == __main__:
   main()

Когда я пытаюсь запустить этот сценарий, я получаю проблему отступа. Я 2v5t.pdb (требуется для запуска этого скрипта) в моем рабочем каталоге. Любое решение?

Задан 03/04/2013 в 09:11
источник пользователем
На других языках...                            


3 ответов

голоса
0

Эта:

if __name__ == "__main__":
main()

Должно быть:

if __name__ == "__main__":
    main()

Кроме того , интерпретатор питона даст вам информацию о IndentationError вниз к линии . Я настоятельно рекомендую читать сообщения об ошибках , предоставляемых как разработчики пишут их по причине.

Ответил 03/04/2013 в 09:14
источник пользователем

голоса
2

Для меня отступы сломаны в «prettyPrint» и в « основной ». Также нет необходимости использовать «;». Попробуй это:

#!/usr/bin/env python
import math

# Input: Two 3D points of the form (x,y,z).
# Output: Euclidean distance between the points.
def getDistance((x1, y1, z1), (x2, y2, z2)):
   d = math.sqrt(pow((x1 - x2), 2) + pow((y1 - y2), 2) + pow((z1 - z2), 2))
   return round(d, 3)

# Purpose: Prints a list of 3-tuples (r1,r2,d). R1 and r2 are
# residue numbers, and d is the distance between their respective
# gamma sulfur atoms.
def prettyPrint(dsBonds):
   print "Residue 1\tResidue 2\tDistance"
   for r1, r2, d in dsBonds:
       print " {0}\t\t {1}\t\t {2}".format(r1, r2, d)

# Purpose: Find all pairs of cysteine residues whose gamma sulfur atoms
# are within maxBondDist of each other.
def main():
   pdbFile = open('2v5t.pdb','r')
   #Max distance to consider a disulfide bond.
   maxBondDist = 2.5

   # Anonymous function to check if a line from the PDB file is a gamma
   # sulfur atom from a cysteine residue.
   isCysLine = lambda line: (line[0:4] == "ATOM" and line[13:15] == "SG")
   cysLines = [line for line in pdbFile if isCysLine(line)]
   pdbFile.close()

   # Anonymous function to get (x,y,z) coordinates in angstroms for
   # the location of a cysteine residue's gamma sulfur atom.
   getCoords = lambda line:(float(line[31:38]),
                            float(line[39:46]), float(line[47:54]))
   cysCoords = map(getCoords, cysLines)
   # Make a list of all residue pairs classified as disulfide bonds.
   dsBonds = []

   for i in range(len(cysCoords)-1):
      for j in range(i+1, len(cysCoords)):
         dist = getDistance(cysCoords[i], cysCoords[j])
         residue1 = int(cysLines[i][23:27])
         residue2 = int(cysLines[j][23:27])
         if dist < maxBondDist:
            dsBonds.append((residue1,residue2,dist))

   prettyPrint(dsBonds)

if __name__ == "__main__":
    main()
Ответил 03/04/2013 в 09:14
источник пользователем

голоса
0

Вы не сказали, где ошибка была помечена быть, но:

if __name__ == "__main__":
main()

Должно быть:

if __name__ == "__main__":
   main()
Ответил 03/04/2013 в 09:15
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more