所以,我已经看到了针对这个问题或类似问题的一些解决方案,但我真的想知道为什么 我的工作不起作用.它比我找到的很多解决方案更容易阅读,所以我很乐意让它发挥作用!
从1对兔子开始,2个月后开始繁殖.跑了n个月,兔子在生活了几个月后就死了.输入'6 3'应该返回4,但它返回3.
#run for n months, rabbits die after m months.
n, m = input("Enter months to run, and how many months rabbits live, separated by a space ").split()
n, m = int(n), int(m)
generations = [1, 1, 2] #Seed the sequence with the 1 pair, then in their reproductive month.
def fib(i, j):
count = 3 #we start at the 3rd generation.
while (count < i):
if (count < j):
generations.append(generations[count-2] + generations[count-1]) #recurrence relation before …
Run Code Online (Sandbox Code Playgroud) 我正在研究Rosalind问题Mortal Fibonacci Rabbits,当我使用我的算法编写JavaScript时,网站一直告诉我我的答案是错误的.当我在Python中使用相同的算法时,我会得到一个不同的(和正确的)答案.
只有在结果变大时才会出现不一致.例如,在JavaScript中fibd(90, 19)
返回2870048561233730600
但在Python中我得到2870048561233731259
.
有没有关于JavaScript中的数字给我一个不同的答案或在我的JavaScript代码中犯了一个微妙的错误?
JavaScript解决方案:
function fibd(n, m) {
// Create an array of length m and set all elements to 0
var rp = new Array(m);
rp = rp.map(function(e) { return 0; });
rp[0] = 1;
for (var i = 1; i < n; i++) {
// prepend the sum of all elements from 1 to the end of the array
rp.splice(0, 0, rp.reduce(function (e, s) { return s …
Run Code Online (Sandbox Code Playgroud) 我只是在模仿(孟德尔的第一遗传定律).
在我可以让生物交配并分析结果之前,必须生成群体,即,必须在不解包它们的情况下用不同数量的三种不同类型的元组填充列表.
在尝试熟悉itertools时(我稍后需要在配合部分中进行组合),我想出了以下解决方案:
import itertools
k = 2
m = 3
n = 4
hd = ('A', 'A') # homozygous dominant
het = ('A', 'a') # heterozygous
hr = ('a', 'a') # homozygous recessive
fhd = itertools.repeat(hd, k)
fhet = itertools.repeat(het, m)
fhr = itertools.repeat(hr, n)
population = [x for x in fhd] + [x for x in fhet] + [x for x in fhr]
Run Code Online (Sandbox Code Playgroud)
这将导致:
[('A', 'A'), ('A', 'A'), ('A', 'a'), ('A', 'a'), ('A', 'a'), …
Run Code Online (Sandbox Code Playgroud) 我正试图在http://rosalind.info/problems/iprb/解决问题
鉴于:三个正整数
k
,m
和n
代表含有k+m+n
生物的群体:k
个体是一个因子的纯合优势,m
是杂合的,并且n
是纯合的隐性.返回:两个随机选择的交配生物将产生具有显性等位基因的个体(从而显示显性表型)的概率.假设任何两种生物都可以交配.
我的解决方案适用于样本,但不适用于生成的任何问题.在进一步研究之后,似乎我应该找到随机选择任何一个生物体的概率,找到选择第二个生物体的概率,然后是产生后代与显性等位基因的配对概率.
我的问题是:我的代码在下面找到了什么概率?是否找到了所有可能交配的具有显性等位基因的后代的百分比 - 因此,如果对所有对进行测试,我的代码是否正在解决具有显性等位基因的后代的百分比?
f = open('rosalind_iprb.txt', 'r')
r = f.read()
s = r.split()
############# k = # homozygotes dominant, m = #heterozygotes, n = # homozygotes recessive
k = float(s[0])
m = float(s[1])
n = float(s[2])
############# Counts for pairing between each group and within groups
k_k = 0
k_m = 0
k_n = 0
m_m = 0 …
Run Code Online (Sandbox Code Playgroud) 我正试图从rosalind项目中解决一个练习,但显然仍然犯了一些错误.全文可在此处获得,但我的简短抽象解释和尝试如下.请帮我找一下我做错了什么:
我们有3个团体项目:AA
,Aa
,aa
.我们从1开始Aa
并进行k
生成新项目的迭代.在每次迭代中,组中的每个项目:
Aa
可以产生:AA
(25%),Aa
(50%),aa
(25%)AA
可以产生:AA
(50%),Aa
(50%)aa
可以产生:aa
(50%),Aa
(50%)作为迭代的结果,我们计算每个组的预期项目数,假设我们在上一次迭代中从每个项目生成2个新项目.所以我们最终得到:
AA
0,Aa
:1,aa
:0AA
.5,Aa
:1,aa
:.5AA
1,Aa
:2,aa
:1每次迭代的预期值/总体的总和是2^iteration
,项目在组中的概率Aa
总是50%.
到目前为止,我希望我是对的,但我们真正追求的是:如果我们重复实验两次,那么至少N
有Aa
两个项目组合在一起的可能性是多少.(应相当于:什么是至少具有机会N
在项目组中AaBb
,如果我们延长组的列表AABB …
我正在尝试计算 Rosalind 问题的 DNA 序列的 GC 含量(以%为单位)。我有以下代码,但它返回 0,或者仅返回 G 的数量或单独的 C 的数量(无百分比)。
x = raw_input("Sequence?:").upper()
total = len(x)
c = x.count("C")
g = x.count("G")
gc_total = g+c
gc_content = gc_total/total
print gc_content
Run Code Online (Sandbox Code Playgroud)
我也尝试过这个,只是为了获取 G 和 C 的计数,而不是百分比,但它只是返回整个字符串的计数:
x = raw_input("Sequence?:").upper()
def gc(n):
count = 0
for i in n:
if i == "C" or "G":
count = count + 1
else:
count = count
return count
gc(x)
Run Code Online (Sandbox Code Playgroud)
编辑:我修复了第一个代码示例中 print 语句中的拼写错误。这不是问题,我只是粘贴了错误的代码片段(有很多尝试......)
作为即将到来的生物信息学课程的准备工作,我正在做一些来自 rosalind.info 的作业。我目前被困在任务“孟德尔第一定律”中。
我想我可以用蛮力来解决这个问题,但不知何故,我的想法一定太复杂了。我的方法是这样的:
构建一个具有三个级别的概率树。有两种生物交配,生物 A 和生物 B。第一级是,选择生物 A 纯合显性 (k)、杂合 (m) 或纯合隐性 (n) 的概率是多少。看起来,例如对于纯合优势,因为总共有 (k+m+n) 个生物,其中 k 是纯合优势,概率是 k/(k+m+n)。
然后在这棵树中,假设我们知道生物 A 被选为什么生物,那么在每个树下都会出现生物 B 为 k / m / n 的概率。例如,如果生物 A 被选为杂合 (m),那么生物 B 也是杂合的概率是 (m-1)/(k+m+n-1),因为现在剩下的杂合生物少了一个。
这将给出两个级别的概率,并且会涉及很多代码来实现这一点,因为我实际上是在构建树结构,并且为每个分支手动编写了该部分的代码。
现在在选择生物 A 和 B 后,它们每个都有两条染色体。可以随机挑选这些染色体之一。因此,对于 A,可以选择 1 或 2 号染色体,B 的染色体也相同。因此有 4 种不同的选择:选择 A 中的 1,B 中的 1。选择 A 中的 2,B 中的 1。选择 A 中的 1,B 中选择 2。 A 中的 2 个,B 中的 2 个。这些中的每一个的概率都是 1/4。所以最后这棵树会有这些叶子概率。
然后从那里以某种方式通过魔法我将所有这些概率相加,看看两个生物体产生具有显性等位基因的生物的概率是多少。
我怀疑这项任务是否需要花费数小时才能解决。我在想什么太难了?
更新:
以最荒谬的蛮力方式解决了这个问题。刚刚运行了数千次模拟交配并找出最终具有显性等位基因的部分,直到有足够的精度通过分配。 …