函数和if/elif语句总是首先返回if语句

2024-09-28 22:28:44 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我正在尝试创建一个程序,这个程序需要三个DNA碱基,然后给你免费的氨基酸。我能有效地将DNA转录成互补的RNA,但我的翻译功能不起作用。你知道吗

Here is my code: 
def basematch(base):
if base == "A":
    return "U"
elif base == "T":
    return "A"
elif base == "G":
    return "C"
elif base == "C":
    return "G"
else:
    return "invalid"




rawdna = raw_input("Enter a raw DNA sequence: ")
comp = list(rawdna)
length = len(comp)

n = 0


codonlist = []


while n + 1 <= length:
    final = comp[n]
    finalbase = basematch(final)
    codonlist.append(finalbase)
    n = n + 1


rawRNA = "".join(codonlist)

def translate(codon):
    if codon == "GCU" or "GCC" or "GCA" or "GCG":
       print 'Ala'
    elif codon == "UUU" or "UUC":
       print "Phe"
    elif codon == "UUA" or "UUG":
       print "Leu" 
    elif codon == "UGU" or "UGC": 
       print "Cys"
    elif codon == "UGA" or "UAA" or "UAG": 
       print "Stop"
    elif codon == "UGG" or "UAU" or "UAC": 
       print "Tyr"
    elif codon == "UCU" or "UCC" or "UCA" or "UCG":
       print "Ser"
    elif codon == "CUU" or "CUC" or "CUA" or "CUG":
       print "Leu"
    elif codon == "CCU" or "CCC" or "CCA" or "CCG":
       print "Pro"
    elif codon == "CAU" or "CAC":
       print "His"
    elif codon == "CAA" or "CAG":
       print "Gln"
    elif codon == "CGU" or "CGC" or "CGA" or "CGG":
       print "Arg"

translate(rawRNA) 

每当我翻译rawRNA时,它总是返回“Ala”。你知道吗

抱歉,代码太长了。谢谢你的帮助。你知道吗


Tags: or程序basereturnifdefdnaprint
3条回答

线路没有检查好。你知道吗

if codon == "GCU" or "GCC" or "GCA" or "GCG":

or并没有扩展到==;它将检查if "GCC":,它总是True,因此它结束于此。你知道吗

你误解了“或”在这里的作用。你知道吗

if codon == "GCU" or "GCC" or "GCA" or "GCG":

手段

if (codon == "GCU") or "GCC" or "GCA" or "GCG":

它总是正确的,因为“GCC”是一个非空字符串。你知道吗

你可能想要的是:

if codon in ["GCU", "GCC", "GCA", "GCG"]:

你的答案是if条件的正确形式:

if codon in ["GCU", "GCC", "GCA", "GCG"]:

尽管您可以缩短一些案例,但其中一个案例尤其重要(当然,假设输入序列是有效的):

if codon[:2] == "GC":

但我只想指出,如果您使用的是Python3.1或更高版本,有一种更简单的方法来完成基本翻译:

>>> import string
>>> s = 'GATTACA'
>>> s.translate(s.maketrans('ATGC','UACG'))
'CUAAUGU'

任何做你的(sequence to list, individual base translate appending to new list, new list to sequence with join)真正的细胞都会进化出快速的对抗它们的选择:-)

相关问题 更多 >