¿Cuál es la diferencia entre %s y %d en el formato de cadena?

5 minutos de lectura

avatar de usuario de karlzt
karlzt

no entiendo que %s y %d hacer y cómo funcionan.

avatar de usuario de moinudin
moinudín

Se utilizan para formatear cadenas. %s actúa como marcador de posición para una cadena mientras %d actúa como un marcador de posición para un número. Sus valores asociados se pasan a través de una tupla usando el % operador.

name="marcog"
number = 42
print '%s %d' % (name, number)

imprimirá marcog 42. Tenga en cuenta que el nombre es una cadena (%s) y el número es un número entero (%d para decimal).

Ver https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting para detalles.

En Python 3 el ejemplo sería:

print('%s %d' % (name, number))

  • En Google Chrome: Configuración >> Buscar >> Administrar motores de búsqueda… observe cómo %s se utiliza con las configuraciones del motor de búsqueda. usos de cromo %s para reemplazar las palabras clave ingresadas en la barra de direcciones. usos de pitón %s En una forma similar. En print('description: %s' % descrip) el %s será reemplazado por la cadena de texto almacenada en el descrip variable. Las llaves redondas evitan un mensaje de error en Python 3.

    – noobninja

    27 ago 2016 a las 20:51

  • ¿Cómo se llaman estos %s, %d, etc.?

    – Cadena

    19 mayo 2017 a las 18:21

  • @Chaine se llaman marcadores de posición, son variables reemplazables

    – León

    9 de junio de 2017 a las 19:44


de python 3 documento

%d es para entero decimal

%s es para una cadena u objeto genérico y, en el caso de un objeto, se convertirá en una cadena

Considere el siguiente código

name="giacomo"
number = 4.3
print('%s %s %d %f %g' % (name, number, number, number, number))

la salida será

giacomo 4.3 4 4.300000 4.3

como se puede ver %d se truncará a entero, %s mantendrá el formato, %f se imprimirá como flotante y %g se utiliza para número genérico

obviamente

print('%d' % (name))

generará una excepción; no puedes convertir cadena a número

  • Esto necesita más votos a favor. Explica lo que sucedería si %s se utiliza para un número en su lugar.

    – Vikas Prasad

    1 de septiembre de 2018 a las 13:41

  • ¿Cuál es la diferencia entre %d y %i, si ambos se convierten en enteros? ¿Cómo se compara %d con %i y %f?

    – Srini

    22 de julio de 2019 a las 12:05

Avatar de usuario de Soviut
soviético

%s se utiliza como marcador de posición para los valores de cadena que desea inyectar en una cadena formateada.

%d se utiliza como marcador de posición para valores numéricos o decimales.

Por ejemplo (para python 3)

print ('%s is %d years old' % ('Joe', 42))

daría salida

Joe is 42 years old

  • ¿No explica realmente el problema? No estoy explicando el problema, estoy proporcionando una respuesta concisa. a la pregunta. La pregunta preguntaba específicamente para qué servían %s y %d.

    – Soviético

    16 de febrero de 2012 a las 2:37

  • ¿Conoces la diferencia entre %i y %d? ¿Python admite %i?

    – cyanbhu

    31 de octubre de 2018 a las 1:43

Avatar de usuario de Wyrmwood
Wyrmwood

Todas estas son respuestas informativas, pero ninguna llega al núcleo de cuál es la diferencia entre %s y %d.

%s le dice al formateador que llame al str() función en el argumento y dado que estamos coaccionando a una cadena por definición, %s es esencialmente solo actuar str(arg).

%d por otro lado, está llamando int() sobre el argumento antes de llamar str()como str(int(arg))esto provocará int la coerción, así como str coerción.

Por ejemplo, puedo convertir un valor hexadecimal a decimal,

>>> '%d' % 0x15
'21'

o truncar un flotador.

>>> '%d' % 34.5
'34'

Pero la operación generará una excepción si el argumento no es un número.

>>> '%d' % 'thirteen'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str

Entonces, si la intención es solo llamar str(arg)entonces %s es suficiente, pero si necesita un formato adicional (como formatear lugares decimales flotantes) u otra coerción, entonces se necesitan los otros símbolos de formato.

Con el f-string notación, cuando deja fuera el formateador, el valor predeterminado es str.

>>> a = 1
>>> f'{a}'
'1'
>>> f'{a:d}'
'1'
>>> a="1"
>>> f'{a:d}'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Unknown format code 'd' for object of type 'str'

Lo mismo es cierto con string.format; el valor predeterminado es str.

>>> a = 1
>>> '{}'.format(a)
'1'
>>> '{!s}'.format(a)
'1'
>>> '{:d}'.format(a)
'1'

avatar de usuario de kevin
kevin

Estos son marcadores de posición:

Por ejemplo: 'Hi %s I have %d donuts' %('Alice', 42)

Esta línea de código sustituirá %s por Alice (str) y %d por 42.

Producción: 'Hi Alice I have 42 donuts'

Esto podría lograrse con un “+” la mayor parte del tiempo. Para obtener una comprensión más profunda de su pregunta, es posible que también desee verificar {} / .format(). Aquí hay un ejemplo: formato de cadena de Python: % vs. formato

también vea aquí un video tutorial de google python @ 40 ‘, tiene algunas explicaciones
https://www.youtube.com/watch?v=tKTZoB2Vjuk

El %d y %s Los “comandos” de formato de cadenas se utilizan para formatear cadenas. El %d es para números, y %s es para cuerdas.

Para un ejemplo:

print("%s" % "hi")

y

print("%d" % 34.6)

Para pasar varios argumentos:

print("%s %s %s%d" % ("hi", "there", "user", 123456)) regresará hi there user123456

avatar de usuario de stefanobaghino
stefanobaghino

%d y %s son marcadores de posición, funcionan como una variable reemplazable. Por ejemplo, si crea 2 variables

variable_one = "Stackoverflow"
variable_two = 45

puede asignar esas variables a una oración en una cadena usando una tupla de las variables.

variable_3 = "I was searching for an answer in %s and found more than %d answers to my question"

Tenga en cuenta que %s funciona para String y %d trabajo para variables numéricas o decimales.

si imprimes variable_3 se vería así

print(variable_3 % (variable_one, variable_two))

Estaba buscando una respuesta en StackOverflow y encontré más de 45 respuestas a mi pregunta.

¿Ha sido útil esta solución?