Есть много способов сделать это. Чтобы исправить ваш текущий код, используя %-форматирование, вам нужно передать кортеж:
Передайте это как кортеж:
print("Total score for %s is %s"%(name, score))
Кортеж с одним элементом выглядит следующим образом ('this',).
Вот некоторые другие распространенные способы сделать это:
Передайте это как словарь:
print("Total score for %(n)s is %(s)s"%{'n': name,'s': score})
Также есть форматирование строк в новом стиле, которое может быть немного проще для чтения:
Используйте форматирование строк в новом стиле:
print("Total score for {} is {}".format(name, score))
Используйте форматирование строк в новом стиле с числами (полезно для переупорядочивания или печати одного и того же несколько раз):
print("Total score for {0} is {1}".format(name, score))
Используйте форматирование строк в новом стиле с явными именами:
print("Total score for {n} is {s}".format(n=name, s=score))
Конкатенация строк:
print("Total score for "+ str(name)+" is "+ str(score))
Самые чистые два, на мой взгляд:
Просто передайте значения в качестве параметров:
print("Total score for", name,"is", score)
Если вы не хотите, чтобы printв приведенном выше примере автоматически вставлялись пробелы , измените sepпараметр:
print("Total score for ", name," is ", score, sep='')
Если вы используете Python 2, вы не сможете использовать последние два, потому что printэто не функция в Python 2. Однако вы можете импортировать это поведение из __future__:
from __future__ import print_function
Используйте новое fформатирование строки в Python 3.6:
конечно, всегда есть давний неодобренный метод:print("Total score for "+str(name)"+ is "+str(score))
Змеи и Кофе
5
@SnakesandCoffee: я бы просто сделалprint("Total score for", name, "is", score)
Блендер
4
Мой +1. В наши дни я предпочитаю, чтобы они были .format()более читабельными, чем старые, % (tuple)хотя я видел тесты, которые показывают, что %интерполяция происходит быстрее. Это print('xxx', a, 'yyy', b)также хорошо для простых случаев. Я рекомендую также учиться .format_map()со словарем в качестве аргумента, а с 'ssss {key1} xxx {key2}'- приятно для генерации текстов из шаблонов. Есть и старшие string_template % dictionary. Но шаблоны выглядят не так чисто 'ssss %(key1)s xxx %(key2)s'.
Пепр
6
FYI, так как в Python 3.6, мы получаем е-строки , так что вы можете теперь сделать print(f"Total score for {name} is {score}")без каких - либо явных вызовов функций ( до тех пор , как nameи scoreв объеме , очевидно).
ShadowRanger
57
Есть много способов напечатать это.
Давайте посмотрим на другой пример.
a =10
b =20
c = a + b#Normal string concatenationprint("sum of", a ,"and", b ,"is", c)#convert variable into strprint("sum of "+ str(a)+" and "+ str(b)+" is "+ str(c))# if you want to print in tuple wayprint("Sum of %s and %s is %s: "%(a,b,c))#New style string formattingprint("sum of {} and {} is {}".format(a,b,c))#in case you want to use repr()print("sum of "+ repr(a)+" and "+ repr(b)+" is "+ repr(c))
EDIT :#New f-string formatting from Python 3.6:print(f'Sum of {a} and {b} is {c}')
print("sum of {0} and {1} is {2}".format(a,b,c)) излишне, вы можете пропустить, print("sum of {} and {} is {}".format(a,b,c)) если вы не хотите изменить порядок.
Жан-Франсуа Фабр
39
Использование .format():
print("Total score for {0} is {1}".format(name, score))
Или:
//Recommended, more readable codeprint("Total score for {n} is {s}".format(n=name, s=score))
print("Total score for "+str(name)"+ is "+str(score))
print("Total score for", name, "is", score)
.format()
более читабельными, чем старые,% (tuple)
хотя я видел тесты, которые показывают, что%
интерполяция происходит быстрее. Этоprint('xxx', a, 'yyy', b)
также хорошо для простых случаев. Я рекомендую также учиться.format_map()
со словарем в качестве аргумента, а с'ssss {key1} xxx {key2}'
- приятно для генерации текстов из шаблонов. Есть и старшиеstring_template % dictionary
. Но шаблоны выглядят не так чисто'ssss %(key1)s xxx %(key2)s'
.print(f"Total score for {name} is {score}")
без каких - либо явных вызовов функций ( до тех пор , какname
иscore
в объеме , очевидно).Есть много способов напечатать это.
Давайте посмотрим на другой пример.
источник
print("sum of {0} and {1} is {2}".format(a,b,c))
излишне, вы можете пропустить,print("sum of {} and {} is {}".format(a,b,c))
если вы не хотите изменить порядок.Использование
.format()
:Или:
Или:
Или:
источник
В Python 3.6
f-string
намного чище.В более ранней версии:
В Python 3.6:
Сделаю.
Это более эффективно и элегантно.
источник
Проще говоря, мне лично нравится конкатенация строк:
Он работает как с Python 2.7, так и с 3.X.
ПРИМЕЧАНИЕ. Если для оценки задано значение типа int , его следует преобразовать в str :
источник
Просто попробуй:
источник
Просто следуйте этому
ИЛИ
И забудьте обо всех остальных, иначе мозг не сможет отобразить все форматы.
источник
%s
можно заменить%d
или%f
источник
Используйте
f-string
:Или
Используйте
.format
:источник
Если
score
это число, тоЕсли счет является строкой, то
Если счет представляет собой число, то это
%d
, если это строка, то это%s
, если счет является плавающей точкой, то это%f
источник
Вот что я делаю:
Не забудьте поставить пробел после
for
и до и послеis
.источник