为什么我的新拆分数组元素被视为非入门值



我的问题是关于python3处理某些数组元素的方式。

这是我的代码:

def isIPv4(inputStr):
    inputStr.split('.') #splits input into array elements (no periods)
    val = []
    for i in inputStr:
        if not i.isdigit():       #if the element is not a digit (valid to convert to INT).
            return False
        if int(i) >=0 and int(i)<=255:    #element value between 0 and 255.
            val.append(i)
        else:
            return False
        return len(val) == 4              #array has 4 elements ^^

代码应该让我知道输入是否是IPv4地址,含义为0到255之间的数字,按周期隔开。返回真或错误。

有效的输入:

inputStr: "1.1.1.1a"
inputStr: "0..1.0"

对于这两者,我的代码正确返回false。

不起作用的输入:

inputStr: "172.16.254.1"
inputStr: "0.254.255.0"

为此,我的代码也返回false,而它应该返回true。

您可以看到,该程序可以正确地处理点分离值的分裂,但是,即使" 1a"被正确抛出为非入口,也抛出了172'。

我意识到" 0"one_answers" 172"都是字符串,所以我应该知道python3模块如何处理这些数据的一些东西?

inputStr.split('.')返回列表。您完全忽略了该列表。inputStr本身是一个不变的字符串,不更改

因此, inputStr保留原始字符串,如果每个个体字符都是数字,则您正在测试。对于.字符而失败。

您需要存储str.split()调用的结果并对以下测试:

def isIPv4(inputStr):
    parts = inputStr.split('.')
    for part in parts:
        if not part.isdigit():
            return False
        if not (0 <= int(part) <= 255):
            return False
    return len(parts) == 4

请注意,您也不必构建新的vals列表;只需测试拆分结果是否正确。

最新更新