目标功能
基础功能
1.输入正确格式ip正常运行 √
2.3次输入机会 √
3.255掩码判断 √
4.两位数掩码判断 √
后续完善
1.排除输入格式不满足xxx.xxx.xxx.xxx √
2.排除输入空值 √
3.排除输入负数和字符 √
4.排除输入参数大于255 or 输入两位数掩码大于32 √
5.排除非法地址(0.123.0.0,0.0.0.1) √
先思考大概结构,完善思路,然后开始逐步编写
1.根据第二个 三次机会 基本功能,基本可以先确定最外层循环
for i in range(1,4):#外层 3次机会 循环
if 可能1:
print(结果1)
continue
if 可能2:
print(结果2)
continue
if.......
2.使用input取值
print('第',i,'/3 次')
yi=input('请输入第一个ip(XXX.XXX.XXX.XXX 0<=XXX<=255):')
er=input('请输入第二个ip(XXX.XXX.XXX.XXX 0<=XXX<=255):')
ym=input('请输入子网掩码(8-32 & 255.xxx,xxx,xxx):')
2.首先判断输入参数格式合法性
if len(yi.split('.'))==4 and len(er.split('.'))==4 : #判断格式合法性
pass
else:
print("ip地址输入格式有误,请重新输入")
continue
使用split拆分获取的参数,判断是否有三个' . '(四数三点,1.2.3.4)。错误会continue跳出本次循环(最外层 3次机会)
即使输入字符或数字,不输入‘ . ’,长度会为0,也不满足 len()==4
2.排除空值
if len(yi.split('.')[0])==0 or len(yi.split('.')[1])==0 or len(yi.split('.')[2])==0 or len(yi.split('.')[3])==0: #排除空值
print("第一个ip地址输入的数值不能有空值,请重新输入")
continue
if len(er.split('.')[0])==0 or len(er.split('.')[1])==0 or len(er.split('.')[2])==0 or len(er.split('.')[3])==0:
print("第二个ip地址输入的数值不能有空值,请重新输入")
continue
使用 [] 截取split字段,并判断字符长度
3.判断是否为0~9之间的数字,排除-0、字符与负数
sum=0
pd=0
for i in range(0,len(yi.split('.'))): #排除除数字参数可能性
for a in range(0,len(yi.split('.')[i])):
for b in range(0,10):
if yi.split('.')[i][a]==str(b):
sum=0
break
if yi.split('.')[i][a]!=str(b):
sum=1
if sum==1:
print('请给ip参数重新输入正确的ip数值,而不是除数字外的字符或负数')
pd=1
break
if pd==1:
continue
例如:111.222.333.444
1 2 3 4
外层 i 循环遍历1 2 3 4
中层 a 循环遍历1234中的111,222,333,444
里层 b 循环判断字符
当一个字符循环完一次里循环b之后,sum仍为1,表示字符未匹配上0~9中的字符,则不满足条件,break退出循环并给第二个判断变量赋值。
4.排除参数大于255的可能性
排除了空值和字符后就可以进行转换操作了
if int(yi.spl