printfの自作
Posted feedbacks - Python
%%, %d, %f, %sに対応。フラグ文字はつけても無視されます。(glib拡張にある'I'など[A-Za-z]にマッチするフラグがあった場合、結果がおかしくなるかエラーになります)
14行目、int(arg.next()).__str__()でなくstr(int(arg.next()))とすると
elif fmt[-1] == "d": return str(int(arg.next()))
TypeError: 'str' object is not callable
のようなエラーが出たので__str__()を使いました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | import re
def sprintf(str, *args):
def getPercent():
index = str.find("%")
while index != -1:
yield index
t = str[index+2:].find("%")
if t == -1: raise StopIteration
index += t + 2
def parseFormat(fmt, arg):
if fmt[-1] == "%": return "%"
elif fmt[-1] == "d": return int(arg.next()).__str__()
elif fmt[-1] == "s": return arg.next().__str__()
elif fmt[-1] == "f": return float(arg.next()).__str__()
else: return "__Error or Unsupported__"
s = ""
arg = (i for i in args)
index = 0
for i in getPercent():
s += str[index:i]
fmt = re.match("%.*?[A-Za-z%]", str[i:]).group()
s += parseFormat(fmt, arg)
index = i + len(fmt)
s += str[index:]
return s
print sprintf("%d, %s%d(%s)", 2007, "Nov.", 27, "Tue") # => 2007, Nov.27(Tue)
print sprintf("%d/%d = %f%%", 12, 34, 12.0/34*100) # => 12/34 = 35.2941176471%
|

yappy
#4119()
[
C
]
Rating-2/20=-0.10
Rating-2/20=-0.10-0+
[ reply ]