Python密码子转氨基酸程序elif条件不生效 仅输出Phe_
问题根因
所有分支的条件判断写法错误,是程序输出异常的核心原因:
Python的or运算符会对两侧表达式独立计算布尔值,你写的if(codon_sequence[i]=="UUU" or "UUC" or "TTT" or "TTC")并不会判断密码子是否匹配四个值中的任意一个,实际执行逻辑是先算codon_sequence[i] == "UUU"的布尔结果,再依次和后面的字符串"UUC"、"TTT"、"TTC"做或运算。
而Python中非空字符串的布尔值恒为True,所以不管第一个等式判断结果是什么,只要走到or "UUC"这一步,整个if条件的结果就固定为True,程序永远会进入第一个分支输出Phe_,后续所有elif分支根本没有执行机会。
修复方案
不要用冗长的or拼接判断,直接用in关键字判断密码子是否在对应氨基酸的密码子元组里,写法简洁还不会出错。修复后的完整代码如下:
codon_sequence = [] print("Enter no. of codons you want") n = int(input()) for i in range(n): codon = str(input()).strip() # 过滤输入时误带的首尾空格 codon_sequence.append(codon) print(codon_sequence) # 直接遍历列表元素比通过索引访问更简洁 for codon in codon_sequence: if codon in ("UUU", "UUC", "TTT", "TTC"): print("Phe_") elif codon in ("UUA", "UUG", "CUU", "CUC", "CUG", "CUA", "TTA", "TTG", "CTT", "CTC", "CTG", "CTA"): print("Leu_") elif codon in ("UCU", "UCC", "UCG", "UCA", "AGU", "AGC", "TCT", "TCC", "TCG", "TCA", "AGT", "AGC"): print("Ser_") elif codon in ("UAU", "UAC", "TAT", "TAC"): print("Tyr_") elif codon in ("UGU", "UGC", "TGT", "TGC"): print("Cys_") elif codon in ("UGG", "TGG"): print("Trp_") elif codon in ("CCU", "CCC", "CCA", "CCG", "CCT"): print("Pro_") elif codon in ("CGU", "CGC", "CGA", "CGG", "AGA", "AGG", "CGT"): print("Arg_") elif codon in ("CAU", "CAC", "CAT"): print("His_") elif codon in ("CAA", "CAG"): print("Gln_") elif codon in ("AUU", "AUC", "AUA", "ATT", "ATC", "ATA"): print("Ile_") elif codon == "AUG": print("Met_") elif codon in ("ACU", "ACC", "ACA", "ACG", "ACT"): print("Thr_") elif codon in ("GUU", "GUC", "GUA", "GUG", "GTT", "GTC", "GTA", "GTG"): print("Val_") elif codon in ("GCU", "GCC", "GCA", "GCG", "GCT"): print("Ala_") elif codon in ("GGU", "GGC", "GGA", "GGG", "GGT"): print("Gly_") elif codon in ("GAU", "GAC", "GAT"): print("Asp_") elif codon in ("GAA", "GAG"): print("Glu_") elif codon in ("AAU", "AAC", "AAT"): print("Asn_") elif codon in ("AAA", "AAG"): print("Lys_") else: print("Stop_")
内容的提问来源于stack exchange,提问作者saptarshi
相关产品推荐
相关产品推荐

