Python如何限制输入为数字?及IP追踪器如何过滤IP格式输入?
Python输入过滤实用方案
嘿,这两个问题我都折腾过,给你分享些接地气的解决办法!
一、仅允许输入数字的实现思路
这里有两种常用的方法,挑你顺手的用就行:
- 方法1:循环输入+类型校验(简单直接)
用try-except捕获输入转数字失败的情况,循环提示直到用户输入合法:
while True: user_input = input("请输入一个数字:") try: # 要整数就用int(),要浮点数换float() num = int(user_input) print(f"搞定!你输入的数字是:{num}") break except ValueError: print("不对哦,请输入有效的数字~")
这个方法不用额外导入模块,新手友好。
- 方法2:正则表达式匹配(精准控制格式)
如果需要支持正负号、浮点数这类更复杂的数字格式,用正则就很方便:
import re while True: user_input = input("请输入一个数字:") # 匹配整数、正负浮点数 if re.fullmatch(r'^[-+]?(\d+(\.\d*)?|\.\d+)$', user_input): num = float(user_input) if '.' in user_input else int(user_input) print(f"完美!你输入的数字是:{num}") break else: print("输入格式不对,请重新输入数字!")
fullmatch能确保整个输入都是数字格式,不会混进其他字符。
二、IP格式输入过滤与简易追踪器优化
要做IP追踪器,第一步就是把非法IP挡在外面,这里有两种靠谱的验证方式:
1. 用内置ipaddress模块(推荐,省心)
Python3.3+自带的ipaddress模块能直接验证IP合法性,不管是IPv4还是IPv6都能搞定:
import ipaddress def is_valid_ip(ip): try: ipaddress.ip_address(ip) return True except ValueError: return False # 输入过滤逻辑 while True: target_ip = input("请输入要追踪的IP地址:") if is_valid_ip(target_ip): print(f"开始追踪IP:{target_ip}") # 这里放你的追踪逻辑,比如调用whois接口、获取地理位置等 break else: print("请输入有效的IPv4或IPv6地址哦!")
这个方法不用自己写复杂的正则,模块已经帮你做好了所有校验,比如每个IP段是否在0-255之间。
2. 正则匹配IPv4(针对性更强)
如果你只需要支持IPv4,可以用专门的正则表达式:
import re def is_valid_ipv4(ip): # 严格匹配IPv4格式,每个段0-255 pattern = r'^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' return re.fullmatch(pattern, ip) is not None # 输入过滤 while True: target_ip = input("请输入要追踪的IPv4地址:") if is_valid_ipv4(target_ip): print(f"合法IPv4,开始追踪:{target_ip}") # 把你的追踪代码放在这里 break else: print("无效的IPv4地址,请重新输入!")
正则里的每个分段都限制了数值范围,避免出现像256.0.0.1这种非法IP。
整合到你的追踪器里
把验证函数加到你的代码开头,确保只有合法IP才会进入追踪流程。举个简单的整合例子:
import ipaddress def is_valid_ip(ip): try: ipaddress.ip_address(ip) return True except ValueError: return False def track_ip(ip): # 这里替换成你自己的追踪逻辑 print(f"正在追踪 {ip}...") print(f"{ip} 的大致地理位置:美国加利福尼亚州(模拟结果)") # 主流程 while True: target_ip = input("请输入要追踪的IP地址:") if is_valid_ip(target_ip): track_ip(target_ip) break else: print("IP格式不对,请重新输入!")
这样就能保证只有符合格式的IP才会被处理啦。
内容的提问来源于stack exchange,提问作者Abay
相关产品推荐
相关产品推荐

