如何将这个Python 2代码转换为Python 3?

时间:2011-09-19 12:01:49

标签: python python-3.x

这个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中使用此代码?

4 个答案:

答案 0 :(得分: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='  ')

答案 1 :(得分:2)

print(2*i, ' ',)与Python 2.x print 2*i, ' ',不同,因为函数调用末尾的逗号仅作为参数终止符,并且实际上不可用于该函数。 / p>

在Python 3中使用print(2*i, ' ', end = ' ')来完成同样的事情(尽管你可以完全忽略' '参数,并在end参数中放置2个空格。

由于你已经标记了这个“pythonic”,我应该也指出:

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

模式不是非常pythonic;这个成语是:

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

答案 2 :(得分: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  

除非您发布正在使用的代码,否则无法提供更多帮助。

答案 3 :(得分:0)

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

或者简短:

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

现在你弄清楚它们之间的区别。 : - )