我正在尝试解决以下练习问题:
”“想象一下,您正在为库存系统编写软件, 一家商店。该软件的一部分需要检查以查看是否输入 产品代码有效。
如果满足以下所有条件,则产品代码有效 正确:
编写一个称为valid_product_code的函数。 valid_product_code 应该有一个参数,一个字符串。如果它应该返回True 该字符串是有效的产品代码,如果不是,则为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 True
和return False
分别更改为print(True)
和print(False)
语句)之后,{{1我曾经检查过的}}语句表明,所有小写字母都具有print
值,而数字和大写字母则具有预期的False
值。
我对3个外部True
语句没有任何问题,但是一旦我需要隔离小写字符,我以为每个循环就足够了,但是事实上这是一个函数意味着if
是过早地终止我的函数,并且不允许我实际表明整个字符串中甚至只有一个小写字母都应将整个字符串的值呈现为return
。我感觉有些遗漏,例如可能是我将False
语句放在错误的位置,还是我只是以错误的方式处理了这个问题?
请先帮助并感谢!
答案 0 :(得分:0)
您最里面的循环没有正确实现。目前,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