reemplazar - string en python
TypeError: no todos los argumentos convertidos durante el formato de cadenas python (6)
Se supone que el programa debe incluir dos nombres, y si tienen la misma longitud, debe verificar si son la misma palabra. Si es la misma palabra, se imprimirá "Los nombres son los mismos" . Si tienen la misma longitud pero con letras diferentes, se imprimirá "Los nombres son diferentes pero tienen la misma longitud" . La parte con la que tengo un problema está en las últimas 4 líneas.
#!/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, aparece:
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.
Además de las otras dos respuestas, creo que las sangrías también son incorrectas en las dos últimas condiciones. Las condiciones son que un nombre es más largo que el otro y deben comenzar con ''elif'' y sin sangrías. Si lo pones dentro de la primera condición (dándole cuatro indentaciones desde el margen), termina siendo contradictorio porque las longitudes de los nombres no pueden ser iguales y diferentes al mismo tiempo.
else:
print ("The names are different, but are the same length")
elif len(name1) > len(name2):
print ("{0} is longer than {1}".format(name1, name2))
El error está en tu formateo de cadena.
La forma correcta de utilizar el formato de cadena tradicional con el operador ''%'' es utilizar una cadena de formato estilo printf (la documentación de Python para esto aquí: http://docs.python.org/2/library/string.html#format-string-syntax ):
"''%s'' is longer than ''%s''" % (name1, name2)
Sin embargo, el operador ''%'' probablemente se desaprovechará en el futuro . La nueva forma de hacer PEP 3101 es así:
"''{0}'' is longer than ''{1}''".format(name1, name2)
En mi caso, es porque necesito solo un solo %s
, me faltan valores de entrada.
Estás mezclando diferentes funciones de formato.
El formato de %
estilo antiguo usa %
códigos para formatear:
''It will cost $%d dollars.'' % 95
El formato de estilo nuevo {}
usa códigos {}
y el método .format
''It will cost ${0} dollars.''.format(95)
Tenga en cuenta que con el formateo de estilo antiguo, debe especificar múltiples argumentos usando una tupla:
''%d days and %d nights'' % (40, 40)
En su caso, dado que está utilizando {}
especificadores de formato, use .format
:
"''{0}'' is longer than ''{1}''".format(name1, name2)
Para mí, este error fue causado cuando estaba tratando de pasar una tupla en el método de formato de cadena.
Encontré la solución de esta pregunta / respuesta
Copiando y pegando la respuesta correcta del enlace (NO ES MI TRABAJO) :
>>> thetuple = (1, 2, 3)
>>> print "this is a tuple: %s" % (thetuple,)
this is a tuple: (1, 2, 3)
Hacer una tupla singleton con la tupla de interés como el único elemento, es decir, la parte (thetuple,), es la clave aquí.
También encuentro el error,
_mysql_exceptions.ProgrammingError: not all arguments converted during string formatting
Pero los argumentos de la lista funcionan bien.
Yo uso mysqlclient python lib. La lib parece no aceptar tuple args. Para pasar lista args como [''arg1'', ''arg2'']
funcionará.