dict problem

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Alistair King

    #1

    dict problem

    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.p y", 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(FCla s, Cl, XDS)
    updateDS1v(FBra s, Br, XDS)
    updateDS1v(FZna s, Zn, XDS)
    print DS1v

    I know there is probably a simple solution but im quite new to python and am lost?


    Ali


    --
    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

  • Roberto Bonvallet

    #2
    Re: dict problem

    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.p y", line 242, in ?
    updateDS1v(FCas , C, XDS)
    NameError: name 'C' is not defined
    >
    dictionary is:
    >
    DS1v = {'C': 6, 'H': 10, 'O': 5}
    Try DS1v['C'] instead of DS1v[C].

    Cheers,
    --
    Roberto Bonvallet

    Comment

    • Roberto Bonvallet

      #3
      Re: dict problem

      Roberto Bonvallet wrote:
      Alistair King wrote:
      >DS1v = {'C': 6, 'H': 10, 'O': 5}
      >
      Try DS1v['C'] instead of DS1v[C].
      updateDS1v(FCas , C, XDS)
      updateDS1v(FHas , H, XDS)
      updateDS1v(FOas , O, XDS)
      updateDS1v(FNas , N, XDS)
      updateDS1v(FSas , S, XDS)
      updateDS1v(FCla s, Cl, XDS)
      updateDS1v(FBra s, Br, XDS)
      updateDS1v(FZna s, Zn, XDS)
      print DS1v
      Sorry, I hadn't seen this part.
      Change C, H, O, ... with 'C', 'H', 'O', ...

      --
      Roberto Bonvallet

      Comment

      • Peter Otten

        #4
        Re: dict problem

        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.p y", 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(FCla s, Cl, XDS)
        updateDS1v(FBra s, Br, XDS)
        updateDS1v(FZna s, Zn, XDS)
        print DS1v
        >
        I know there is probably a simple solution but im quite new to python and
        am lost?
        Ali,

        the NameError stems from the variable C not being defined.
        This can be fixed either by defining it:

        C = "C"
        updateDS1v(FCas , C, XDS)

        or by calling updateDS1v() with a string constant.

        updateDS1v(FCas , "C", XDS)

        However, there are so many errors in the updateDS1v() function that I
        recommend reading an introductory text on Python before you proceed.

        Python is so much /more/ fun if you have at least some clue :-)

        Peter

        Comment

        • Jon Clements

          #5
          Re: dict problem


          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.p y", 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(FCla s, Cl, XDS)
          updateDS1v(FBra s, Br, XDS)
          updateDS1v(FZna s, 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.

          Comment

          Working...