Python间距和%

时间:2013-10-30 03:42:05

标签: python spacing

我需要输出:

视频游戏:8/8(或100.0%)

这是8号标记的代码:

total = points+pointsTwo+pointsThree+pointsFour

如何编写此代码以准确输出上面所写的确切间距?

我试过了:

print("Video Games:", total, "/8  (or", total*100/8,"%)")

但是有一个空间; 8/8而不是8/8和另一个空间; 100.0%而不是100.0%

4 个答案:

答案 0 :(得分:5)

您可以使用String formatting(对于Python 2或3),如下所示:

out = "Video Games: {total}/8 (or {percent}%)".format(total=total, percent=total*100/8)
print(out)

在Python 3.0中,上面给出了:

Video Games: 7/8 (or 87.5%)

或在Python 2.0中,您得到以下内容(由于整数除法):

Video Games: 7/8 (or 87%)

编辑:所有归功于Gnibbler:

通过让字符串格式化程序负责计算百分比,可以以更短,更可控的方式完成:

out = "Video Games: {total}/8 (or {ratio:.2%})".format(total=total, ratio=total/8.0)
print(out)

同时给出(注意小数点和尾随零):

Video Games: 7/8 (or 87.50%)

答案 1 :(得分:1)

str.format有一个打印百分比的特殊技巧。

"Video Games: {total}/8 or {percent:.1%}".format(total=total, percent=total/8.0)

.1表示“小数点后一位”,%表示它是一个百分比,因此它隐含地乘以100

答案 2 :(得分:0)

您可以使用以下内容:

print "Video Games: %d/8 (or %0.2f%%)" % (total, total*100/8)

答案 3 :(得分:0)

Python有太多不同的方式来制作格式化的字符串。我最喜欢的尚未被提及仅被简要提及:

print "Video Games: %d/8 (or %.1f%%)" % (total, total*100/8.0)

对于Python 2.7及更低版本,请注意整数除法(这就是为什么我在分母中有8.0的原因)。百分比为%%,以确保将其解释为文字%

有一个扩展版本用于制作包含大量替换的大字符串,在这种情况下,您可能会忘记哪个替换对应于字符串中的哪个替换。它是这样的:

percentage = total*100/8.0
print "Video Games: %(total)d/8 (or %(percentage).1f%%)" % vars()

vars()调用会生成{'total': 8, 'percentage': 100.0, ...},包括当前命名空间中的所有变量,以便它知道要为%(total)d%(percentage).1f插入的内容。它更冗长,但更自我记录。如果您不想为percentage创建新变量,则可以完成:

print "Video Games: %(total)d/8 (or %(percentage).1f%%)" % {"total": total, "percentage": total*100/8.0}

当我从+学习字符串连接时,我开始使用这个迭代复制字符串:构建一个包含许多+符号的大字符串可能非常低效,在字符串长度上接近O(n ^ 2) 。在大多数情况下,它是一个微观的速度优化,但我养成了它的习惯,并且喜欢阅读代码更容易。