Istnieje wiele sposobów, aby to zrobić. Aby naprawić bieżący kod za pomocą %-formatting, musisz przekazać krotkę:
Podaj jako krotkę:
print("Total score for %s is %s"%(name, score))
Krotka z pojedynczym elementem wygląda ('this',).
Oto kilka innych typowych sposobów:
Przekaż jako słownik:
print("Total score for %(n)s is %(s)s"%{'n': name,'s': score})
Istnieje również formatowanie ciągów w nowym stylu, które może być nieco łatwiejsze do odczytania:
Użyj formatowania ciągów w nowym stylu:
print("Total score for {} is {}".format(name, score))
Używaj formatowania ciągów w nowym stylu z liczbami (przydatne do ponownego zamawiania lub drukowania tego samego jeden raz):
print("Total score for {0} is {1}".format(name, score))
Używaj formatowania ciągów w nowym stylu z wyraźnymi nazwami:
print("Total score for {n} is {s}".format(n=name, s=score))
Połącz ciągi znaków:
print("Total score for "+ str(name)+" is "+ str(score))
Najjaśniejsze dwa, moim zdaniem:
Po prostu przekaż wartości jako parametry:
print("Total score for", name,"is", score)
Jeśli nie chcesz, aby spacje były wstawiane automatycznie printw powyższym przykładzie, zmień sepparametr:
print("Total score for ", name," is ", score, sep='')
Jeśli używasz języka Python 2, nie będziesz mógł użyć dwóch ostatnich, ponieważ printnie jest to funkcja w języku Python 2. Możesz jednak zaimportować to zachowanie z __future__:
oczywiście zawsze istnieje odwieczna odrzucona metoda:print("Total score for "+str(name)"+ is "+str(score))
Snakes and Coffee
5
@SnakesandCoffee: Po prostu to zrobięprint("Total score for", name, "is", score)
Blender
4
Moje +1. Obecnie wolę te .format()bardziej czytelne niż starsze % (tuple)- chociaż widziałem testy, które pokazują, że %interpolacja jest szybsza. print('xxx', a, 'yyy', b)Jest również dobre dla prostych przypadków. Polecam także uczyć się .format_map()ze słownikiem jako argumentem, a przy pomocy 'ssss {key1} xxx {key2}'- fajne do generowania tekstów z szablonów. Jest też starszy string_template % dictionary. Ale szablony nie wyglądają tak czysty: 'ssss %(key1)s xxx %(key2)s'.
pepr
6
FYI, jak Pythona 3.6, otrzymujemy f-strun , więc może teraz też zrobić print(f"Total score for {name} is {score}")bez wyraźnych wywołań funkcji (jak długo namei scoresą w zakresie oczywiście).
ShadowRanger,
57
Istnieje wiele sposobów na wydrukowanie tego.
Spójrzmy na inny przykład.
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)) to przesada, możesz to pominąć, print("sum of {} and {} is {}".format(a,b,c)) chyba że chcesz zmienić kolejność.
Jean-François Fabre
38
Użyj .format():
print("Total score for {0} is {1}".format(name, score))
Lub:
//Recommended, more readable code
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)
.format()
bardziej czytelne niż starsze% (tuple)
- chociaż widziałem testy, które pokazują, że%
interpolacja jest szybsza.print('xxx', a, 'yyy', b)
Jest również dobre dla prostych przypadków. Polecam także uczyć się.format_map()
ze słownikiem jako argumentem, a przy pomocy'ssss {key1} xxx {key2}'
- fajne do generowania tekstów z szablonów. Jest też starszystring_template % dictionary
. Ale szablony nie wyglądają tak czysty:'ssss %(key1)s xxx %(key2)s'
.print(f"Total score for {name} is {score}")
bez wyraźnych wywołań funkcji (jak długoname
iscore
są w zakresie oczywiście).Istnieje wiele sposobów na wydrukowanie tego.
Spójrzmy na inny przykład.
źródło
print("sum of {0} and {1} is {2}".format(a,b,c))
to przesada, możesz to pominąć,print("sum of {} and {} is {}".format(a,b,c))
chyba że chcesz zmienić kolejność.Użyj
.format()
:Lub:
Lub:
Lub:
źródło
W Pythonie 3.6
f-string
jest znacznie czystszy.We wcześniejszej wersji:
W Python 3.6:
zrobi.
Jest bardziej wydajny i elegancki.
źródło
Upraszczając, osobiście lubię konkatenację ciągów znaków:
Działa zarówno z Pythonem 2.7, jak i 3.X.
UWAGA: Jeśli wynik jest liczbą całkowitą , należy go przekonwertować na str :
źródło
Spróbuj:
źródło
Po prostu wykonaj to
LUB
I zapomnij o wszystkich innych, inaczej mózg nie będzie w stanie zmapować wszystkich formatów.
źródło
%s
można zastąpić przez%d
lub%f
źródło
Użyj
f-string
:Lub
Użyj
.format
:źródło
Jeśli
score
jest liczbą, toJeśli wynik jest łańcuchem, to
Jeśli wynik jest liczbą, to jest
%d
, jeśli jest łańcuchem, to jest%s
, jeśli wynik jest liczbą zmiennoprzecinkową, to jest%f
źródło
To jest to, co robie:
Pamiętaj, aby wstawić spację
for
przed i przed i pois
.źródło