3

我是 Python 新手,正在使用 Python 3.3.2。我在尝试打印的字符串中包含数据项时遇到问题。%操作员可以按字面意思打印,如下所示:

for miles in range (10, 70, 10):
    km=miles*1.609
    print ("%d miles --> %3.2f kilometers") % (miles, km)

产生:

%d miles --> %3.2f kilometers

连同错误:

Unsupported operand type for %: 'NoneType' and 'tuple'

但是当我将第三行更改为:

print (%d "miles -->" %3.2f "kilometers") % (miles, km)

我在 %d 上收到语法错误。通过消除“”功能,我能够使程序在交互模式下正常工作,print()但如果没有“”,它将不会在 IDLE 中产生输出print()。我错过了什么?我为弄清楚这一点所做的研究有助于更多地了解 Python,但到目前为止还没有让程序正常工作。顺便说一句,它应该输出:

10 miles --> 16.09 kilometers
20 miles --> 32.18 kilometers
30 miles --> 48.27 kilometers
40 miles --> 64.36 kilometers
50 miles --> 80.45 kilometers
60 miles --> 96.54 kilometers

我感谢我能在这个问题上获得的任何帮助或帮助。

4

3 回答 3

4

% (miles, km)在函数内部移动print

print函数返回None,因此在您的代码中您实际上正在尝试执行以下操作:

None % (miles, km)

这就是您收到该错误的原因。

工作代码:

>>> for miles in range (10, 70, 10):
...      km=miles*1.609
...      print ("%d miles --> %3.2f kilometers" % (miles, km))
...     
10 miles --> 16.09 kilometers
20 miles --> 32.18 kilometers
30 miles --> 48.27 kilometers
40 miles --> 64.36 kilometers
50 miles --> 80.45 kilometers
60 miles --> 96.54 kilometers

使用新的字符串格式

>>> for miles in range (10, 70, 10):
        km=miles*1.609
        print ("{:d} miles --> {:3.2f} kilometers".format(miles, km))
...     
10 miles --> 16.09 kilometers
20 miles --> 32.18 kilometers
30 miles --> 48.27 kilometers
40 miles --> 64.36 kilometers
50 miles --> 80.45 kilometers
60 miles --> 96.54 kilometers
于 2013-07-07T20:39:06.443 回答
3

尝试在你的刺痛上使用 .format() 方法

>>> for miles in range(10, 70, 10):
...     km = miles*1.609
...     print ("{0} miles ---> {1} kilometers".format(miles, km))
于 2013-07-07T20:43:54.433 回答
2

您已经得到了关于为什么您的打印无法正常工作的答案 - 但是,一种稍微不同的写法是:

miles = range(10, 70, 10)
kms = (m * 1.609 for m in miles)
fmt = '{:d} miles --> {:3.2f} kilometers'.format
print(*map(fmt, miles, kms), sep='\n')

给出:

10 miles --> 16.09 kilometers
20 miles --> 32.18 kilometers
30 miles --> 48.27 kilometers
40 miles --> 64.36 kilometers
50 miles --> 80.45 kilometers
60 miles --> 96.54 kilometers
于 2013-07-07T20:54:06.997 回答