我从服务器使用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
给出正确的答案
答案 0 :(得分:1)
由于你正在使用read_some并且没有检查cr-lf只是剥离最后2个字节,我怀疑你正在达到你的缓冲区大小。尝试
eq = ''
while not eq.endswith('\n'):
eq += tn.read_some().decode('utf-8')
eq.strip('\n')