题解 | #合法IP#

https://www.nowcoder.com/practice/995b8a548827494699dc38c3e2a54ee9

无它,就是判断。多报错几次就行了。
1. 是否非数字或者非"."
  • 是,输入"NO"
  • 否,进行2
2. 以"."作为分隔符分割,去除空字符"",然后判断列表长度是否小于4
  • 是,说明空字符占据了数字应有的位置(..1.3.4),输入"NO"
  • 否,进行3
3. 此时剩下的就是长度为4且都为数字字符形式的元素组成的列表,接下来就是排除02这种0开头情况,同时要避免错误排除0这个数字(判定条件为该元素长度>1且以0开头)。
    由于不确定出现位置,所以需要遍历列表,采用flag和临时遍历tmp来帮助判断(四个元素中有一个以0开头且长度大于1,则整个flag应为false,输出"NO")。flag是否为True
  • 是,输出 "YES"
  • 否,输出 "NO"
至此判断结束。
我深知用re应该好弄点,但本人只会写笨代码,
完整代码如下:
while True:
    try:
        nums = input()
        for i in nums:
            if not (i.isdigit() or i == '.'):
                print('NO')
                break
        else:
            nums = nums.split('.')
            nums = [i for i in nums if i != '']
            if len(nums) != 4:
                print('NO')
            elif '' in nums:
                print('NO')
            else:
                flag = True
                for i in nums:
                    tmp = False if int(i) < 0 or int(i) > 255 or (len(i) > 1 and i.startswith('0')) else True
                    flag = tmp and flag
                if flag:
                    print('YES')
                else:
                    print('NO')
    except:
        break
别问我怎么考虑这些判断条件的。多提交几次就知道了。


全部评论

相关推荐

在看数据的傻狍子很忙碌:学生思维好重,而心很急,自己想想真的能直接做有难度的东西吗?任何错误都是需要人担责的,你实习生可以跑路,你的同事领导呢
点赞 评论 收藏
分享
重生我想学测开:嵌入式的问题,我准备入行京东外卖了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务