我正在进行一个类赋值,它要求我将%后跟一个数字替换为相应的位置参数(如果有的话,假设只给出了这样的数字和必需的参数)。我一直试图解决这个问题几个小时没有用。搜索Stack Overflow和web,但之前提出的问题只能用一些很容易的东西替换整数。
例: 格式化(“Exodus%0”,“Moses”) - >应该返回“Exodus Moses”
格式化(“Exodus%0和%1”,“Kings”,“Gods”) - >应该归还“Exodus Kings and Gods”
格式化(“出埃及记%1和%0”,“国王”,“众神”) - >应该回归“出埃及神和国王”
从它的外观来看,我认为函数格式化原型将是
def formatting(inputstring, *args):
到目前为止我尝试过的事情
1.for循环以天真地将%number替换为其对应的参数
for length in len(args):
temp=temp.replace("%length","arg[length]")
当然这不会起作用,因为它们是字符串而不是整数
2.使用inputstring.format()返回所需的字符串。 问题是由不同的args长度引起的 例如:
if len(args) == 1:
return inputstring.replace("%0",args[0])
if len(args) == 2:
inputstring = inputstring.replace("%0",args[0])
return inputstring.replace("%1",args[1])
很容易就行了!但感觉不对,很多论点都很麻烦 尝试在一个循环中做这个没有成功
请帮忙 谢谢!
答案 0 :(得分:1)
你几乎在这里:
for length in xrange(len(args)):
temp = temp.replace("%length","arg[length]")
考虑:
>>> s = "Hello %length there %0 man"
>>> length = 0
>>> args = ["something"]
如果你做了替换,你会发生错误的事情:
>>> s.replace("%length", "args[length]")
'Hello args[length] there %0 man'
你想最终这样做:
>>> s.replace("%0", "something")
'Hello %length there something man'
怎么做?对于给定的索引,您必须构造字符串"%"
,后跟索引,然后从args
中获取该值:
>>> i = 0
>>> "%" + str(i)
'%0'
>>> args[i]
'something'
>>> s.replace("%" + str(i), args[i])
'Hello %length there something man'
所以你的循环必须如下所示:
>>> for i in xrange(len(args)):
temp = temp.replace("%" + str(i), args[i])
或者,更热门的是,您可以使用enumerate
,它允许您遍历列表并同时获取索引:
>>> for i, arg in enumerate(args):
temp = temp.replace("%" + str(i), arg)