Rosalind 036 Matching Random Motifs

题目背景:

这个问题要求我们计算在一组随机生成的DNA字符串中,至少有一个字符串与给定的基序(特定的DNA序列)相匹配的概率。这些DNA字符串的随机生成受到给定的GC含量的控制,这是指DNA中要么是鸟嘌呤(G)要么是胞嘧啶(C)的碱基所占的比例。

这个问题可以分解为以下几个部分:

  1. N:要生成的随机DNA字符串的数量。
  2. x:DNA字符串的GC含量。这个值在0和1之间,表示任何单个碱基(核苷酸)是G或C的概率。因此,碱基是腺嘌呤(A)或胸腺嘧啶(T)的概率是1 - x。
  3. s:我们在随机字符串中寻找的特定DNA序列(基序)。其长度最多为10个碱基对(bp)。

我们需要计算在N个随机字符串中,至少有一个字符串与给定的DNA序列s完全相同的概率。

要解决这个问题,请考虑以下步骤:

  1. 计算生成给定DNA序列(s)的概率:我们首先需要找到在单次尝试中随机生成DNA序列s的概率。这个概率取决于GC含量(x)和s中的特定碱基。对于s中的每个碱基,如果碱基是G或C,概率是x;如果碱基是A或T,概率是(1 - x)。将这些概率乘在一起。

  2. 单次尝试中未生成给定DNA序列的概率:这简单地是1减去第1步中计算的概率。

  3. N次尝试中未生成给定DNA序列的概率:由于尝试是独立的,这个概率是第2步结果的N次方。

  4. N次尝试中至少生成一次给定DNA序列的概率:最后,我们找到补事件的概率,即1减去第3步中计算的概率。

https://rosalind.info/problems/rstr/

代码:

N = N
x = x
s = s
AT = 0
GC = 0
for nt in s:
    if nt == 'A' or nt == 'T':
        AT += 1
    elif nt == 'G' or nt == 'C':
        GC += 1

s_prob = (((1 - x) / 2)**AT) * (((x) / 2)**GC)
prob = 1 - (1 - s_prob)**N
print('%0.3f' % prob)

你可能感兴趣的:(生物信息,python)