Stampa più argomenti in Python


309

Questo è solo uno snippet del mio codice:

print("Total score for %s is %s  ", name, score)

Ma voglio che venga stampato:

"Il punteggio totale per (nome) è (punteggio)"

dove nameè una variabile in un elenco ed scoreè un numero intero. Questo è Python 3.3 se questo aiuta a tutti.

Risposte:


559

Ci sono molti modi per farlo. Per correggere il tuo codice corrente usando %-formatting, devi passare una tupla:

  1. Passalo come una tupla:

    print("Total score for %s is %s" % (name, score))

Sembra una tupla con un singolo elemento ('this',).

Ecco alcuni altri modi comuni per farlo:

  1. Passalo come dizionario:

    print("Total score for %(n)s is %(s)s" % {'n': name, 's': score})

C'è anche una nuova formattazione delle stringhe, che potrebbe essere un po 'più facile da leggere:

  1. Usa la formattazione di stringa di nuovo stile:

    print("Total score for {} is {}".format(name, score))
  2. Usa la formattazione di stringa di nuovo stile con i numeri (utile per riordinare o stampare la stessa più volte):

    print("Total score for {0} is {1}".format(name, score))
  3. Usa la formattazione di stringa di nuovo stile con nomi espliciti:

    print("Total score for {n} is {s}".format(n=name, s=score))
  4. Stringhe concatenate:

    print("Total score for " + str(name) + " is " + str(score))

I due più chiari, secondo me:

  1. Basta passare i valori come parametri:

    print("Total score for", name, "is", score)

    Se non desideri che gli spazi vengano inseriti automaticamente printnell'esempio sopra, modifica il sepparametro:

    print("Total score for ", name, " is ", score, sep='')

    Se stai usando Python 2, non sarai in grado di usare gli ultimi due perché printnon è una funzione in Python 2. Puoi tuttavia importare questo comportamento da __future__:

    from __future__ import print_function
  2. Usa la nuova fformattazione -string in Python 3.6:

    print(f'Total score for {name} is {score}')

7
certo, c'è sempre il vecchio metodo non approvato:print("Total score for "+str(name)"+ is "+str(score))
Snakes and Coffee

5
@SnakesandCoffee: Lo farei soloprint("Total score for", name, "is", score)
Blender

4
Il mio +1. In questi giorni preferisco il .format()più leggibile rispetto al vecchio % (tuple)- anche se ho visto test che mostrano che l' %interpolazione è più veloce. Il print('xxx', a, 'yyy', b)è anche bene per i casi semplici. Consiglio anche di imparare .format_map()con il dizionario come argomento e con 'ssss {key1} xxx {key2}'- nice per generare testi da template. C'è anche il più vecchio string_template % dictionary. Ma i modelli non sembrano molto pulita: 'ssss %(key1)s xxx %(key2)s'.
pepr

6
Cordiali saluti, a partire da Python 3.6, otteniamo stringhe f , quindi ora puoi anche fare print(f"Total score for {name} is {score}")senza chiamate esplicite di funzioni (purché namee scoresiano ovviamente nell'ambito).
ShadowRanger il

57

Ci sono molti modi per stamparlo.

Diamo un'occhiata con un altro esempio.

a = 10
b = 20
c = a + b

#Normal string concatenation
print("sum of", a , "and" , b , "is" , c) 

#convert variable into str
print("sum of " + str(a) + " and " + str(b) + " is " + str(c)) 

# if you want to print in tuple way
print("Sum of %s and %s is %s: " %(a,b,c))  

#New style string formatting
print("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}')

3
print("sum of {0} and {1} is {2}".format(a,b,c)) è eccessivo, puoi ometterlo a print("sum of {} and {} is {}".format(a,b,c)) meno che tu non voglia cambiare ordine.
Jean-François Fabre

39

Usa .format()::

print("Total score for {0} is {1}".format(name, score))

O:

// Recommended, more readable code

print("Total score for {n} is {s}".format(n=name, s=score))

O:

print("Total score for" + name + " is " + score)

O:

`print("Total score for %s is %d" % (name, score))`

21

In Python 3.6, f-stringè molto più pulito.

Nella versione precedente:

print("Total score for %s is %s. " % (name, score))

In Python 3.6:

print(f'Total score for {name} is {score}.')

andrà bene.

È più efficiente ed elegante.


15

Mantenendolo semplice, personalmente mi piace la concatenazione di stringhe:

print("Total score for " + name + " is " + score)

Funziona con Python 2.7 e 3.X.

NOTA: se il punteggio è un int , è necessario convertirlo in str :

print("Total score for " + name + " is " + str(score))

12

Prova:

print("Total score for", name, "is", score)

11

Segui questo

idiot_type = "the biggest idiot"
year = 22
print("I have been {} for {} years ".format(idiot_type, years))

O

idiot_type = "the biggest idiot"
year = 22
print("I have been %s for %s years."% (idiot_type, year))

E dimentica tutti gli altri, altrimenti il ​​cervello non sarà in grado di mappare tutti i formati.


6
print("Total score for %s is %s  " % (name, score))

%spuò essere sostituito da %do%f


6

Utilizzare f-string:

print(f'Total score for {name} is {score}')

O

Utilizzare .format:

print("Total score for {} is {}".format(name, score))

5

Se scoreè un numero, allora

print("Total score for %s is %d" % (name, score))

Se il punteggio è una stringa, allora

print("Total score for %s is %s" % (name, score))

Se il punteggio è un numero, allora lo è %d, se è una stringa, quindi lo è %s, se il punteggio è un float, allora lo è%f


3

Questo è ciò che faccio:

print("Total score for " + name + " is " + score)

Ricorda di mettere uno spazio dopo fore prima e dopo is.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.