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

-4 投票
4 回答
746 浏览
提问于 2025-04-17 02:35

这段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)

撰写回答