Подтвердить что ты не робот

TypeError: не все аргументы, преобразованные во время форматирования строки python

Предполагается, что программа должна содержать два имени, и если они имеют одинаковую длину, она должна проверять, являются ли они одним и тем же словом. Если это одно и то же слово, оно напечатает "Имена одинаковы". Если они имеют одинаковую длину, но с разными буквами, она печатает "Имена разные, но одинаковые". Часть, с которой я столкнулась, находится в нижних 4 строках.

#!/usr/bin/env python
# Enter your code for "What 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)

Когда я запускаю этот код, он отображает:

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

Любые предложения приветствуются.

4b9b3361

Ответ 1

Вы смешиваете разные функции формата.

Форматирование % в старом стиле использует % коды для форматирования:

'It will cost $%d dollars.' % 95

В форматировании нового стиля {} используются коды {} и метод .format

'It will cost ${0} dollars.'.format(95)

Обратите внимание, что при форматировании в старом стиле вам нужно указать несколько аргументов с помощью кортежа:

'%d days and %d nights' % (40, 40)

В вашем случае, поскольку вы используете спецификаторы формата {}, используйте .format:

"'{0}' is longer than '{1}'".format(name1, name2)

Ответ 2

Ошибка в форматировании строк.

Правильный способ использования традиционного форматирования строк с использованием оператора "%" состоит в использовании строки формата стиля printf (документация Python для этого здесь: http://docs.python.org/2/library/string.html#format-string-syntax):

"'%s' is longer than '%s'" % (name1, name2)

Однако, оператор "%" вероятно, будет устаревшим в будущем. Новый способ PEP 3101 состоит в следующем:

"'{0}' is longer than '{1}'".format(name1, name2)

Ответ 3

Для меня эта ошибка была вызвана, когда я пытался передать кортеж в метод строкового формата.

Я нашел решение из этого вопроса/ответа

Копирование и вставка правильного ответа из ссылки (НЕ МОЯ РАБОТА):

>>> thetuple = (1, 2, 3)
>>> print "this is a tuple: %s" % (thetuple,)
this is a tuple: (1, 2, 3)

Создание одноэлементного кортежа с кортежем интереса как единственного элемента, то есть часть (thetuple,), является ключевым битом здесь.

Ответ 4

В моем случае это потому, что мне нужен только один %s, я пропускаю значения ввода.

Ответ 5

В дополнение к двум другим ответам, я думаю, что отступы также неверны в двух последних условиях. Условия состоят в том, что одно имя длиннее другого, и им нужно начинать с "elif" и без отступов. Если вы положите его в первое условие (давая ему четыре отступов с поля), он окажется противоречивым, поскольку длины имен не могут быть одинаковыми и разными одновременно.

    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))

Ответ 6

Я также сталкиваюсь с ошибкой,

_mysql_exceptions.ProgrammingError: not all arguments converted during string formatting 

Но список args работает хорошо.

Я использую mysqlclient python lib. Lib выглядит так, чтобы не принимать кортежи args. Чтобы передать список args, как ['arg1', 'arg2'] будет работать.

Ответ 7

IdkIdk Idk Idk Idk Idk Idk Idk Idk Idk Idk Idk Idk Idk Idk Idk Idk Idk Idk Idk Idk Idk Idk