Интервал между Python и%
Мне нужно вывести это:
Видеоигры: 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 ответа
Вы можете использовать форматирование String (для 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%)
str.format
есть специальный трюк для печати процентов.
"Video Games: {total}/8 or {percent:.1%}".format(total=total, percent=total/8.0)
.1
означает "один десятичный знак", %
означает, что это процент, поэтому он неявно умножается на 100
Вы можете использовать следующее:
print "Video Games: %d/8 (or %0.2f%%)" % (total, total*100/8)
У 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) по длине строки. В большинстве случаев это микроскопическая оптимизация скорости, но я привык к ней и мне понравилось, насколько проще читать код.