我正在尝试创建一个函数,它将接受DNA字符串,然后补充它们(即如果A,给T,如果G,给C [反之亦然])。
到目前为止,我有这段代码:
def Complement(DNA):
DNA = input("Enter your DNA string:")
if DNA == 'A':
result = 'T'
elif DNA == 'T':
result = 'A'
elif DNA == 'G':
result = 'C'
else:
result = 'G'
return (result)
但是,python正在拿起4位数字'字符串作为' else'并导致G作为输出。如何更改此代码,以便任何人都可以输入随机字母/大小的DNA字符串,该函数将补充每个字母? 如果您在DNA字符串中只有一个字母并非真有帮助,则此代码有效:/
感谢
答案 0 :(得分:9)
Python string translate method就是针对这类问题而设计的:
>>> import string
>>> xlat = string.maketrans('atgcATGC', 'tacgTACG')
>>> 'gattaca'.translate(xlat)
'ctaatgt'
xlat 变量是一个转换表。 str.translate()方法接受一个字符串并应用转换表。
答案 1 :(得分:3)
尝试一下:
def complement():
# read the DNA sequence from stdin
dna = input("Enter your DNA string:")
# start with an empty result
result = ""
# iterate over each character of the sequence, and
# add the corresponding character to the result
for character in dna:
if character == "A":
result += "T"
elif character == "T":
result += "A"
elif character == "G":
result += "C"
elif character == "C":
result += "G"
return result
答案 2 :(得分:2)
执行此操作的简单方法将使用词典。
此外,这是非区分大小写,因为我在循环之前调用 .upper()字符串函数。
di = {
"A":"T",
"T":"A",
"G":"C",
"C":"G"
}
def Complement(DNA):
result = ""
for char in DNA.upper():
result += di[char]
return (result)
print(Complement("ATGC"))
print(Complement(input("Enter your DNA string: ")))
答案 3 :(得分:2)
你需要遍历字符串DNA来比较每个字符。在您的情况下,您将整个字符串DNA与单个字符进行比较。
DNA = input("Enter your DNA string:")
for i in DNA:
if i == 'A':
result = 'T'
elif i == 'T':
result = 'A'
elif i == 'G':
result = 'C'
else:
result = 'G'
您可能希望将结果存储在某处,而不是覆盖结果的值,您可以将其附加到结果
def Complement(DNA):
result = ""
for i in DNA:
if i == 'A':
result = result + 'T'
elif i == 'T':
result =result + 'A'
elif i == 'G':
result = result + 'C'
else:
result = result + 'G'
return (result)
答案 4 :(得分:0)
这样的东西可以让你选择任意长度的字符串:
def Complement():
print("Enter your DNA string: ")
DNA = str(input())
result = ''
for i in DNA:
if i == 'A':
result = result + 'T'
elif i == 'T':
result = result + 'A'
elif i == 'G':
result = result + 'C'
else:
result = result + 'G'
return result