You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

初学者求助:Python函数中输入整数时if判断语句被忽略

问题分析

你遇到的核心问题出在两个关键细节上:

  1. input()的返回值特性:不管你输入的是数字还是文字,input()都会把内容转换成字符串类型返回。哪怕你输入123,变量stri的值也是"123"(带引号的字符串),而非整数类型。
  2. 错误的判断逻辑:你写的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:27:17