这个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 :(得分: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()
现在你弄清楚它们之间的区别。 : - )