我正在编写一个程序,应该检查是否:
- 用户输入字符串包含特定单词
- OR包含4个指定字符,可被3整除
我可以进行特定的字符串检查和可分割性检查,但似乎无法进行字母检查。
validationcheck = False
while not validationcheck:
InputSequence = input("Input: ")
if (InputSequence == 'EXAMPLE' or len(InputSequence) % 3 == 0 and 'C', 'A', 'G', 'T', 't', 'g', 'a','c' in InputSequence):
validationcheck = True
else:
print("Invalid input")
InputSequence = input("Input: ")
我想要的输出是,如果用户键入EXAMPLE
,或者他们键入一系列包含可被3整除的C
、A
、G
、T
的字母,则不会有无效输入。否则,程序将打印一条无效的输入消息,并提示用户重新输入
更新-我最终解决了它,但感谢您的回复。我最终使用了以下内容,如果它对任何都有帮助的话
validationcheck = False
while not validationcheck:
InputSequence = input("Input: ")
stringToCheck = InputSequence
found = re.search("[CAGT]", stringToCheck)
if len(InputSequence) % 3 == 0 and found:
validationcheck = True
我建议分两步完成:首先检查行长度,如果是EXAMPLE
,然后应该检查行中是否有陌生人字符。要查找行中的字符,可以使用for循环迭代字符:
validationcheck = False
while not validationcheck:
InputSequence = input("Input: ")
if (InputSequence == 'EXAMPLE' or len(InputSequence) % 3):
# check for single chars inside string
input_ok = True
for ch in InputSequence:
# check if character is not in given options
if (ch not in [...]): # to be completed
input_ok = False
if (input_ok):
validationcheck = True
else:
print("Invalid input")
InputSequence = input("Input: ")
一个简单的注意事项:对于python标签名称,使用类似于input_sequence
的snake大小写,而不是InputSequence
。
您可以使用any()
检查是否有任何字母(用于字符串中的字母(在InputSequence
中作为小写str.lower()
validationcheck = False
while not validationcheck:
InputSequence = input("Input: ")
if (InputSequence == 'EXAMPLE':
validationcheck = True
elif not len(InputSequence) % 3 and any(i in InputSequence.lower() for i in 'tgac'):
validationcheck = True
else:
print("Invalid input")
InputSequence = input("Input: ")
您还可以使用regex 搜索输入是否仅包含字符"t"、"g"、"a"或"c">
import re
validationcheck = False
while not validationcheck:
InputSequence = input("Input: ")
if (InputSequence == 'EXAMPLE':
validationcheck = True
elif not len(InputSequence) % 3 and re.fullmatch(r'[tgac]+[rn]*', InputSequence.lower()):
validationcheck = True
else:
print("Invalid input")
InputSequence = input("Input: ")
正则表达式CCD_;"t"或"g"或"a"或"c"中的一个为1或无穷大倍,然后换行(可以是"\n"、"\r"、"\r\n"(为0或无穷大倍数"。有关regex 的更多信息
在我看来,您需要确保在第二个选项中,字符串仅由字符CAGT
组成。当然,这是一个不同的要求——良好编程的一部分是识别和消除规范中的歧义。
在此基础上,将关键字选项作为一个单独的if
语句进行更干净的处理,使用in
根据关键字列表检查输入。下面的代码使用all((来确保非关键字条目仅由列表理解中的字符CAGT
组成,根据允许的字母检查所有单个字符。这里的测试并没有检查所有这些字母是否都存在(因此,尽管没有T
,AGCAGC
仍将通过有效测试(。最后,我给出了被3整除的错误信息,因为在查看其他好的条目时,这可能更难发现。
您不需要第二个输入语句,因为循环会让您返回到无效输入的语句。
ExactKeywords = ['DOTHIS','DOTHAT']
validationcheck = False
while not validationcheck:
InputSequence = input("Input: ").upper()
if ( InputSequence in ExactKeywords ):
validationcheck = True
elif all(ch in 'CAGT' for ch in InputSequence):
if len(InputSequence)%3 == 0:
validationcheck = True
else:
print("Input string length not a multiple of 3")
else:
print("Invalid input")