【问题标题】:Problem with my Python code: IndexError: string index out of range我的 Python 代码有问题:IndexError: string index out of range
【发布时间】:2020-11-10 03:54:28
【问题描述】:

最近我正在处理一个 python 挑战,我需要创建一个能够将 DNA 转录为 mRNA 的函数,但每次我运行代码时都会收到相同的错误消息:

如果 dna[y] == "A": IndexError: 字符串索引超出范围

谁能帮助我?下面是我的代码示例。

global y
y = 0
global rna
rna = ""
def dna_to_rna(dna):
    global y
    global rna
    for i in range(len(dna)):
        if dna[y] == "A":
            rna += "U"
        elif dna[y] == "T":
            rna += "A"
        elif dna[y] == "G":
            rna += "C"
        else:
            rna += "G"
        y += 1
    return rna  

【问题讨论】:

  • 欢迎来到 SO!你是如何定义变量dna的?它不在您发布的代码示例中。谢谢
  • 您的错误是告诉您dna[y] 不存在。 y 可能太大了。另外,使用global 也很奇怪。您遇到问题并且这里的人无法帮助您这一事实是一个很好的提示,不要使用global永远
  • 首先避免将变量命名为全局变量,这被认为是不好的编程习惯。
  • @smile 看起来变量dna是一个字符串,在函数中作为参数输入。
  • @RaiyanChowdhury 我知道使用 global 很奇怪,但我只是用这种方式定义了 thease 变量,这样我就不会遇到像 y 和 rna 变量被解释为局部变量这样的问题,但无论如何,我会尽量不要再次犯下这种不良做法。

标签: python loops bioinformatics index-error


【解决方案1】:

您有很多额外的变量,并且您的代码中不需要“全局”修饰符。我已经对您的代码进行了一些重新格式化,试试这个:

def dna_to_rna(dna: str) -> str:
  rna = ""
  for i in range(len(dna)):
      if dna[i] == "A":
          rna += "U"
      elif dna[i] == "T":
          rna += "A"
      elif dna[i] == "G":
          rna += "C"
      elif dna[i] == "C":
          rna += "G"
      else:
          return "Invalid Sequence!"
  return rna

【讨论】:

  • 感谢 Raiyan,代码运行良好!从现在开始,我将不再使用全局修饰符,并将尝试消除那些额外的变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 2023-02-22
  • 2018-02-08
  • 2014-10-20
相关资源
最近更新 更多