Python:在结果的末尾不要包括“L”:randint(10000000000000000000999999999999999999999)

2024-04-18 06:40:36 发布

您现在位置:Python中文网/ 问答频道 /正文

到目前为止,我发现:

 from random import randint
 randint(100000000000000000000, 999999999999999999999)

输出为:

^{pr2}$

但我不想让我在那里。。在

如果结尾没有“L”,我只能用它作为int。在

更新

如果目标是简单地有一个30位数长的随机数,那么生成两个小数字然后将它们组合起来会更好吗?在


Tags: fromimport目标结尾数字randomintrandint
3条回答

如果您在交互提示下,显式地print该值。值的repr有一个L,但值的str没有

>>> 922106555361958347898
922106555361958347898L
>>> print 922106555361958347898
922106555361958347898

REPL中的输出以L为后缀;如果打印该值,则不会显示该值。

>>> from random import randint
>>> print randint(100000000000000000000, 999999999999999999999)
106315199286113607384
>>>

之所以有一个L,是因为它太大了,无法放入int,所以它是long。有关详细信息,请参见文档中的Numeric Types — ^{}, ^{}, ^{}, ^{}


那么,你为什么要得到这个L,你如何摆脱它?

Python有两种不同的方法将值转换为字符串表示:

  • ^{}要么返回规范的源代码表示,要么类似于<__main__.Eggs at 0x10fbd8908>)。在
  • ^{}返回友好的表示形式。在

例如,对于字符串,str('abc')abc,而{}是{}。

对于long,str(1L)1,而{}是{}。


当您在交互提示下键入一个表达式时,它将使用repr。但是当您使用print命令时,它使用str。因此,如果您想看到不带L的值,只需print它:

print randint(100000000000000000000, 999999999999999999999)

如果您想将字符串保存在变量中或将其写入文件,则必须显式调用str

但如果您只想将其用作数字,则根本不必担心这个问题;它是一个数字,int和{}值可以自由地混合在一起(在python2.3左右)。

如果您试图将其存储在MySQL数据库中,那么无论您使用哪个MySQL接口,都不会关心您是给它int值还是long,只要它们适合列类型。**


或者您可以升级到python3.x,在那里不再有单独的long类型(所有的整数都是int,无论多大),也没有L后缀。


*确切的截止值在任何地方都没有记录,但至少对于CPython来说,它是适合您平台上的Clong的任何东西。因此,在大多数64位平台上,最大值为(1<;<;63)-1;在其他64位平台和所有32位平台上,最大值为(1<;<;31)-1。您可以通过打印sys.maxint在您的平台上亲自查看。无论如何,您的数字需要70位,因此除非有人将python2.x移植到一个具有128位Clongs的平台上,否则它将不适合。

**请注意,您的值太大,甚至无法容纳MySQL^{},因此您将使用^{} or ^{}。根据您使用的接口以及设置方式,您可能需要手动转换字符串和从字符串转换。但是您可以使用strint函数来实现这一点,而不必担心哪些值适合int类型,哪些不适合。

相关问题 更多 >