Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将%替换为字符串中的数字_Python_Arrays_Python 2.7_Python 3.x_Formatting - Fatal编程技术网

Python 将%替换为字符串中的数字

Python 将%替换为字符串中的数字,python,arrays,python-2.7,python-3.x,formatting,Python,Arrays,Python 2.7,Python 3.x,Formatting,我正在处理一个类赋值,它要求我将%后跟一个数字替换为相应的位置参数(如果有,假设只给出了这些数字和必需的参数).我已经试着解决这个问题好几个小时了,但都没有用。搜索了堆栈溢出和web,但以前问的问题只是用简单的东西替换整数 例: 格式化(“出埃及记%0”,“摩西”)-->应返回“出埃及记摩西” 格式化(“出埃及记%0和%1”、“国王”、“神”)-->应返回“出埃及记国王和神” 格式化(“出埃及记%1和%0”、“国王”、“诸神”)-->应返回“出埃及记诸神和国王” 从外观上看,我认为函数格式化原型

我正在处理一个类赋值,它要求我将%后跟一个数字替换为相应的位置参数(如果有,假设只给出了这些数字和必需的参数).我已经试着解决这个问题好几个小时了,但都没有用。搜索了堆栈溢出和web,但以前问的问题只是用简单的东西替换整数

例: 格式化(“出埃及记%0”,“摩西”)-->应返回“出埃及记摩西”

格式化(“出埃及记%0和%1”、“国王”、“神”)-->应返回“出埃及记国王和神”

格式化(“出埃及记%1和%0”、“国王”、“诸神”)-->应返回“出埃及记诸神和国王”

从外观上看,我认为函数格式化原型应该是

def formatting(inputstring, *args):
到目前为止我已经尝试过的事情

1.for循环将%number简单地替换为其相应的参数

for length in len(args):
    temp=temp.replace("%length","arg[length]")        
当然,这不起作用,因为它们是字符串而不是整数

2.使用inputstring.format()返回所需字符串。 问题是由不同的args长度引起的 例:

很简单,它能工作!但是感觉不对,很多争论都很麻烦 在一个循环中尝试这样做没有成功

请帮忙
谢谢

你差点就把它弄到手了:

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'
怎么做?对于给定的索引,必须先构造字符串
“%”
,然后再构造索引,然后从
参数中获取该值:

>>> 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])
或者,更通俗地说,您可以使用
枚举
,它允许您迭代列表,同时获取索引:

>>> for i, arg in enumerate(args):
        temp = temp.replace("%" + str(i), arg)

当然,Python已经有了自动完成这类工作的打印语句。在这里检查:考虑<代码>枚举(ARGs)…@ RoBrthARVEY:可能,但这是一个作业,我猜他们希望学生们去做。manually@RobertHarvey:我在该页上找到的最接近的字符串是str.format(),它本质上希望嵌入格式为{number}的字符串,而不是%number,虽然我可能错了,但我必须使用
enumerate
而不是在索引上循环:
对于枚举(args)中的idx,val:temp=temp.replace(“%{0}”)。format(idx,val)
如果args的数量超过9,这将有问题。@Daniel:我知道,但我将它保持在初级水平。我想我可以添加一个“高级”部分。@Claudiu:啊,太好了,你搞定了!谢谢你,这让我发疯了。关于参数计数是否大于一位数有什么想法吗?@solinvictus:我想这是规范的问题,但您可以反向迭代:
对于I,反向arg(枚举(args)):
。这样,较大的数字将首先被替换,而不会被较小的数字所混淆。
>>> for i, arg in enumerate(args):
        temp = temp.replace("%" + str(i), arg)