我试图解决一个rev问题,它要求检查代码是否有效。如果代码由code_letters
列表中的1个字母和一定范围内的数字组成,则该代码有效
code_letters = ["S", "B", "N", "T", "P"]
min_for_each_letter = [1, 3, 4, 0, 3] #inclusive
max_for_each_letter = [7, 9, 6, 7, 5] #inclusive
参数:
code_letters
是对代码字符串的第一个字母有效的代码字母列表min_for_each_letter
是一个列表,其中包含该字母后面每个数字的最小可能数字(包括)max_for_each_letter
是一个列表,其中包含该字母后面每个数字的最大可能数字(包括)例如,如果代码包含“S”,则其数字只能介于1和7之间(含1和7),或者如果代码包含“N”,则其数字只能介于4和6之间(含4和6)。
必须只有1个字母和至少1个数字,如果有多个数字,则所有数字都必须在字母范围内才能有效,否则无效
以下是我迄今为止编写的代码:
def is_a_valid_code(code):
code_letters = ["S", "B", "N", "T", "P"]
min_for_each_letter = [1, 3, 4, 0, 3] #inclusive
max_for_each_letter = [7, 9, 6, 7, 5] #inclusive
if code[0] not in code_letters:
return False
else:
x = code_letters.index(code[0])
for ele in code[1:]:
if ele != " ":
if ele.isdigit() == False or int(ele) < min_for_each_letter[x] or int(ele) > max_for_each_letter[x]:
return False
if not False:
return True
它适用于测试用例,例如:
is_a_valid_code('B747346')
is_a_valid_codeN('N 444 454')
is_a_valid_codeT('T 400 4854')
is_a_valid_codeS('S 444S454')
但在以下情况下失败:
is_a_valid_code('P ') # Should return False, not True
有没有办法解释这种情况?我认为有一个简单的修复,但是,ISalpHa()不考虑空白空间
在提供的最后一个示例中,
'P '
(失败),嵌套在for
循环中的if
语句将检查除P
之外的所有字符code[1:]
在这种情况下将是" "
(两个空格),因此if
条件的计算结果为False
,因此没有根据代码标准检查任何内容(另外,在函数的最后一行,
not False
将始终计算为True
,因此if
语句本身是多余的;相反,只return True
会更好。)我认为最好的方法是创建一个列表,其中包含第一个字符(
code[1:]
)后面每个字符的有效性,然后返回列表中所有元素是否都是True
并且列表不是空的(以便像'P '
这样的情况不会通过)根据提供的示例代码,进行了一些测试运行:
代码:
结果:
作为解决这个问题的另一种方法,您可以构造一个与您的需求相匹配的正则表达式,并针对每个输入代码进行测试
对于每个代码字母,我们制作一个正则表达式,看起来像
它要求代码是一个
S
,后跟至少一个1到7范围内的数字,还允许一些空格。然后,我们可以将所有这些代码部分放入一个完整的正则表达式中,根据输入值进行测试例如:
输出:
相关问题 更多 >
编程相关推荐