title: python additive probability
body: <p>I've created a python 2.7 tkinter module which uses scale widget data (aquatic or terrestrial) to influence a tuple which selects between animals. The module sorts and displays the three animals (deer, eel, turtles) in ranked descending order upon clicking 'Submit' and activating the associated command. </p>
  
  <pre><code>from Tkinter import (N, S, E, W, BOTH, BOTTOM, END, FLAT, HORIZONTAL, LEFT, NO, RAISED, RIGHT, TOP, YES, Button, Entry, Frame, Grid, Label, Pack, Scale, Text, Tk)
  
  from operator import mul
  
  root = Tk()
  root.title('Example')
  
  class Environment:
      def __init__(self, parent):
  
          # layout
          self.myParent = parent
  
          self.main_frame = Frame(parent, background="light blue")
          self.main_frame.pack(expand=YES, fill=BOTH)
  
          self.main_left_frame = Frame(self.main_frame, background="light blue")
          self.main_left_frame.pack(side=LEFT, expand=YES, fill=BOTH)
  
          self.main_right_frame = Frame(self.main_frame, background="light blue")
          self.main_right_frame.pack(side=RIGHT, expand=YES, fill=BOTH)
  
          self.water = Scale(self.main_right_frame, from_=0.01, to=1.00, orient=HORIZONTAL, bd=0, label="Aquatic",
          background="white", troughcolor="cyan", length=50, width=10, sliderlength=10, resolution=0.01)
          self.water.pack()
          self.water.set(1.00)
  
          self.soil = Scale(self.main_right_frame, from_=0.01, to=1.00, orient=HORIZONTAL, bd=0, label="Terrestrial",
          background="white", troughcolor="saddle brown", length=50, width=10, sliderlength=10, resolution=0.01)
          self.soil.pack()
          self.soil.set(1.00)
  
          self.id_frame = Frame(self.main_left_frame, background="white")
          self.id_frame.pack(side=BOTTOM)
  
          # submit button
          self.submitbutton = Button(self.main_left_frame,text="Submit", background="black", foreground="white",
          width=6, padx="2m", pady="1m")
          self.submitbutton.pack(side=TOP)
          self.submitbutton.bind("&lt;Button-1&gt;", self.submitbuttonclick)
          self.submitbutton.bind("&lt;Return&gt;", self.submitbuttonclick)
  
          #Animal Matrix
          self.animal = [
          ('Odocoileous virginiana','White-tailed Deer',self.soil.get,0.99,0.01,0.99),
          ('Anguilla anguilla','American Eel',self.water.get,0.99,0.01,0.99),
          ('Trachemys scripta','Red-eared Slider',lambda:self.soil.get()*self.water.get(),0.99,0.01,0.99)]
  
      def submitbuttonclick(self, event):
          self.id_frame.destroy()
          self.id_frame = Frame(self.main_left_frame, background="white")
          self.id_frame.pack(side=BOTTOM)
  
          A=self.animal
  
          #equation
          sigma = float(sum(reduce(mul,item[3:]) for item in A))
          B = [(item[0], "%.2f" % (item[2]()*reduce(mul, item[3:])/sigma)) for item in A]
          C = sorted(B, key=lambda item: item[1], reverse=True)  
  
          Label(self.id_frame, text = C[0], background = "white").pack(side=TOP, anchor = W)
          Label(self.id_frame, text = C[1], background = "white").pack(side=TOP, anchor = W)
          Label(self.id_frame, text = C[2], background = "white").pack(side=TOP, anchor = W)
  
  environment = Environment(root)       
  root.mainloop()
  </code></pre>
  
  <p>In theory, sliding the aquatic scale to 0.01 should eliminate the eel (Eel: 0.00) and sliding the terrestrial scale to 0.01 should eliminate the deer (Deer: 0.00).  This works fine.  </p>
  
  <p>However, when dealing with an animal that is both aquatic and terrestrial, the code falls apart.  The turtle should not hit zero so long as either the aquatic or terrestrial scale is above 0.01.  Additive probability doesn't work.</p>
  
  <pre><code>lambda:self.soil.get()*self.water.get()
  </code></pre>
  
  <p>How do I express this so that both are considered but neither can cancel out the other?  </p>