如何在Python中检查输入字符串是否包含特定的字母并且可以被3整除



我正在编写一个程序,应该检查是否:

  • 用户输入字符串包含特定单词
  • 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整除的CAGT的字母,则不会有无效输入。否则,程序将打印一条无效的输入消息,并提示用户重新输入

更新-我最终解决了它,但感谢您的回复。我最终使用了以下内容,如果它对任何都有帮助的话

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组成,根据允许的字母检查所有单个字符。这里的测试并没有检查所有这些字母是否都存在(因此,尽管没有TAGCAGC仍将通过有效测试(。最后,我给出了被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")

相关内容

  • 没有找到相关文章

最新更新