如何检查有效的序列输入?
import re
def check_input():
while True:
try:
sequence = raw_input("Please input:")
if sequence = [a,t,c,g]: # checking for valid input
continue
else:
print("invalid input, sequence coule only contain the "
"following letters (a,t,c,g)"):
check_input()
我基本上想让这个脚本检查用户输入的内容,看看里面是否只包含这四个字母(a、t、c、g)。如果用户输入了其他字母,就打印第二条信息,并提示用户重新输入。我看到有类似的问题,也试着根据那些帖子修改我的脚本,但在if < sequence
的位置还是出现了无效语法错误。有没有人知道这里出什么问题了?
4 个回答
1
你的函数需要检查并告诉用户结果是对还是错:
def check_input(word):
result = True
for letter in sequene:
if letter in 'atcg':
continue
else:
result = False
break
return result
check_input('atgc')
错误信息:
if check_input('agct'):
continue
else:
print "error message"
1
用户输入的sequence
会是一个字符串,所以你需要逐个检查这个字符串里的每个字符,看看这些字符是否在你允许的字符列表中。需要注意的是,Python在比较字符串时是区分大小写的,也就是说你输入的字符的大小写必须和你预期的字符串一致。我根据你提供的示例输入使用了大写字母。
def check_input():
sequence = input("Please input:")
sequence.upper()
for letter in sequence:
if letter in 'ATCG':
continue
else:
print("invalid input, sequence could only contain the
following letters: a, t, c or g.")
1
你也可以使用 filter
命令:
def checkInp():
seq = raw_input("Please input sequence:")
if not filter(lambda m: m not in 'ATGC', seq) == '':
print 'Invalid input characters in sequence: ' + filter(lambda m: m not in 'ATGC', seq)
print 'Pleas'
check_input()
else: return seq
2
你需要逐个检查输入中的每个字母,看看它是否在允许的字母集合里,就像这样:
sequence = raw_input("Please input:")
for letter in sequence:
if letter not in "atcg":
print("invalid input, sequence coule only contain the following letters (a,t,c,g)")
当你发现这个字母序列不合法时,你可以选择在打印之后用一个 break
语句来结束检查,或者你也可以统计一下允许多少个不合法的字母。