For循环在嵌套的ifs和函数中提前终止,因为返回

2024-03-29 08:57:05 发布

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

我试图解决以下练习问题:

“想象一下你正在为一个库存系统编写软件 一家商店。部分软件需要检查是否输入 产品代码有效。你知道吗

如果满足以下所有条件,则产品代码有效 正确:

  • 产品代码的长度是4的倍数。它可以 长度为4、8、12、16、20等字符。你知道吗
  • 产品代码中的每个字符都是大写 字符或数字。没有小写字母或标点符号 允许标记。你知道吗
  • 字符序列“A1”出现在 产品代码。你知道吗

编写一个名为valid\u product\u code的函数。有效的产品代码 应该有一个参数,一个字符串。如果 字符串是有效的产品代码,如果不是,则为False。“

def valid_product_code(code):
    if len(code)%4 == 0:
        if "A1" in code:
            if code.isalnum():
                for character in code:
                    #print(character) 
                    #print statement above when uncommented used to 
                    #check if the loop is actually running as intended
                    if character.isupper() or character.isdigit():
                        return True
                    else:
                        return False
            else:
                return False
        else:
            return False
    else:
        return False

练习题有几个测试串,其中包括:

print(valid_product_code("A12B44BP"))
print(valid_product_code("BFDSAUSA98932RWEFOEWA9FEAA1DSFSF"))
print(valid_product_code("A1BBD5"))
print(valid_product_code("BDD5664S"))
print(valid_product_code("66aBSaA1fdsv"))

我的代码适用于前四个示例,结果是True, True, False, False,但是最后一个应该是False,我得到了True。在尝试一些调试(因此在for循环中使用print(character)并将return Truereturn False分别更改为print(True)print(False)语句)之后,我用来检查的print语句表明小写字母都有False值,而数字和大写字母都有True值。你知道吗

我对3个外if语句没有任何问题,但是一旦我需要分离小写字符,我认为每个循环使用一个for就足够了,但是这是一个函数的事实意味着return过早地终止了我的函数,并且不允许我实际指示整个循环中甚至存在一个小写字母字符串应该将整个字符串的值呈现为False。我觉得有些东西不见了,比如我把我的return陈述放错地方了,或者我只是用错误的方式来回答这个问题?你知道吗

请提前帮助和感谢!你知道吗


Tags: 字符串代码falsetruereturnif产品code
1条回答
网友
1楼 · 发布于 2024-03-29 08:57:05

最内部的循环没有正确实现。目前,if character.isupper() or character.isdigit():一旦检测到前6个,就会返回True。你知道吗

您需要检查每个元素。这可以通过以下方式完成。我用注释#突出显示修改过的行

def valid_product_code(code):
    if len(code)%4 == 0:
        if "A1" in code:
            if code.isalnum():
                for character in code:
                    if not (character.isupper() or character.isdigit()): # < -
                        return False # <  
                return True # < -
            else:
                return False
        else:
            return False
    else:
        return False

print(valid_product_code("A12B44BP"))
print(valid_product_code("BFDSAUSA98932RWEFOEWA9FEAA1DSFSF"))
print(valid_product_code("A1BBD5"))
print(valid_product_code("BDD5664S"))
print(valid_product_code("66aBSaA1fdsv"))

True
True
False
False
False

或者,您可以将if语句组合起来,使代码更加紧凑

def valid_product_code(code):
    if len(code)%4 == 0 and "A1" in code and code.isalnum():
                for character in code:
                    if not (character.isupper() or character.isdigit()):
                        return False
                return True
    else:
        return False

相关问题 更多 >