在2012年7月的“门萨公告”上有一篇题为“数字大脑”的文章,作者将人脑与base64计算联系起来。这是一篇非常有趣有趣的文章,结尾有一个提示。该提示要求读者使用胞嘧啶-鸟嘌呤-鸟嘌呤-鸟嘌呤-鸟嘌呤-鸟嘌呤-鸟嘌呤-鸟嘌呤-鸟嘌呤等于2011(第一个密码子集简称cgagag,第二个密码子集简称ccgcag)。基本上,您必须使用表中按正确顺序显示所有可能的密码子,aug=0,uuu=1,uuc=2。。。,gga==61,ggg=62,uag=63。我决定尝试一下,决定编写一个python程序,将密码子数字转换为以10为基数的数字,并将以10为基数的数字转换为密码子。在为两者编写了一个快速算法之后,我运行了它。程序没有出错,并弹出我的密码子,反之亦然。但是,他们是错的号码!我看不出出出什么问题了,非常感谢你的帮助。在
无需进一步说明,代码:
codons = ['aug', 'uuu', 'uuc', 'uua', 'uug', 'ucu', 'ucc', 'uca', 'ucg', 'uau', 'uac', 'uaa', 'ugu', 'ugc', 'uga', 'ugg', 'cuu', 'cuc', 'cua', 'cug', 'ccu', 'ccc', 'cca', 'ccg', 'cau', 'cac', 'caa', 'cag', 'cgu', 'cgc', 'cga', 'cgg', 'auu', 'auc', 'aua', 'acu', 'acc', 'aca', 'acg', 'aau', 'aac', 'aaa', 'aag', 'agu', 'agc', 'aga', 'agg', 'guu', 'guc', 'gua', 'gug', 'gcu', 'gcc', 'gca', 'gcg', 'gau', 'gac', 'gaa', 'gag', 'ggu', 'ggc', 'gga', 'ggg', 'uag' ]
def codonNumToBase10 ( codonValue ) :
numberOfChars = len( codonValue )
# check to see if contains sets of threes
if len( codonValue ) % 3 != 0 :
return -1
# check to see if it contains the correct characters
for i in range(0, numberOfChars ) :
if codonValue[i] != 'a' :
if codonValue[i] != 'u' :
if codonValue[i] != 'c' :
if codonValue[i] != 'g' :
return -2
# populate an array with decimal versions of each codon in the input
codonNumbers = []
base10Value = 0
numberOfCodons = int(numberOfChars / 3 )
for i in range(0, numberOfCodons) :
charVal = codonValue[ 0 + (i*3) ] + codonValue[ 1 + (i*3) ] + codonValue[ 2 + (i*3) ]
val = 0
for j in codons :
if j == charVal :
codonNumbers.append( val )
break
val += 1
base10Value += ( pow( 64, numberOfCodons - i - 1 ) ) * codonNumbers[i]
return base10Value
def base10ToCodonNum ( number ) :
codonNumber = ''
hitZeroCount = 0
while( 1==1 ) :
val = number % 64
number = int( number / 64 )
codonNumber = codons[val] + codonNumber
if number == 0 :
if hitZeroCount > 0:
break
hitZeroCount += 1
return codonNumber
val_2011 = 'ccgcag'
val_unknown = 'cgagag'
print( base10ToCodonNum( codonNumToBase10( val_2011 ) ), '::', codonNumToBase10( val_2011 ) )
print( base10ToCodonNum( codonNumToBase10( val_unknown ) ), '::', codonNumToBase10( val_unknown ) )
编辑1:我得到的值是1499的ccgcag和1978的CGAGG。在
编辑2:base10tocodenum函数修复感谢Ashwini Chaudhary。在
您的代码确实可以在base-64之间进行转换。我怀疑你没有按照问题中密码子的顺序来定义密码子。在
根据你提供的密码子顺序:
'ccgcag' = codons.index('ccg') * 64 + codons.index('cag') = 23 * 64 + 27 = 1499
这在数学上是正确的,用你提供的替换。为了获得2011年,你必须输入
cggcag
-那么,你确定你是按照完全相同的顺序复制的吗?在我无法遵循您的代码,因此我进行了另一个实现,但我得到了相同的结果:
结果:
^{pr2}$输出:
^{pr2}$相关问题 更多 >
编程相关推荐