2013-10-12 48 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')'增加了。 –