在python中输入错误

时间:2009-06-13 18:24:06

标签: python

111111111111111111111111111111111111111111111111111111111111

当我把它当作输入时,它会像这样在最后追加一个

111111111111111111111111111111111111111111111111111111111111L

从而影响了我对它的计算..我该如何删除它?

import math
t=raw_input()
l1=[]
a=0
while (str(t)!="" and int(t)!= 0):
    l=1
    k=int(t)
    while(k!= 1):
        l=l+1
        a=(0.5 + 2.5*(k %2))*k + k % 2
        k=a

    l1.append(l)
    t=raw_input()
    a=a+1


for i in range(0,int(a)):
    print l1[i]

这是我的代码,它适用于每个测试用例,除了111111111111111111111111111111111111111111111111111111111111

所以我猜想当python考虑这么大的数字时出现问题

5 个答案:

答案 0 :(得分:3)

它作为Long Integer输入,在计算方面应该像任何其他数字一样。只有当您使用repr(或调用repr的内容,例如打印列表)显示它才会显示它时,它才会显示“L”。

究竟出了什么问题?

修改:感谢您的代码。据我所知,给它一个长或短的数字没什么区别,但它不是很清楚它应该做什么。

答案 1 :(得分:3)

看起来这里发生了两件截然不同的事情。首先,正如其他海报所述,L后缀仅表示Python已将输入值转换为长整数。第二个问题就在这一行:

a=(0.5 + 2.5*(k %2))*k + k % 2

这隐含地导致(0.5 + 2.5*(k %2))*k值的浮点数。由于浮点数只有53位精度,因此舍入会导致结果不正确。尝试重构该行以避免浮点数学运算,如下所示:

a=(1 + 5*(k %2))*k//2 + k % 2

答案 2 :(得分:2)

正如RichieHindle在他的回答中所指出的那样,它被表示为一个长整数。您可以在以下page了解有关数字在Python中表示的不同方式。

当我使用Python中较大的数字时,我也会看到数字末尾的L.它不应该影响对数字进行的任何计算。例如:

>>> a = 111111111111111111111111111111111111111
>>> a + 1
111111111111111111111111111111111111112L
>>> str(a)
'111111111111111111111111111111111111111'
>>> int(a)
111111111111111111111111111111111111111L

我是在python命令行上做到的。输出数字时,它将具有数字的内部表示,但不应影响任何计算。我在上面引用的链接指定长整数具有 无限精度 。好酷!

答案 3 :(得分:2)

避免python中的数字错误的另一种方法是使用Decimal类型而不是标准float。

请参阅official docs

答案 4 :(得分:0)

你确定L确实是它的一部分吗?当你打印这么大的数字时,Python会附加一个L表示它是一个长整数对象。