-1

我使用来自服务器的 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

给出正确答案

4

1 回答 1

1

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

eq = ''
while not eq.endswith('\n'):
    eq += tn.read_some().decode('utf-8')
eq.strip('\n')
于 2013-10-12T11:58:09.483 回答