Предполагается, что программа принимает два имени, и если они имеют одинаковую длину, она должна проверить, являются ли они одним словом. Если это одно и то же слово, будет напечатано «Имена одинаковые» . Если они имеют одинаковую длину, но с разными буквами, будет напечатано «Имена разные, но одинаковой длины» . Часть, с которой у меня проблема, находится в нижних 4 строках.
#!/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)
Когда я запускаю этот код, он отображает:
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
Любые предложения высоко ценятся.
источник
f"'It will cost ${your_variable} dollars."
Ошибка в форматировании вашей строки.
Правильный способ использовать традиционное форматирование строки с использованием оператора «%» - это использовать строку формата в стиле printf (документация Python для этого здесь: http://docs.python.org/2/library/string.html#format- строковый синтаксис ):
Тем не менее, оператор '%' , вероятно, будет исключен в будущем . Новый способ PEP 3101 заключается в следующем:
источник
{}
3.2 он научился форматировать в новом стиле . И вдруг 3.5 приносит PEP 461:%
форматирование для байтов . Это заставляет меня думать, что%
останки надолго.%
является более кратким. Рад, что это остается с нами."'%s' is longer than '%s'" % (name1, name2)
более кратко, чемf"'{name1}' is longer than '{name2}'"
Для меня эта ошибка была вызвана, когда я пытался передать кортеж в метод строкового формата.
Я нашел решение из этого вопроса / ответа
Копирование и вставка правильного ответа по ссылке (НЕ МОЯ РАБОТА) :
источник
print("this is a tuple: %s" % str(thetuple))
илиprint("this is a tuple: %s" % repr(thetuple))
В моем случае это потому, что мне нужен только один
%s
, я пропускаю значения ввода.источник
В дополнение к двум другим ответам, я думаю, что отступы также неверны в двух последних условиях. Условия состоят в том, что одно имя длиннее другого, и они должны начинаться с «elif» и без отступов. Если вы поместите его в первое условие (указав четыре отступа от поля), оно окажется противоречивым, потому что длины имен не могут быть одинаковыми и разными в одно и то же время.
источник
Существует несколько вопросов, как указано в нескольких других ответах.
Я предоставил как пример .format, так и передачу кортежей в спецификатор аргумента% s. В обоих случаях отступ был исправлен, поэтому проверки больше, чем когда длина совпадает. Также изменил последующие операторы if на elif, чтобы они выполнялись, только если предыдущий оператор того же уровня был False.
Форматирование строк с помощью .format
Форматирование строки с% s и кортежем
источник
В Python 3.7 и выше есть новый и простой способ. вот синтаксис:
Вывод:
источник
Для меня, поскольку я хранил много значений в одном вызове печати, решением было создать отдельную переменную для хранения данных в виде кортежа, а затем вызвать функцию печати.
источник
Я также сталкиваюсь с ошибкой,
Но список аргументов работает хорошо.
Я использую mysqlclient python lib. Похоже, что lib не принимает аргументы кортежа. Передать список аргументов вроде
['arg1', 'arg2']
будет работать.источник
django raw sql запрос в поле зрения
источник