Python 3.6中DNA转RNA转录代码无法通过‘ACGTXXXCTTAA’测试
DNA到RNA转录代码的问题分析与修复
你的问题出在检测到无效字符后,依然会输出部分转换结果。我们来拆解一下:
当测试用例是ACGTXXXCTTAA时,循环遇到第一个X时,会打印Invalid Input然后break跳出循环,但循环结束后,代码还是会执行最后的print(new)——这时候new已经存了前面ACGT转换后的UGCA,所以最终输出会是:
Invalid Input UGCA
而题目要求的是只输出Invalid Input,不能有后面的部分结果。
修复方案
我们可以用一个标记变量来记录输入是否有效,只有在所有字符都验证通过的情况下,才输出转换后的RNA序列:
dna = input() new = "" is_valid = True # 标记输入是否有效 for i in dna: if i not in 'ATGC': print("Invalid Input") is_valid = False break # 执行转录逻辑 if i == 'A': new += 'U' elif i == 'C': new += 'G' elif i == 'T': new += 'A' else: new += 'C' # 只有输入有效时才输出结果 if is_valid: print(new)
或者你也可以用sys.exit()直接终止程序(需要导入sys模块),这样遇到无效字符后就不会执行后面的print(new)了:
import sys dna = input() new = "" for i in dna: if i not in 'ATGC': print("Invalid Input") sys.exit() # 直接退出程序,后续代码不再执行 if i == 'A': new += 'U' elif i == 'C': new += 'G' elif i == 'T': new += 'A' else: new += 'C' print(new)
两种方案都能解决问题:第一种更灵活(比如后续如果需要做其他处理),第二种更直接。
内容的提问来源于stack exchange,提问作者Bikramjeet Singh
相关产品推荐
相关产品推荐

