TypeError:'<' ' float'的实例之间不支持和'功能'

时间:2017-12-08 13:23:38

标签: python python-3.x

&lt; p&gt;我正在尝试创建一个非常简单的病毒治疗模拟。我创建了两个文件(infection.py和medicine.py),一个模拟病毒,一个模拟非常简化的治疗方法。第一个程序自行完美运行。它返回一个列表,其中包含每个时间单位的病毒数量。第二个程序导入了第一个程序,并用于创建某种治疗方法。我主要使用程序1中的预定义函数,并重新定义了&lt; code&gt; simulate()&lt; / code&gt;。 &LT; / p为H. &lt; p&gt;要理解这个程序:&#39; The Cure&#39;在&lt; code&gt; timestep = 100&lt; / code&gt;之后开始,这是在病毒被诊断出来之后。病毒只有在对治愈有抵抗力的情况下才能繁殖,换句话说,如果病毒含有“AAA”。病毒可以死亡,繁殖和变异。突变有时会导致抵抗力。&lt; / p&gt; &lt; p&gt;一切都应该正常工作(理论上?),但是在运行程序2时我反复收到相同的错误信息:&lt; code&gt; TypeError:&#39;&lt;&#39; &#39; float&#39;的实例之间不支持和&#39;功能&#39;&lt; / code&gt;。我知道这意味着什么,但是它说错误来自程序1中预定义的函数。但是程序1运行这个函数没有任何困难。我尝试存储&lt; code&gt; random.random()&lt; / code&gt;的值。然后使用它,但这不起作用。这是我的代码:&lt; / p&gt; &lt; p&gt; PROGRAM 1&lt; / p&gt; &lt; pre&gt;&lt; code&gt;导入随机 def generateVirus(length):     返回&#39; .join([random.choice([&#39; A&#39;,&#39; G&#39;,&#39; T&#39;,&#39; C& #39;])我的范围(长度)]) def mutate(病毒):     rand = random.randint(0,len(病毒)-1)     返回病毒[:rand] + random.choice([i for i in&#39; AGTC&#39; if i!= virus [rand]])+病毒[rand + 1:] def kill(病毒,deathProb):     如果random.random()&gt;返回[病毒幸存者的幸存者mortalityProb] def reproduce(病毒,mutationProb,reproductionProb):     nextgen = []     对于我的病毒:         nextgen.append(ⅰ)         if random.random()&lt; reproductionProb:             if random.random()&lt; mutationProb:                 nextgen.append(发生变异(i))的             其他:                 nextgen.append(ⅰ)     返回nextgen def reproductionProbability(病毒,maxReproductionProb,maxPopulation):     return(1 - (len(病毒)/ maxPopulation))* maxReproductionProb def模拟(病毒,deathProb,mutationProb,maxReproductionProb,     maxPopulation,timesteps = 500):     pop_size = []     而时间步长&gt; -1:         幸存者=杀死(病毒,死亡率)         reproductionProb = reproductionProbability(幸存者,maxReproductionProb,maxPopulation)         病毒=繁殖(幸存者,mutationProb,reproductionProb)         pop_size.append(LEN(病毒))         时间步长 - = 1     返回pop_size 打印(模拟([&#39; GCTCC&#39;,&#39; CCGG&#39;,&#39; AACCGG&#39;,&#39; CCCTATAGG&#39;],0.05,0.1,0.07,1000) ) &LT; /代码&GT;&LT; /预&GT; &lt; p&gt; PROGRAM 2&lt; / p&gt; &lt; pre&gt;&lt; code&gt;导入感染 def isResistent(病毒):     如果是virus.find(&#39; AAA&#39;)&gt; -1:         返回True     其他:         返回False def模拟(病毒,deathProb,mutationProb,maxReproductionProb,maxPopulation,timesteps = 500):     activation_cure = 400     而时间步长&gt; -1:         幸存者= infe.kill(病毒,deathProb)         病毒中的病毒:             如果时间步长< activation_cure和isResistent(病毒):                 reproductionProb = infection.reproductionProbability                 infection.reproduce(病毒,mutationProb,reproductionProb)         时间步长 - = 1     返回len(病毒) def实验(numberOfPatients):     固化= 0     病毒= []     我在范围内(10):         viruses.append(infection.generateVirus(16))     for in in range(numberOfPatients):         remaining_virus = simulate(病毒,0.05,0.1,0.07,1000)         如果remaining_virus [len(remaining_virus)-1] == 0:             固化+ = 1     返回治愈 打印(实验(5)) &LT; /代码&GT;&LT; /预&GT; &lt; p&gt; COMPLETE ERROR MESSAGE&lt; / p&gt; &lt; pre&gt;&lt; code&gt;文件&#34; C:\ something \ workspace \ infection.py&#34;,第17行,重现 if random.random()&lt; reproductionProb: TypeError:&#39;&lt;&#39; &#39; float&#39;的实例之间不支持和&#39;功能&#39; &LT; /代码&GT;&LT; /预&GT;

1 个答案:

答案 0 :(得分:1)

错误消息是明确的:此行(第17行)是问题:

 if random.random() < reproductionProb

random.random()是一个浮点数,reproductionProb是一个函数句柄。你无法将浮点数与函数进行比较。

reproductionProb = infection.reproductionProbability

是传递函数句柄而不是float的调用。

此外,您需要确保将主要功能封装为:

if __name__=='__main__':

如果导入文件,则会阻止调用导入文件的主要功能。