Я пытаюсь решить следующий практический вопрос:
"Представьте, что вы пишете программное обеспечение для системы инвентаризации для
магазин. Часть программного обеспечения должна проверить, чтобы увидеть, если введено
коды продуктов действительны.
Код продукта действителен, если выполнены все следующие условия
правда:
- Длина кода продукта кратна 4. Это может
длиной 4, 8, 12, 16, 20 и т. д.
- Каждый символ в коде продукта является заглавным
символ или цифра. Нет строчных букв или знаков препинания
оценки разрешены.
- Последовательность символов "A1" появляется где-то в
код продукта.
Написать функцию с именем 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
. После попытки некоторой отладки (отсюда print(character)
в цикле for и изменения операторов return True
и return False
на print(True)
и print(False)
соответственно) операторы print
, которые я использовал для проверки, указывали, что строчные буквы все имел значения False
, тогда как цифры и заглавные буквы имели значения True
, как и предполагалось.
У меня не было проблем с 3 внешними операторами if
, но как только мне нужно было изолировать строчные буквы, я подумал, что цикла for-each будет достаточно, но тот факт, что это функция означает, что return
завершает мою функцию преждевременно и не позволяя мне фактически указать, что присутствие даже единственной строчной буквы во всей строке должно отобразить значение всей строки как False
. Я чувствую, что чего-то не хватает, например, может быть, я помещаю свои return
утверждения в неправильное место, или я просто неправильно подошел к этому вопросу?
Пожалуйста, помогите и спасибо заранее!