题解 | #合法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
别问我怎么考虑这些判断条件的。多提交几次就知道了。