Python中如何实现input()输入的字符串与数值类型校验?
问题分析
Python的input()函数无论输入内容是什么,都会统一返回字符串类型,所以直接通过type(inp) != str判断永远不会触发分支,这就是你每次输入整数仍输出"Input is a string"的原因。
你的真实需求应该是:当输入内容是纯整数(或数字形式)时,提示必须输入字符串;否则判定为合法字符串输入。
解决方案
根据不同的校验范围,提供两种常用实现:
1. 仅排除纯整数输入
通过try-except捕获类型转换异常,判断输入是否能转为整数:
inp = input("Input: ") try: int(inp) # 尝试将输入转为整数 print("You must input a string") except ValueError: # 转换失败,说明不是纯整数输入 print("Input is a string")
2. 排除所有数字形式输入(整数、浮点数、带正负号的数字)
通过字符串处理判断输入是否符合数字格式:
inp = input("Input: ") # 先去除开头的正负号,再判断是否为数字格式 stripped_inp = inp.lstrip('+-') if stripped_inp.replace('.', '', 1).isdigit() and stripped_inp.count('.') <= 1: print("You must input a string") else: print("Input is a string")
代码说明
lstrip('+-'):去掉输入开头的正负号,兼容-123、+456这类带符号的数字输入replace('.', '', 1):仅去掉第一个小数点,避免误判12.3.4这类非法格式isdigit():判断处理后的字符串是否全为数字字符stripped_inp.count('.') <= 1:确保输入最多只有一个小数点,避免多小数点的非法格式
内容的提问来源于stack exchange,提问作者SJXD
相关产品推荐
相关产品推荐

