如何检查有效的序列输入?

时间:2014-03-15 02:29:15

标签: python python-3.x

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 个答案:

答案 0 :(得分: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语句结束检查,或者您可以计算允许的无效字母数。

答案 1 :(得分:1)

sequence,一旦用户输入将是一个字符串,所以你需要遍历序列中的每个字符并使用in来验证接受的字符串中是否存在字符。 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.")

答案 2 :(得分: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"

答案 3 :(得分: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