2013-10-12 50 views
-1

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

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 

给出了正确的答案

+0

什么是不正确的答案? – xiaowl

+0

Python不是C,这样的类型转换根本不可读。 –

+0

请注意,python类型实现为可调用,而不是强制转换;你的'int()'和'str()'的额外括号可以工作,但会造成阅读混乱。 'int(params [0])'就足够了,'str(res)'就足够了。 –

回答

1

由于您使用read_some和不检查的CR -lf只是删除最后2个字节,我怀疑你是在缓冲区大小。尝试

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

@MartijnPieters,修正了错字 –

+0

那么'eq'应该用*结束?就目前而言,由于您没有传入参数,因此会引发“TypeError”。 –

+0

抱歉'endswith('\ n')'增加了。 –