python - 为什么我的新分割数组元素被视为非 int 值?

标签 python arrays python-3.x int digits

我的问题是关于 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 之间的数字,以句点分隔。返回 True 或 False。

有效的输入:

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

对于这两种情况,我的代码都正确返回 False。

无效的输入:

inputStr: "172.16.254.1"
inputStr: "0.254.255.0"

对于这些,我的代码也返回 False,而它应该返回 True。

正如您所看到的,程序正确地处理了点分隔值的分割,但是,即使“1a”被正确地作为非整数抛出,“0”和“172”也被抛出。

我意识到“0”和“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 列表;只需测试分割结果是否是正确的长度即可。

关于python - 为什么我的新分割数组元素被视为非 int 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46161924/

相关文章:

javascript - 获取对象内数组中的总对象数

python selenium xpath 解决方案

python win32 com 关闭itunes

Python - 获取调用函数的完整文件路径?

python - 元类和何时/如何调用函数

button - Python3 : How to dynamically resize button text in tkinter/ttk?

python - 为什么即使在关闭临时文件后我仍然可以写入和读取它?

python - 如何返回符合 driver.find_element_by_partial_link_text 标准的最后一个元素?

使用 vector 的 C++ 3D 数组声明

arrays - 从值范围内的 influxdb 记录中选择