Python中如何将raw_input获取的字符串转为数字用于if判断?
解决raw_input获取端口号后转为数字判断的问题
我懂你的需求——用raw_input()拿端口号存在port里(因为后面还要当字符串用,所以不能直接用input()),但转成int做if判断时没达到预期效果对吧?
首先说转int的步骤:你写的temp = int(port)本身是完全正确的!问题出在你的判断条件temp >> 0 or temp << 323上——这是位运算,不是你想要的范围判断逻辑,所以才会不符合预期。
正确的实现思路
- 保留
port作为字符串变量,满足后续使用需求; - 将
port转为int类型的temp,用于数字判断; - 修正判断条件,改成你实际需要的范围校验(比如常见的合法端口范围是1-65535,或者你自定义的范围);
- 最好加上异常处理,防止用户输入非数字内容导致程序崩溃。
修正后的代码示例
port = raw_input("Enter the port no:") try: temp = int(port) # 这里改成你实际需要的范围判断,比如1到65535(合法TCP/UDP端口范围) if 1 <= temp <= 65535: print("Valid port number!") # 后续可以正常使用port作为字符串,temp作为数字 print(f"Using port string: {port}, port number: {temp}") else: print("Port number is out of valid range!") except ValueError: print("Oops, please enter a valid integer for the port number.")
为什么之前的判断不对?
你写的temp >> 0是把数字右移0位,结果和temp本身完全一样;temp << 323是把数字左移323位,会得到一个极大的数(Python支持无限精度整数,但这完全不是范围判断的逻辑)。所以这个条件无论输入什么合法端口,都会返回True,根本起不到校验作用。
只要把判断条件改成正常的范围比较,你的转int思路就完全没问题啦!
内容的提问来源于stack exchange,提问作者Atharva Biwalkar
相关产品推荐
相关产品推荐

