beginner in python

Andy Cheesman Andy.cheesman at bristol.ac.uk
Thu Aug 2 12:16:15 EDT 2007


It looks like you are doing some sort of molecular science thing.
Have you come across openbabel and the python bindings pybel
(http://openbabel.sourceforge.net/wiki/Python#Pybel). I don't know how
well they work but they might save you some effort. Also, check out
pymol,(http://pymol.sourceforge.net/) they might have some of the
functionality which you desire already coded!

HTH
Andy

Steve Holden wrote:
> Beema shafreen wrote:
>> hi everybody,
>>    I am beginner in python
>>  I have to calculate the euclidean distance between the atoms from a pdb 
>> file
>> i have written the the code and its shows me some error ,
>> the code:
>> import re
>> import string
>> import math
>> ab =[]
>> x_value = []
>> y_value = []
>> z_value = []
>> fh = open("1K5N.pdb",'r')
>> for atom in fh.readlines():
>>    a = atom.strip()
>>    pattern= re.compile('^ATOM.*')
>>    atom_file= pattern.search(a)
>>    if  atom_file:
>>        atom_data = atom_file.group()
>>        x_coordinate = atom_data[31:38]
>>        y_coordinate = atom_data[39:46]
>>        z_coordinate = atom_data[47:54]
>>        x_value.append(x_coordinate)
>>        y_value.append(y_coordinate)
>>        z_value.append(z_coordinate)
>> for x in range(len(x_value)):
>>              x_co = float(x_value[x])-float(x_value[x+1])
>>              y_co = float(y_value[x])-float(y_value[x+1])
>>              z_co = float(z_value[x])-float(z_value[x+1])
>>              data = math.sqrt(x_co)*(x_co)+(y_co)*(y_co)+(z_co)*(z_co)
>>              print data
>> ~
>> and the error ,message
>>  File "pdb_fetching.py", line 22, in ?
>>     x_co = float(x_value[x])-float(x_value[x+1])
>> IndexError: list index out of range
>>
>>
>> can you suggest me the mistake i have made
>>
> suppose you have an x_value list of length 6. Valid indexes go from 0 to 
> 5. Then x is going to start at 0 and go up to 5. The last time around 
> the loop the expression "x_value[x+1]" is going to try and use 6 as an 
> index, thus trying to address past the end of the list.
> 
> Since the data values are the RMS differences between successive points, 
> there are only five differences for a six-element list.
> 
> Try using
> 
>      for x in range(len(x_value)-1):
> 
> instead.
> 
> By the way, you presented your question very well - all necessary 
> information was there, and you didn't put in any mistaken guesses about 
> what might be going wrong. Well done, and welcome to Python! You will 
> find you can learn it very quickly.
> 
> regards
>   Steve



More information about the Python-list mailing list