長い文字列置換を扱う問題です。
"%%%s%%%%%%%%%%%%ss"%"d"%1%"%"%()%"2"文字列のプレースホルダによるフォーマットは%演算子でも可です。
s"{1}"や"{}".format(1)と同じです。
>>> print("%s" % 1)
"1"%プレースホルダを使う時に文字列としての%は%%と表現します。
>>> print("%d%%" % 100)
"100%"%演算子を複数使って繋げる事が可能です。
プレースホルダのフォーマットは前から処理されます。
以下は%%%sが%sに置換され、その後に%sが1に置換される例です。
>>> print("%%%s" % "s" % 1)
"1"tupleやdictで複数のプレースホルダをまとめて扱えます。 空のtupleを渡した場合は何も変換されません。
>>> print("%s%d" % (1,2))
"12"
>>> print("1" % ())
"1"上記の点を利用して問題を前から実行して見ていきます。
最初の%演算子でいくつかの%%が%に、%sがdに置換されます。
>>> print("%%%s%%%%%%%%%%%%ss" % "d")
"%d%%%%%%ss"2つ目の%演算子で先頭に1が入ります。
>>> print("%d%%%%%%ss" % 1)
"1%%%ss"3つ目の%演算子で%sが%に置換されます。
>>> print("1%%%ss" % "%")
"1%%s"4つ目の%演算子では空のtupleが渡されているので何も置換されません。
よって%%が%になるだけです。
>>> print("1%%s" % ())
"1%s"最後の%演算子では素直に2が入ります。
>>> print("1%s" % 2)
"12"というわけで、"%%%s%%%%%%%%%%%%ss"%"d"%1%"%"%()%"2"は12でした。