Wilson Mak
Wilson Mak

Reputation: 147

How to check for valid sequence input?

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()

I basically want the script to check the user's input whether it contains only these four letters (a,t,c,g). If their input contains anything other than that four letters, it could print that second statement and prompt the user to input again. I saw there are similar questions and I already tried to change my script according to those posts but it still gives me the invalid syntax error at the if < sequence position. Anyone knows what's wrong here?

Upvotes: 0

Views: 3440

Answers (4)

Brandon Taylor
Brandon Taylor

Reputation: 34603

sequence, once input by the user will be a string, so you would need to iterate over each character in the sequence and use in to verify the existence of the character in the accepted characters string. String comparisons in Python are also case sensitive, so you need to match the case of the input to your expected string. I've used uppercase based on your sample input.

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.")

Upvotes: 1

ssm
ssm

Reputation: 5383

You could also use the filter command:

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

Upvotes: 1

Emin Mastizada
Emin Mastizada

Reputation: 1405

Your function must check and give user whether True or False:

def check_input(word):
  result = True
  for letter in sequene:
    if letter in 'atcg':
       continue
    else:
       result = False
       break
  return result

check_input('atgc')

Error Message:

if check_input('agct'):
  continue
else:
  print "error message"

Upvotes: 1

Alex Bliskovsky
Alex Bliskovsky

Reputation: 6323

You need to iterate over every letter in the input and check if it is in the set of allowed letters, like this:

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)")

When you discover that the sequence is invalid, you could choose to end the check by using a break statement after the print, or you could count how many invalid letters are allowed.

Upvotes: 2

Related Questions