2011-09-19 103 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