Without regular expressions:
- Expanding on the original Code Only answer.
- Use the membership operator,
in
- Cretes a generator of
True or False values
- Use the built-in python function
all
- Checks the generator, if they are
all True, True is returned, otherwise False.
- Use a generator expression, e.g.
(base in bases for base in sequence)
bases = 'acgt'
sequence = (input('Input DNA sequence: ')).lower()
if all(base in bases for base in sequence):
print('Input is correct')
else:
print('Only allowed bases are A, T, C, G')
Output:
Input DNA sequence: atcgggggcccccttttaaaa
Input is correct
Input DNA sequence: atcgggggcccccttttaaaaf
Only allowed characters are A, T, C, G
Write a function:
- Considering the length of a DNA sequence, realistically, noone is going to type one in.
def check_sequence(sequence: str):
sequence = sequence.lower()
bases = 'acgt'
if all(base in bases for base in sequence):
print('Input is correct')
else:
print('Only allowed characters are A, T, C, G')
my_sequence = 'gcaatgcAttGtgaaagagccGcTaCaacctaaacGctgcacgtcacctagagtgtCttgcgggTgaggccctctcgAacagattacagtaccgttatc'
check_sequence(my_sequence)
>>> Input is correct
Function that returns the sequence if it's not correct:
- Use
zip to combine iterables
def check_sequence(sequence: str) -> list:
sequence = [base for base in sequence.lower()]
base_pairs = 'acgt'
matches = list(bases in base_pairs for bases in sequence)
sequence_check = list(zip(sequence, matches))
if all(matches):
print('Input is correct')
else:
print('Only allowed characters are A, T, C, G')
return sequence_check
Usage:
my_sequence = 'GcaatGcatfftgtgaaagAg'
verified_sequence = check_sequence(my_sequence)
print(verified_sequence)
# Output:
[('g', True),
('c', True),
('a', True),
('a', True),
('t', True),
('g', True),
('c', True),
('a', True),
('t', True),
('f', False),
('f', False),
('t', True),
('g', True),
('t', True),
('g', True),
('a', True),
('a', True),
('a', True),
('g', True),
('a', True),
('g', True)]
match()?