3

我似乎无法找到一种直接的方法来编写代码来查找要格式化的项目数,向用户询问参数,并将它们格式化为原始形式。

我正在尝试做的一个基本示例如下(用户输入在“>>>”之后开始):

>>> test.py
What is the form? >>> "{0} Zero {1} One"
What is the value for parameter 0? >>> "Hello"
What is the value for parameter 1? >>> "Goodbye"

然后程序将使用 print(form.format()) 来显示格式化的输入:

Hello Zero Goodbye One

但是,如果表单有 3 个参数,它会要求参数 0、1 和 2:

>>> test.py (same file)
What is the form? >>> "{0} Zero {1} One {2} Two"
What is the value for parameter 0? >>> "Hello"
What is the value for parameter 1? >>> "Goodbye"
What is the value for parameter 2? >>> "Hello_Again"
Hello Zero Goodbye One Hello_Again Two

这是我能想到的最基本的应用程序,它将使用可变数量的东西来格式化。我已经想出了如何使用 vars() 来制作我需要的变量,但由于 string.format() 不能接受列表、元组或字符串,我似乎无法让“.format()”调整为要格式化的东西的数量。

4

4 回答 4

6
fmt=raw_input("what is the form? >>>")
nargs=fmt.count('{') #Very simple counting to figure out how many parameters to ask about
args=[]
for i in xrange(nargs):
    args.append(raw_input("What is the value for parameter {0} >>>".format(i)))

fmt.format(*args)
          #^ unpacking operator (sometimes called star operator or splat operator)
于 2012-07-10T21:43:09.610 回答
2

最简单的方法是简单地尝试使用你拥有的任何数据进行格式化,如果你得到一个,IndexError你还没有足够的项目,所以要求另一个。将项目保存在列表中,并*在调用format()方法时使用符号解包。

format = raw_input("What is the format? >>> ")
prompt = "What is the value for parameter {0}? >>> "
parms  = []
result = ""
if format:
    while not result:
        try:
            result = format.format(*parms)
        except IndexError:
             parms.append(raw_input(prompt.format(len(parms))))
print result
于 2012-07-10T21:50:44.477 回答
2

这是一个修改过的 kindall 的答案,它允许非空格式字符串的空结果:

format = raw_input("What is the format? >>> ")
prompt = "What is the value for parameter {0}? >>> "
params  = []

while True:
    try:
        result = format.format(*params)
    except IndexError:
        params.append(raw_input(prompt.format(len(params))))
    else:
        break
print result
于 2012-07-11T15:22:42.010 回答
1

您只需要在最后一个参数名称前使用 *,所有后续参数都将归入该参数名称。然后,您可以根据需要迭代该列表。

如何在 Python 中制作可变参数列表

于 2012-07-10T21:46:03.060 回答