为啥我要在 Python 中使用 int( input().strip() ) 而不是 int( input() )?

Posted

技术标签:

【中文标题】为啥我要在 Python 中使用 int( input().strip() ) 而不是 int( input() )?【英文标题】:Why would I use int( input().strip() ) instead of just int( input() ) in Python?为什么我要在 Python 中使用 int( input().strip() ) 而不是 int( input() )? 【发布时间】:2018-06-22 21:33:13 【问题描述】:

如果我想输入一个数字,我还需要.strip() 方法吗?像这样:

n = int(input().strip())

不仅仅是编码:

n = int(input())

我知道.strip() 返回字符串的副本,其中所有字符都已从字符串的开头和结尾剥离。但我想知道为什么/如果有必要。

【问题讨论】:

你说得对,没必要。那些总是有相同的结果。 来自docs:“可选地,文字可以在前面加上 + 或 -(中间没有空格)并被空格包围。” (强调我的)因此,正如@Ryan 所说,没有必要去除空格。 【参考方案1】:

使用int 将其转换为整数时没有必要,因为int 已经处理(忽略)前导和尾随空格*:

>>> int('1 ')
1
>>> int(' 1')
1
>>> int(' 1\n\t')  # also handles other spaces like newlines or tabs
1

如果您使用 sys.stdin.readline(包含尾随换行符)并且您不知道使用该值的函数是否可以处理额外的空格,则去除空格是最重要的。


* 仅供参考:floatcomplexfractions.Fractiondecimal.Decimal 类型也忽略前导和尾随空格,因此如果您使用其中任何一个,则不需要 strip 字符串。

【讨论】:

int 也可以解析 00001 之类的东西,其中 a = 0001 失败 是的,它甚至可以解析千位分隔符,当int('100_000') 工作时我真的很惊讶(Python 3.6)。 这对于较大的十六进制数(使用基数 16)特别有用。【参考方案2】:

现在您可以使用名为 ninput 的新库并使用名为 int_input() 的函数 例如

import ninput
n = ninput.int_input()

https://pypi.org/project/ninput/0.1.2/ 有库文档和文件

【讨论】:

如果你想推广你今天创建的库,你应该添加一个注释,让其他人清楚这是需要测试的代码

以上是关于为啥我要在 Python 中使用 int( input().strip() ) 而不是 int( input() )?的主要内容,如果未能解决你的问题,请参考以下文章

Python学习进程

python - 为啥在python中使用int()将二进制转换为整数会在将2作为基本参数时给出错误

为啥我要将 python 添加到 PATH

为啥 int 在 Python 中需要三倍的内存?

Python+int('35',8)为啥等于29?

为啥在使用 json.dumps 时,python dict 的 int 键会变成字符串?