我正在编写一段代码,通过将序列号的各个组成部分与已知值列表进行比较,来测试序列号是否具有有效值以及格式是否正确。例如:

VALUES = [1, 2, 3, 4, 5]

serial = "013452345252345"

if int(serial[0:2]) in values:
    return True


在有效的情况下,前两个数字可以视为一个整数,但是在某些情况下,串行可能会作为完整的垃圾输入,因此我通过将我的所有值作为字符串来处理来处理所有有效情况,例如:

VALUES = ['01', '02', '03', '04', '05']

serial = "a;alskdjfadslkj"

if serial[0:2] in values:
    return True


这是正确的方法还是我可以做得更好或更聪明的事情?感谢您的帮助。

最佳答案

您所做的就是您应该做的。您目前唯一缺少的是循环浏览要检查的字段(尽管这取决于设置的字段长度):

def Serial_Checker(values,serial,field_length):
    serial_length = len(serial)
    cycler = field_length

    serial_valid = True

    while cycler < serial_length:
        if serial[cycler-field_length:cycler] in VALUES:
            cycler += field_length
        else:
            serial_valid = False
            break

    if serial_length%field_length <> 0: # % is the remainder operator
        serial_valid = False #In case there is leftover at the end of the serial

    return serial_valid

VALUES = ['01', '02', '03', '04', '05']
serial = "a;alskdjfadslkj"

Serial_Checker(VALUES,serial,2)


这应该从函数返回false。

我不知道有任何内置函数,但是如果格式必须具有所有数字,则可以始终使用“ isdigit”方法:

d = 'somestring'
d.isdigit()


如果整个字符串由数字组成,则最后一行将返回布尔值。

如果您需要更一般的解决方案,我可以根据需要添加更多。

关于python - 在Python中处理意外的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21619209/

10-12 00:14
查看更多