python中的错误乘法

时间:2013-10-12 11:43:39

标签: python telnet

我从服务器使用telnet得到一个像'x * y'的字符串,其中x和y都是自然数。我只需要将正确的答案发回服务器。当数字位数小于22时,我从下面的代码得到的答案是正确的,但如果它更多 - 出错了。这是代码:

import telnetlib

tn = telnetlib.Telnet(host, port)
while 1:
    eq = tn.read_some().decode("utf-8")
    eq = eq[:-2]
    params = eq.split()
    if (eq != ""):
    try:
        x=int(params[0])
        y=int(params[2])
        res = x*y
        tn.write(str(res).encode('latin-1'))
    except:
        print(eq)
        break

例如,如果

x=5892389056261064794905 #, 
y=7028717678246449032337 #then 
res=41415939126848056288120885900543594617842985 

这是正确的。但是如果

x=10834381661191220895731, 
y=1501035997383808848779 #, 

aswer不正确,主要问题是python shell中的简单表达式

10834381661191220895731 * 10834381661191220895731

给出正确的答案

1 个答案:

答案 0 :(得分:1)

由于你正在使用read_some并且没有检查cr-lf只是剥离最后2个字节,我怀疑你正在达到你的缓冲区大小。尝试

eq = ''
while not eq.endswith('\n'):
    eq += tn.read_some().decode('utf-8')
eq.strip('\n')