tags:

views:

67

answers:

2

How do I reference this_prize.left or this_prize.right using a variable?

from collections import namedtuple

import random 

Prize = namedtuple("Prize", ["left", "right"]) 

this_prize = Prize("FirstPrize", "SecondPrize")

if random.random() > .5:
    choice = "left"
else:
    choice = "right"

#retrieve the value of "left" or "right" depending on the choice

print "You won", this_prize.choice

AttributeError: 'Prize' object has no attribute 'choice'
+5  A: 
getattr(this_prize,choice)

http://docs.python.org/library/functions.html#getattr

S.Lott
why the downvote?
SilentGhost
+3  A: 

The expression this_prize.choice is telling the interpreter that you want to access an attribute of this_prize with the name "choice". But this attribute does not exist in this_prize.

What you actually want is to return the attribute of this_prize identified by the value of choice. So you just need to change your last line...

from collections import namedtuple

import random

Prize = namedtuple("Prize", ["left", "right" ])

this_prize = Prize("FirstPrize", "SecondPrize")

if random.random() > .5:
    choice = "left"
else:
    choice = "right"

#retrieve the value of "left" or "right" depending on the choice

print "You won", getattr(this_prize,choice)
AJ