Интервал между 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) по длине строки. В большинстве случаев это микроскопическая оптимизация скорости, но я привык к ней и мне понравилось, насколько проще читать код.

Другие вопросы по тегам