Se supone que el programa toma dos nombres, y si tienen la misma longitud, debe verificar si son la misma palabra. Si es la misma palabra, imprimirá "Los nombres son iguales" . Si tienen la misma longitud pero con letras diferentes, imprimirá "Los nombres son diferentes pero tienen la misma longitud" . La parte con la que tengo un problema está en las 4 líneas inferiores.
#!/usr/bin/env python
# Enter your code for "What's In (The Length Of) A Name?" here.
name1 = input("Enter name 1: ")
name2 = input("Enter name 2: ")
len(name1)
len(name2)
if len(name1) == len(name2):
if name1 == name2:
print ("The names are the same")
else:
print ("The names are different, but are the same length")
if len(name1) > len(name2):
print ("'{0}' is longer than '{1}'"% name1, name2)
elif len(name1) < len(name2):
print ("'{0}'is longer than '{1}'"% name2, name1)
Cuando ejecuto este código, muestra:
Traceback (most recent call last):
File "program.py", line 13, in <module>
print ("'{0}' is longer than '{1}'"% name1, name2)
TypeError: not all arguments converted during string formatting
Cualquier sugerencia es altamente apreciada.
fuente
f"'It will cost ${your_variable} dollars."
El error está en el formato de su cadena.
La forma correcta de usar el formato de cadena tradicional usando el operador '%' es usar una cadena de formato de estilo printf (documentación de Python para esto aquí: http://docs.python.org/2/library/string.html#format- sintaxis de cadena ):
Sin embargo, el operador '%' probablemente quedará obsoleto en el futuro . La nueva forma de hacer las cosas PEP 3101 es así:
fuente
{}
3.2 aprendió a formatear con el nuevo estilo . Y de repente 3.5 trae PEP 461:%
formateo para bytes . Esto me hace pensar en los%
restos durante mucho tiempo por venir.%
Es más conciso. Me alegro de que se quede con nosotros."'%s' is longer than '%s'" % (name1, name2)
más conciso quef"'{name1}' is longer than '{name2}'"
Para mí, este error fue causado cuando intentaba pasar una tupla al método de formato de cadena.
Encontré la solución de esta pregunta / respuesta
Copiar y pegar la respuesta correcta desde el enlace (NO ES MI TRABAJO) :
fuente
print("this is a tuple: %s" % str(thetuple))
oprint("this is a tuple: %s" % repr(thetuple))
En mi caso, es porque solo necesito una sola entrada
%s
, me faltan valores de entrada.fuente
Además de las otras dos respuestas, creo que las muescas también son incorrectas en las últimas dos condiciones. Las condiciones son que un nombre es más largo que el otro y deben comenzar con 'elif' y sin hendiduras. Si lo coloca dentro de la primera condición (dándole cuatro hendiduras desde el margen), termina siendo contradictorio porque las longitudes de los nombres no pueden ser iguales y diferentes al mismo tiempo.
fuente
Hay una combinación de problemas como se señala en algunas de las otras respuestas.
He proporcionado tanto el ejemplo de .format como el paso de tuplas al especificador de argumento de% s. En ambos casos, la sangría se ha corregido de modo que sea mayor / menor que los controles fuera de cuando la longitud coincide. También se cambiaron las declaraciones if posteriores a elif's, por lo que solo se ejecutan si la declaración anterior del mismo nivel era False.
Formateo de cadenas con formato.
Formato de cadena con% sy una tupla
fuente
En Python 3.7 y superior hay una forma nueva y fácil. Aquí está la sintaxis:
Salida:
fuente
Para mí, como estaba almacenando muchos valores dentro de una sola llamada de impresión, la solución fue crear una variable separada para almacenar los datos como una tupla y luego llamar a la función de impresión.
fuente
Me encuentro con el error también,
Pero los argumentos de lista funcionan bien.
Yo uso mysqlclient python lib. Parece que la biblioteca no acepta argumentos de tupla. Para pasar la lista de argumentos como
['arg1', 'arg2']
funcionará.fuente
consulta sql sin procesar de django a la vista
fuente