Python 3:如何使";Else";语句仅在所有";if";语句均为真的情况下才适用?
问题描述
抱歉,这里是初学者。尝试编写此程序来扫描特定的字母组合,如果没有找到,则返回"Else"语句。但是,我不知道如何让"Else"语句仅在所有"if"语句都返回false时才适用。以下是我的代码:
class color:
BOLD = '33[1m'
END = '33[0m'
GREEN = '33[92m'
print("Welcome to the Sequence Scanner")
print(" ") ## just putting a space between the welcome message and the input box
seq = input("Provide your nucleotide sequence here: ")
def scan():
if 'aataaa' in scan():
print('The trouble sequence, Canonical Poly-A Signal, is present')
if 'aatgga' in scan():
print('The trouble sequence, Pea Poly-A Signal, is present')
### the same format for the previous if statements is repeated for different sequences
else:
print(color.GREEN + 'No trouble sequences are present' + color.END)
scan(seq)
现在,只要最后一条"if"语句为假,它就会打印"Else"语句。所以我假设我需要这样做,这样它不仅适用于最后一个"if"语句,而且我已经尝试了不同的缩进,它对我来说就是不起作用。
我知道这可能是一个非常愚蠢的问题,所以我提前向您道歉。此外,如果有任何其他我应该做/知道的事情来提高代码的效率,如果您能为我提供相关的参考资料,那就太棒了!谢谢你的帮助,我真的很感激。
如果您真的很无聊并想帮我解决其他问题:有没有办法让函数打印输入序列,并突出显示"故障序列"(如红色或其他颜色)?那太棒了,但以我目前的编码经验,似乎太难做到这一点了。解决方案
您不能有多个if
语句和一个else
挡路并让它们一起工作。每个if
部分开始一个独立的独立语句,因此第一个if
是一个语句,然后if...else
是另一个独立于第一个语句的语句。第一个if
中发生了什么并不重要,第二个if
中发生了什么并不重要。
如果希望第二个和第一个if
测试一起工作,则需要改用elif
;这样就形成了一个包含额外测试的完整if
语句:
if 'aataaa' in scan(): # if this one doesn't match
# ...
elif 'aatgga' in scan(): # only then test this one
# ...
else: # and if either failed then go here
# ...
elif
与else
类似,是单个if
语句的一部分。您可以根据需要添加更多elif
部件,然后按顺序尝试每个测试,直到一个测试通过或elif
测试用完,此时如果没有匹配的else
部件就会执行。
参见if
statement documentation:
[
if
语句]通过逐个评估表达式,直到发现一个表达式为真[.],从而精确选择一个套件;然后执行该套件(并且不执行或评估if
语句的任何其他部分)。如果所有表达式都为False,则执行else
子句套件(如果存在)。
语法显示,单个if
语句可以包含一个if
部分、任意数量的elif
部分(( ... )*
表示0个或更多)和可选的else
部分([...]
表示可选):
if_stmt ::= "if" expression ":" suite ( "elif" expression ":" suite )* ["else" ":" suite]
另一方面,如果要执行所有测试,如果不匹配则执行单独的挡路,则需要使用循环;设置标志以指示没有匹配的测试,或者保留计数等,并在结束时测试标志或计数:
def scan(seq):
tests = [
('aataaa', 'The trouble sequence, Canonical Poly-A Signal, is present'),
('aatgga', 'The trouble sequence, Pea Poly-A Signal, is present'),
# more tests
]
found_match = False
for value, message in tests:
if value in seq:
print(message)
found_match = True
if not found_match:
print(color.GREEN + 'No trouble sequences are present' + color.END)
相关文章