为什么我的新拆分数组元素被视为非整数值?
Why is my new split array element being taken as a non-int value?
我的问题是关于 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 之间的数字,以句点分隔。 Returns判断对错。
有效的输入:
inputStr: "1.1.1.1a"
inputStr: "0..1.0"
对于两者,我的代码正确 returns False。
无效的输入:
inputStr: "172.16.254.1"
inputStr: "0.254.255.0"
对于这些,我的代码也 returns False,而它应该 return True。
如您所见,该程序正确处理了点分隔值的拆分,但是,即使“1a”被正确地作为非整数抛出,“0”和“172”也被正确地抛出抛出。
我知道 '0' 和 '172' 都是字符串,所以我应该了解 Python3 模块如何处理这些数据吗?
inputStr.split('.')
returns 一个列表。你完全忽略了那个列表。 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
列表;只是测试拆分结果是否是正确的长度。
我的问题是关于 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 之间的数字,以句点分隔。 Returns判断对错。
有效的输入:
inputStr: "1.1.1.1a"
inputStr: "0..1.0"
对于两者,我的代码正确 returns False。
无效的输入:
inputStr: "172.16.254.1"
inputStr: "0.254.255.0"
对于这些,我的代码也 returns False,而它应该 return True。
如您所见,该程序正确处理了点分隔值的拆分,但是,即使“1a”被正确地作为非整数抛出,“0”和“172”也被正确地抛出抛出。
我知道 '0' 和 '172' 都是字符串,所以我应该了解 Python3 模块如何处理这些数据吗?
inputStr.split('.')
returns 一个列表。你完全忽略了那个列表。 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
列表;只是测试拆分结果是否是正确的长度。