Formatting using a variable number of .format( ) arguments in Python
我似乎找不到一个简单的方法来制作代码,它可以找到要格式化的项目数量,向用户请求参数,并将它们格式化为原始表单。
我尝试做的一个基本示例如下(用户输入在">>>"之后开始):
1 2 3 4 | >>> 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())显示格式化的输入:
1 | Hello Zero Goodbye One |
号
但是,如果表单有3个参数,它将要求参数0、1和2:
1 2 3 4 5 6 | >>> 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()"调整为要格式化的内容的数量。
编辑:处理此问题的最佳方法似乎是列出输入,并使用form.format(*list)格式化输入。谢谢大家!
1 2 3 4 5 6 7 8 | 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) |
以下是修改后的Kindall答案,允许非空格式字符串的空结果:
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
最简单的方法是简单地尝试使用您拥有的任何数据进行格式化,如果您得到一个
1 2 3 4 5 6 7 8 9 10 11 | 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 |
号
您只需在最后一个参数名前面使用*即可,随后的所有参数名都将被分组到该参数名中。然后您可以根据需要迭代该列表。
如何在python中创建变量参数列表