2011-09-19 106 views
-4

這個Python代碼在版本2中給出了一個二維表。然而在Python 3中它不起作用。如何將此Python 2代碼轉換爲Python 3?

i = 1 
while (i <= 10): 
    print (2*i, ' ',) 
    i += 1 
    print() 

輸出是:

2 4 6 8 10 12 14 16 18 20 

雖然在Python 3中要求我已在print聲明的修改,它仍然無法正常工作。我如何使這個代碼在Python 3中工作?

+0

你的python2程序的代碼和輸出是什麼? – steabert

+0

'print()'調用在這裏不是你的問題:http://ideone.com/QOjCG *你是否改變了你的代碼? – Amber

+0

什麼不工作? – KillianDS

回答

2

將第二個print調用移出循環。在循環內部,每個數字之間添加一個換行符。

i = 1 
while (i <= 10): 
    print (2*i, ' ',end='') 
    i += 1 
print() 

或者,你可以更換while循環(和print()調用)與發電機的表達:

print(*(2*i for i in range(1,11)),sep=' ') 
+0

你不需要'結束=「」'在發電機版本 – KillianDS

+0

@KillianDS:是的,謝謝! – unutbu

2

print(2*i, ' ',)是不一樣的Python 2.x的print 2*i, ' ',因爲處的逗號在函數調用結束只是作爲參數終止符,並不實際可用的功能。

使用print(2*i, ' ', end = ' ')在Python 3來完成同樣的事情(儘管你可能離開了' '參數完全,並把2位的end參數。

既然你已經標記了這個「Python化」,我或許應該還指出:

i = 1 
while i <= 10: 
    i += 1 

模式不是很Python的;成語是:

for i in range(1,11): 
    print(whatever) 
+0

此結束參數起作用。謝謝 – Muavia

1

該代碼不會產生您在任何版本的Python上所說的操作。在Python 2上,print(2*i, ' ',)打印一個元組。在Python 3中,print是一個函數,所以沒有元組。

Python的2的輸出是:

(2, ' ') 
() 
(4, ' ') 
() 
(6, ' ') 
() 
(8, ' ') 
() 
(10, ' ') 
() 
(12, ' ') 
() 
(14, ' ') 
() 
(16, ' ') 
() 
(18, ' ') 
() 
(20, ' ') 
() 

在Python 3的輸出是:

2 

4 

6 

8 

10 

12 

14 

16 

18 

20 

這是不可能的幫助遠不止這些,直到你發佈你真正使用的代碼。

0
print(*(str(2*x) for x in range(1,11))) 

或者更少的短:

for x in range(1, 11): 
    print(2*x, end=' ') 
print() 

現在你找出區別是什麼。 :-)

+0

是的工作。這就是我一直在尋找的東西 – Muavia