2014-01-31 59 views
0

我有點新的Python,我不知道你會怎麼下面的代碼轉換成C++到Python從C++代碼轉換時在Python代碼中的毛刺?

int kids, cd; 
while (cin >> kids >> cd){ 
    if (kids == 0 && cd == 0) 
    break; 
    cout << pow(cd, kids)<<endl; 
} 

所以我認爲它可能像

from math import pow 
    kids = int(raw_input()) 
    cd = int(raw_input()) 
    while kids!=0 and cd!=0: 
     print pow(cd, kids) 
     kids = int(raw_input()) 
     cd = int(raw_input()) 

當我提出我的python代碼給在線裁判SPOJ,我得到了一個運行時錯誤。當數字變得太大時,我的C++代碼不被接受,因爲溢出... 有什麼問題?

此外,當我試圖編譯使用

http://repl.it/languages/Python

與輸入

2 
5 

的Python代碼和我得到的輸出

25.0 

但是我怎麼使它是25而不是25.0?

謝謝!

+0

你的意思是'''或者應該是'> ='? –

+0

@Hugh:'>>'可能是故意的; 'cin >> x'從標準輸入讀入'x'。 – icktoofay

+0

是,>>是故意的;在每一行上,會有兩個變量kids和cd在 – user3213711

回答

1

Python代碼是接近,但不是很原來的C++代碼。在C++中,可以在EOF上退出循環,或者兩個數字都爲0時使用循環。在Python中,只有在兩個數字均爲零時才退出,而在EOF上出現運行時錯誤。此外,在C++中,cin >> kids >> cd將從標準輸入中讀取kidscd,而標準輸入由空白分隔,而您的Python代碼讀取它由換行符分隔。最後,你在C++中使用整數運算,但在Python中使用浮點運算。

讓我們從EOF問題開始。爲了趕上一個EOF,你做一個讀像往常一樣,趕上EOFError例外,例如:

try: 
    kids = int(raw_input()) 
    cd = int(raw_input()) 
except EOFError: 
    break # out of the loop we're in (not shown) 

浮點問題也很容易解決:pow是沒有必要的;相反,Python有一個運營商:**。因此,你有

print cd ** kids 

最後,還有那個麻煩的定界符問題。你如何解決這個問題取決於你的輸入看起來如何。如果你有每行兩個輸入,如:

1 2 
3 4 
5 6 

然後,你想讀的行一次,其拆分,每件轉換爲整數:

try: 
    line = raw_input() 
except EOFError: 
    break 
kids, cd = line.split() 
kids = int(kids) 
cd = int(cd) 

有是其他格式的解決方案,包括直接並行的C++代碼;但是這更復雜,可能並非必要。

最後,可以考慮使用while True循環沒有開始和break ING重複kids = ...; cd = ...代碼時要停止,因爲你的C++代碼一樣。

1
while True: 
    kids = int(raw_input()) 
    cd = int(raw_input()) 
    if cd and kids: 
     print(cd ** kids) 
    else: 
     break 

編輯看着http://www.spoj.com/problems/UJ/後,我會建議

while True: 
    n,d = [int(s) for s in raw_input().split()] 
    if n and d: 
     print(n ** d) 
    else: 
     break 
+0

中讀取謝謝Hugh Bothwell。但是,當我將它提交給在線評委SPOJ時,由於某些原因,您的代碼仍然會出現運行時錯誤。 – user3213711

+0

下面是詳細信息:
數\t狀態\t信號\t時間\t內存 測試0 \t運行時錯誤\t -1 \t 0.03S \t 3740KB
user3213711

+0

@ user3213711:這SPOJ問題? –