dict problem

Alistair King alistair.king at helsinki.fi
Wed Oct 25 05:55:34 EDT 2006


Jon Clements wrote:

> > Alistair King wrote:
> >
> >   
>   
>> >> Hi,
>> >>
>> >> ive been trying to update a dictionary containing a molecular formula, but seem to be getting this error:
>> >>
>> >>
>> >> Traceback (most recent call last):
>> >>   File "DS1excessH2O.py", line 242, in ?
>> >>     updateDS1v(FCas, C, XDS)
>> >> NameError: name 'C' is not defined
>> >>
>> >> dictionary is:
>> >>
>> >> DS1v = {'C': 6, 'H': 10, 'O': 5}
>> >>
>> >>
>> >>
>> >> #'Fxas' in each case will be integers but 'atoms' should be a float
>> >>
>> >> def updateDS1v(Fxas, x, XDS):
>> >>     while Fxas != 0:
>> >>         atoms = DS1v.get('x') + Fxas*XDS
>> >>         DS1v[x] = atoms
>> >>
>> >> updateDS1v(FCas, C, XDS)
>> >> updateDS1v(FHas, H, XDS)
>> >> updateDS1v(FOas, O, XDS)
>> >> updateDS1v(FNas, N, XDS)
>> >> updateDS1v(FSas, S, XDS)
>> >> updateDS1v(FClas, Cl, XDS)
>> >> updateDS1v(FBras, Br, XDS)
>> >> updateDS1v(FZnas, Zn, XDS)
>> >> print DS1v
>> >>
>> >> I know there is probably a simple solution but im quite new to python and am lost?
>> >>
>> >>     
>>     
> >
> > I strongly suggest reading through the tutorial.
> >
> > I don't think there's enough code here for anyone to check it properly.
> > For instance, it looks like FCas exists somewhere as it's barfing on
> > trying to find C. Where is XDS defined etc...?
> >
> > I can't see updateDS1v() ever completing: any Fxas passed in not equal
> > to 0 will repeat indefinately.
> >
> > I'm guessing unless C is meant to be a variable, you mean to pass in
> > the string 'C'.
> >
> > A dictionary already has it's own update method....
> >
> > Perhaps if you explain what you're trying to do in plain English, we
> > could give you some pointers.
> >
> > Jon.
> >
> >   
>   
sorry,

this has been a little rushed

XDS is defined before the function and is a float.
the Fxas values are also and they are integers


now ive tried

def updateDS1v(Fxas, x, XDS):
while Fxas != 0:
atoms = DS1v.get(x) + Fxas*XDS
DS1v['x'] = atoms

updateDS1v(FCas, 'C', XDS)
updateDS1v(FHas, H, XDS)
updateDS1v(FOas, O, XDS)
updateDS1v(FNas, N, XDS)
updateDS1v(FSas, S, XDS)
updateDS1v(FClas, Cl, XDS)
updateDS1v(FBras, Br, XDS)
updateDS1v(FZnas, Zn, XDS)
print DS1v

from this i get the error:

Traceback (most recent call last):
File "DS1excessH2O.py", line 242, in ?
updateDS1v(FCas, 'C', XDS)
File "DS1excessH2O.py", line 239, in updateDS1v
atoms = DS1v.get(x) + Fxas*XDS
TypeError: unsupported operand type(s) for +: 'int' and 'str'


with single quotes (FCas, 'C', XDS) to retrieve the value for that key
from the dictionary and then create the new value and replace the old value.

a


-- 
Dr. Alistair King
Research Chemist,
Laboratory of Organic Chemistry,
Department of Chemistry,
Faculty of Science
P.O. Box 55 (A.I. Virtasen aukio 1)
FIN-00014 University of Helsinki
Tel. +358 9 191 50392, Mobile +358 (0)50 5279446
Fax +358 9 191 50366 




More information about the Python-list mailing list