Python循环未统计IP地址最后一段长度的问题排查
问题分析与解决
你的问题很典型——程序只在遇到非数字字符(也就是IP里的.)时才打印当前段的长度,但最后一段后面没有非数字字符,所以这段的长度根本没机会被输出!
我们来拆解一下你的代码逻辑:
- 遍历IP地址的每个字符,遇到数字就累加
segmentLength - 遇到非数字时,才会增加
segmentCount、打印当前段长度,然后重置segmentLength - 最后你虽然把
segmentCount加1来修正总段数,但完全漏掉了打印最后一段的长度
修正方案
只需要在循环结束后,额外检查并打印最后一段的长度就行(毕竟最后一段肯定有数字,不然输入也不是合法IP了)。修改后的代码如下:
address = input("Please enter an IP address ") segmentCount = 0 segmentLength = 0 for char in address: if char.isdigit(): segmentLength += 1 else: segmentCount += 1 print("segmentLength of segment #", segmentCount, "is {}".format(segmentLength)) segmentLength = 0 # 新增:打印最后一段的长度 if segmentLength > 0: segmentCount += 1 print("segmentLength of segment #", segmentCount, "is {}".format(segmentLength)) print("segmentCount is {}".format(segmentCount))
这样测试输入Please enter an IP address 1012.321.32.21时,就能输出你想要的结果了:
segmentLength of segment # 1 is 4
segmentLength of segment # 2 is 3
segmentLength of segment # 3 is 2
segmentLength of segment # 4 is 2
segmentCount is 4
另外提个小优化:用str.isdigit()替代字符是否在数字字符串里的判断,代码会更简洁易读~
内容的提问来源于stack exchange,提问作者Troy
相关产品推荐
相关产品推荐

