Python字典似乎是正确的,但不起作用

2024-06-01 00:01:51 发布

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

我目前正在尝试编写一个基本的Python字典,在其中输入一个RNA代码,它会给出相应的氨基酸。一切似乎都很好,直到我输入“UCU”、“UCC”、“UCA”、“UCG”。为什么它不起作用?有人能找出问题吗

以下是实际代码:

while True:
  n = 3
  xdict = {
      "Phenylalanine": ["UUU", "UUC"],
      "Leucine": ["UUA", "CUU", "CUC", "CUA", "CUG", "UUG"],
      "Isoleucine": ["AUU", "AUC", "AUA"],
      "Methionine": ["AUG"],
      "Valine": ["GUU", "GUC", "GUA", "GUG"],
      "Serine": ["UCU", "UCC", "UCA", "UCG"],
      "Proline": ["CCU", "CCC", "CCA", "CCG"],
      "Threonine": ["ACU", "ACC", "ACA", "ACG"],
      "Alanine": ["GCU", "GCC", "GCA", "GCG"],
      "Tyrosine": ["UAU", "UAC"],
      "Histidine": ["CAU", "CAC"],
      "Glutamine": ["CAA", "CAG"],
      "Asparagine": ["AAU", "AAC"],
      "Lysine": ["AAA", "AAG"],
      "Asparatic Acid": ["GAU", "GAC"],
      "Glutamic Acid": ["GAA", "GAG"],
      "Cysteine": ["UGU", "UGC"],
      "Trytophan": ["UGG"],
      "Arginine": ["CGU", "CGC", "CGA", "CGG", "AGG", "AGA"],
      "Serine": ["AGU", "AGC"],
      "Glycine": ["GGU", "GGC", "GGA", "GGG"]}
  lookup_dict = {k: key for key, values in xdict.items() for k in values}
  a = input("Please enter your RNA sequence: ")
  a = a.upper()
  print("The messenger RNA strand is:", a)
  b = len(a)
  val = ''
  if b % 3 == 0:
    for k in (a[i:i + n] for i in range(0, len(a), n)):
      val += lookup_dict[k] + ' '
    val += " "
  elif b % 3 != 0:
    print("Try again.", end = "")
  val = val.replace("  ", "")
  print("Your amino acids chain is:", val)

以下是我输入CCCCGGUCA后的输出

Please enter your RNA sequence: cccccgggguca
The messenger RNA strand is: CCCCCGGGGUCA
Traceback (most recent call last):
  File "program.py", line 33, in <module>
    val += lookup_dict[k] + ' '
KeyError: 'UCA'

谢谢大家,我希望其他人也能从我的错误中吸取教训


Tags: 代码inforisvallookupuccdict
1条回答
网友
1楼 · 发布于 2024-06-01 00:01:51

您可以将代码简化为以下内容

def get_amino_acid(rna):
    xdict = {
      "Phenylalanine": ["UUU", "UUC"],
      "Leucine": ["UUA", "CUU", "CUC", "CUA", "CUG", "UUG"],
      "Isoleucine": ["AUU", "AUC", "AUA"],
      "Methionine": ["AUG"],
      "Valine": ["GUU", "GUC", "GUA", "GUG"],
      "Serine": ["UCU", "UCC", "UCA", "UCG"],
      "Proline": ["CCU", "CCC", "CCA", "CCG"],
      "Threonine": ["ACU", "ACC", "ACA", "ACG"],
      "Alanine": ["GCU", "GCC", "GCA", "GCG"],
      "Tyrosine": ["UAU", "UAC"],
      "Histidine": ["CAU", "CAC"],
      "Glutamine": ["CAA", "CAG"],
      "Asparagine": ["AAU", "AAC"],
      "Lysine": ["AAA", "AAG"],
      "Asparatic Acid": ["GAU", "GAC"],
      "Glutamic Acid": ["GAA", "GAG"],
      "Cysteine": ["UGU", "UGC"],
      "Trytophan": ["UGG"],
      "Arginine": ["CGU", "CGC", "CGA", "CGG", "AGG", "AGA"],
      "Glycine": ["GGU", "GGC", "GGA", "GGG"]
    }

    return [key for key, value in xdict.items() if rna in value]

然后它将处理没有氨基酸包含rna的情况

>>> get_amino_acid('UCU')
[]
>>> get_amino_acid('AGU')
['Serine']
>>> get_amino_acid('CAC')
['Histidine']

正如@Carcigenicate所指出的,您还有一个可以删除的"Serine"

相关问题 更多 >