初学者求助:Python函数中输入整数时if判断语句被忽略
问题分析
你遇到的核心问题出在两个关键细节上:
input()的返回值特性:不管你输入的是数字还是文字,input()都会把内容转换成字符串类型返回。哪怕你输入123,变量stri的值也是"123"(带引号的字符串),而非整数类型。- 错误的判断逻辑:你写的
if stri == int是在把字符串对象和int这个类型本身做比较——一个是具体的字符串值,一个是类型类,这两者永远不可能相等,所以这个分支永远不会被触发。
解决方案
针对你的需求,这里提供两种常用的处理方式:
方法1:用isdigit()判断正整数(简单场景)
如果只需要识别正整数输入,可以直接用字符串内置的isdigit()方法,它会检查字符串是否全由数字组成:
def string_length(stri): if stri.isdigit(): print("not a string") else: print(len(stri), stri) stri = input("please write a string: ") string_length(stri)
⚠️ 注意:这个方法对负数(比如"-123")或带小数点的数字(比如"12.3")不生效,因为这类字符串包含非数字字符。
方法2:用try-except捕获转换异常(通用场景)
如果需要支持识别负数、小数这类更复杂的数字输入,推荐用try-except块尝试转换字符串:转换成功说明是数字,失败则是普通字符串:
def string_length(stri): try: # 尝试把字符串转换成数字(int/float都能覆盖) float(stri) print("not a string") except ValueError: # 转换失败,说明是普通字符串 print(len(stri), stri) stri = input("please write a string: ") string_length(stri)
这个方法兼容性更强,能识别绝大多数数字格式的输入。
额外小提示
你原来的代码里写了stri = str(input(...)),其实input()本身就返回字符串,所以str()转换是多余的,可以直接写成stri = input("please write a string: ")。
内容的提问来源于stack exchange,提问作者Massimiliano Duka Paolella
相关产品推荐
相关产品推荐

