O programa deve incluir dois nomes e, se tiverem o mesmo tamanho, deve verificar se têm a mesma palavra. Se for a mesma palavra, será exibido "Os nomes são os mesmos" . Se tiverem o mesmo comprimento, mas com letras diferentes, será impresso "Os nomes são diferentes, mas com o mesmo comprimento" . A parte com a qual estou tendo problemas está nas quatro linhas 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)
Quando executo esse código, ele exibe:
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
Todas as sugestões são muito apreciadas.
fonte
f"'It will cost ${your_variable} dollars."
O erro está na sua formatação de string.
A maneira correta de usar a formatação de string tradicional usando o operador '%' é usar uma string de formato no estilo printf (documentação em Python para isso aqui: http://docs.python.org/2/library/string.html#format- sintaxe da string ):
No entanto, o operador '%' provavelmente será preterido no futuro . A nova maneira de fazer as coisas PEP 3101 é assim:
fonte
{}
3.2 aprendeu como formatar com o novo estilo . E de repente 3.5 traz o PEP 461:%
formatação para bytes . Isso me faz pensar nos%
restos por muito tempo.%
é mais conciso. Ainda bem que fica conosco."'%s' is longer than '%s'" % (name1, name2)
mais conciso do quef"'{name1}' is longer than '{name2}'"
Para mim, esse erro foi causado quando eu estava tentando passar uma tupla para o método de formato de string.
Encontrei a solução desta pergunta / resposta
Copiando e colando a resposta correta do link (NÃO MEU TRABALHO) :
fonte
print("this is a tuple: %s" % str(thetuple))
ouprint("this is a tuple: %s" % repr(thetuple))
No meu caso, é porque eu preciso apenas de uma única
%s
entrada de valores ausentes.fonte
Além das outras duas respostas, acho que os recuos também estão incorretos nas duas últimas condições. As condições são que um nome seja mais longo que o outro e eles precisam começar com 'elif' e sem recuos. Se você colocá-lo na primeira condição (dando quatro recuos na margem), isso acaba sendo contraditório, pois os comprimentos dos nomes não podem ser iguais e diferentes ao mesmo tempo.
fonte
Há uma combinação de problemas, conforme apontado em algumas das outras respostas.
Forneci o exemplo de .format e também a transmissão de tuplas para o especificador de argumento de% s. Nos dois casos, o recuo foi corrigido de forma que seja maior / menor que as verificações externas quando o comprimento corresponder. Também foram alteradas as instruções if subsequentes para elif, para que sejam executadas apenas se a instrução anterior no mesmo nível for False.
Formatação de seqüência de caracteres com .format
Formatação de string com% se uma tupla
fonte
No python 3.7 e acima, há uma maneira nova e fácil. aqui está a sintaxe:
Resultado:
fonte
Para mim, como eu estava armazenando muitos valores em uma única chamada de impressão, a solução foi criar uma variável separada para armazenar os dados como uma tupla e depois chamar a função de impressão.
fonte
Eu também encontro o erro,
Mas argumentos de lista funcionam bem.
Eu uso o mysqlclient python lib. A lib parece não aceitar argumentos de tupla. Para passar a lista args como
['arg1', 'arg2']
irá funcionar.fonte
consulta sql raw do django na exibição
fonte