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

2024-09-28 22:20:25 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  • 用户输入字符串包含特定的单词
  • 或包含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

Tags: and字符串用户程序falseinputlenif
3条回答

您可以使用^{}检查是否有任何字母(对于字符串中的字母)以InputSequence小写^{}的形式出现

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

您还可以使用正则表达式搜索输入是否仅包含字符“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]+[\r\n]*', InputSequence.lower()):
        validationcheck = True
   else:
        print("Invalid input")
        InputSequence = input("Input: ")

正则表达式[tgac]+[\r\n]*表示“t'或'g'或'a'或'c'中的一个1或无限次,然后行分隔(可以是'\n','\r','\r\n')0或无限次”more about regex

在我看来,您需要确保在第二个选项中,字符串仅由字符组成。当然,这是一个不同的要求——好的编程的一部分是识别和消除规范中的歧义

在此基础上,关键字选项作为一个单独的if语句处理得更干净,使用in根据关键字列表检查输入。下面的代码使用all( )确保列表中的非关键字条目仅由字符CAGT组成,并根据允许的字母检查所有单个字符。这里的测试不会检查所有这些字母是否都存在(因此AGCAGC将通过有效测试,尽管没有T)。最后,我给出了3的可除性,这是它自己的错误信息,因为在查看其他良好条目时,这可能更难发现

您不需要第二条input语句,因为循环将使您返回到无效输入的语句

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

我建议分两步进行:首先检查行长度,如果是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而不是InputSequence的蛇形大小写

相关问题 更多 >