如何将此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中正常运行呢?
4 个回答
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
在你发布你实际使用的代码之前,帮你解决问题的可能性不大。
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=' ')
2
print(2*i, ' ',)
和 Python 2.x 的 print 2*i, ' ',
不一样,因为在函数调用中的逗号只是用来结束参数的,并不会被函数实际使用。
在 Python 3 中,要实现相同的效果,可以使用 print(2*i, ' ', end = ' ')
(不过你其实可以完全省略 ' '
这个参数,直接在 end
参数中放两个空格)。
既然你提到了“pythonic”,我还应该指出:
i = 1
while i <= 10:
i += 1
这种写法并不是很符合 Python 的风格;正确的写法是:
for i in range(1,11):
print(whatever)