我正在尝试解决DNA到RNA转录问题,但我的代码无法通过此测试用例:ACGTXXXCTTAA
转录应如下:
G --> C
C --> G
T --> A
A --> U
这是我的代码:
dna = input()
new = ""
for i in dna:
if i not in 'ATGC':
print("Invalid Input")
break
if i == 'A':
new += 'U'
elif i == 'C':
new += 'G'
elif i == 'T':
new += 'A'
else:
new += 'C'
print(new)
此代码通过除上述测试之外的所有测试。正确的输出应该是:
Invalid Input
我的代码输出:
Invalid Input
UGCA
我尝试了很多迭代,但我无法摆脱UGCA
。即使我使用break
在任何Invalid Input
的情况下离开循环,代码也能够在ACGT
之前转录XXX
并在应该输出时打印结果Invalid Input
。
有人能看到我错过的东西吗?
答案 0 :(得分:5)
您始终使用print("Invalid Input")
打印新内容,只需将新值更改为“无效输入”即可。并打印。这应该可以解决你的问题!
dna = input()
new = ""
for i in dna:
if i not in 'ATGC':
new = "Invalid Input"
break
if i == 'A':
new += 'U'
elif i == 'C':
new += 'G'
elif i == 'T':
new += 'A'
else:
new += 'C'
print(new)
答案 1 :(得分:4)
这是一个很好的问题,因为它一次引入了很多概念!直接问题是,即使您抛出Invalid Input
错误,仍然会打印new
这是部分转录的序列。要解决这个问题,您可以让错误处理代码抛出异常,或者只是将结果空白。我可能会把它变成一个函数并抛出异常。
def dna_to_rna(dna):
acc = []
for ch in dna:
if ch not in 'ATGC':
raise ValueError("Invalid Input")
if ch == 'A':
acc.append('U')
# ... and etc for each alternation
return ''.join(acc) # return the correct complete sequence
# only after all characters are processed
try:
result = dna_to_rna(whatever_sequence)
except ValueError as e:
print(e)
然而,这也是使用字典进行查找的一个很好的例子,而不是一个很长的if/elif/else
块
mapping = {'A': 'U',
'C': 'G',
'T', 'A',
'G', 'C'}
try:
result = ''.join([mapping.get(ch) for ch in dna])
except TypeError:
# if any member of `dna` is not ATCG, it will try to `''.join` over
# a None value, which throws a TypeError
print("Invalid Input")
else:
print(result)
答案 2 :(得分:2)
为了简洁和清晰,您可以尝试这样的事情
DNA_TO_RNA_MAP = {'G': 'C', 'C': 'G', 'T': 'A', 'A': 'U'}
dna = input()
if any(base not in DNA_TO_RNA_MAP.keys() for base in dna):
print('Invalid Input')
else:
print(''.join(DNA_TO_RNA_MAP[base] for base in dna))
答案 3 :(得分:1)
new = ''
dna = input()
for i in dna:
if i not in "GCTA":
print('Invalid Input')
break
else:
for j in dna:
if j == 'G':
new += 'C'
elif j == 'C':
new +='G'
elif j == 'T':
new +='A'
elif j == 'A':
new +='U'
else:
print("Invalid Input")
print(new)
答案 4 :(得分:0)
b=input()
a="GCTA"
c="CGAU"
try:print(''.join([c[a.index(i)]for i in b]))
except:print("Invalid Input")