Python如何判断用户输入是否为复数类型并解决输入类型识别错误问题
问题根因
input() 函数的返回值固定为字符串类型,因此原代码中刚读取输入就判断是否为复数的逻辑永远不会触发,而单纯判断字符串中是否包含j的方案会出现误判(例如输入含j的普通字符串"jump"也会被错误识别为复数)。
正确实现方案
我们可以通过分层类型转换的方式精准区分输入类型:优先尝试转换为浮点数,转换失败后再尝试转换为复数,根据转换结果给出对应提示。
while True: input_str = input("a ? ") # 第一步:尝试转float,符合要求的整数/浮点数都可以转换成功 try: a = float(input_str) except ValueError: # 转float失败,尝试转complex判断是不是复数 try: complex(input_str) # 转complex成功说明是复数输入 print("Valid number, please not Complex!") except ValueError: # 两种类型都转失败,属于非法字符串输入 print('please input a int or float') print("Valid number, please not String!") continue # 浮点数范围校验 if 0.5 <= a <= 100: break elif 0 <= a < 0.5: print ('bigger number, please: 0.5-100') elif a < 0: print ('positive number, please') elif a > 100: print ('smaller number, please: 0.5-100')
测试效果
- 输入
5j:输出Valid number, please not Complex! - 输入
1+2j:输出Valid number, please not Complex! - 输入
abc:输出please input a int or float+Valid number, please not String! - 输入
10:正常通过校验
内容的提问来源于stack exchange,提问作者Medin Oari
相关产品推荐
相关产品推荐

