我创建了一个python 2.7 tkinter模块,它使用比例小部件数据(水上或陆地)来影响在动物之间进行选择的元组。该模块在点击“提交”并激活相关命令后按排序降序排序并显示三种动物(鹿,鳗鱼,海龟)。
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("<Button-1>", self.submitbuttonclick)
self.submitbutton.bind("<Return>", 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()
理论上,将水生尺度滑动到0.01应该消除鳗鱼(鳗鱼:0.00)并且将陆地尺度滑动到0.01应该消灭鹿(鹿:0.00)。这很好用。
但是,当处理水生和陆生动物时,代码就会崩溃。只要水生或陆地尺度超过0.01,龟就不应该达到零。加性概率不起作用。
lambda:self.soil.get()*self.water.get()
我如何表达这一点,以便两者都被考虑但是两者都不能取消另一个?
答案 0 :(得分:1)
概率是有趣的事情。要结合这些概率,您需要查看它不 terrestial的概率,并且不水生。然后取1减去组合概率。乌龟的代码看起来像这样。
('Trachemys scripta','Red-eared Slider',lambda:1-(1-self.soil.get())*(1-self.water.get()),0.99,0.01,0.99)]