プログラムは2つの名前を取り入れることになっています、そして、それらが同じ長さであれば、それらが同じWordであるかどうかをチェックするべきです。同じWordであれば "名前は同じです" と表示されます。それらが同じ長さであるが異なる文字であるならば、それは印刷するでしょう "名前は異なるが同じ長さである" 。私が問題を抱えている部分は下の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
任意の提案は大歓迎です。
あなたはさまざまなフォーマット関数を混在させています。
古いスタイルの%
フォーマットはフォーマットに%
コードを使います:
'It will cost $%d dollars.' % 95
新しいスタイルの{}
フォーマットは{}
コードと.format
メソッドを使います
'It will cost ${0} dollars.'.format(95)
古いスタイルのフォーマットでは、Tupleを使って複数の引数を指定しなければならないことに注意してください。
'%d days and %d nights' % (40, 40)
あなたの場合は{}
フォーマット指定子を使っているので、.format
を使います:
"'{0}' is longer than '{1}'".format(name1, name2)
エラーは文字列のフォーマットにあります。
'%'演算子を使用して従来の文字列フォーマットを使用する正しい方法は、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)
私にとっては、このエラーは私がTupleを文字列フォーマットメソッドに渡そうとした時に起こりました。
リンクから正しい答えをコピーして貼り付ける (NOT MY WORK) :
>>> thetuple = (1, 2, 3)
>>> print "this is a Tuple: %s" % (thetuple,)
this is a Tuple: (1, 2, 3)
関心のあるタプルを唯一の項目、すなわち(thetuple)部分としてシングルトンタプルを作ることがここでの重要なポイントです。
私の場合は、%s
が1つだけ必要なため、値の入力がありません。
他の2つの答えに加えて、私は字下げも最後の2つの条件では正しくないと思います。条件は、一方の名前が他方の名前よりも長いこと、そしてそれらは 'Elif'で始まり、字下げがないことが必要であるということです。最初の条件内に入れると(マージンから4つのインデントを付けることによって)、名前の長さが同じで異なることはあり得ないため、矛盾することになります。
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))
他のいくつかの答えで指摘されているように問題の組み合わせがあります。
.formatの例と%sの引数指定子にタプルを渡す方法の両方を提供しました。どちらの場合も、長さが一致する場合のチェック数の外側/外側のインデントは非常に大きい/小さいです。また、後続のif文をElifのものに変更したため、前の同じレベルの文がFalseの場合にのみ実行されます。
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")
Elif len(name1) > len(name2):
print ("{0} is longer than {1}".format(name1, name2))
Elif len(name1) < len(name2):
print ("{0} is longer than {1}".format(name2, name1))
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")
Elif len(name1) > len(name2):
print ("%s is longer than %s" % (name1, name2))
Elif len(name1) < len(name2):
print ("%s is longer than %s" % (name2, name1))
Djangoの生SQLクエリビュー
"SELECT * FROM VendorReport_vehicledamage WHERE requestdate BETWEEN '{0}' AND '{1}'".format(date_from, date_to)
models.py
class VehicleDamage(models.Model):
requestdate = models.DateTimeField("requestdate")
vendor_name = models.CharField("vendor_name", max_length=50)
class Meta:
managed=False
views.py
def location_damageReports(request):
#static date for testing
date_from = '2019-11-01'
date_to = '2019-21-01'
vehicle_damage_reports = VehicleDamage.objects.raw("SELECT * FROM VendorReport_vehicledamage WHERE requestdate BETWEEN '{0}' AND '{1}'".format(date_from, date_to))
damage_report = DashboardDamageReportSerializer(vehicle_damage_reports, many=True)
data={"data": damage_report.data}
return HttpResponse(json.dumps(data), content_type="application/json")
注:python 3.5とDjango 1.11を使う
私もエラーに遭遇します、
_mysql_exceptions.ProgrammingError: not all arguments converted during string formatting
しかし、リスト引数はうまく機能します。
私はmysqlclient python libを使用しています。ライブラリはタプル引数を受け付けないようです。 ['arg1', 'arg2']
のようなリスト引数を渡すことはうまくいきます。