【问题标题】:Dynamic concatenated string creation in PythonPython中的动态连接字符串创建
【发布时间】:2013-11-20 20:37:10
【问题描述】:

the problem I'm working on

所以我正在创建一个“澳大利亚”选票应用程序,并且我正在寻找输入提示的创造性解决方案。

基本上用户输入多少人,然后最多提交 1000 票或 w/e。

假设有 3 个候选人,输入提示将如下所示:

ballot = raw_input('1 for %s: 2 for %s: 3 for %s: ') % (cand_list[0], cand_list[1], cand_list[2])

但我真正想提出的是动态提示(假设用户输入 5、10、w/e 候选人数)

我已经研究过将选票分配和打印分开,或者创建一个完全独立的选票字符串并传递它(假设我可以制作某种字符串生成器函数),但我很想看到其他方法。仍在修补它,看看我是否需要转义 % 格式。

Python Stringbuilder(sort of)More string concat

【问题讨论】:

    标签: python string loops


    【解决方案1】:

    类似这样的使用字符串格式,str.joinenumerate:

    >>> candidates = ['foo', 'bar', 'spam']
    >>> print ' : '.join('{} for {}'.format(i, c) for i, c in enumerate(candidates, 1))
    1 for foo : 2 for bar : 3 for spam
    
    >>> candidates = ['foo', 'bar', 'spam', 'python', 'guido']
    >>> print ' : '.join('{} for {}'.format(i, c) for i, c in enumerate(candidates, 1))
    1 for foo : 2 for bar : 3 for spam : 4 for python : 5 for guido
    

    【讨论】:

    • 为什么使用压缩范围而不是enumerate(canidates,1)
    • 效果很好!我会在枚举后修改换行符
    【解决方案2】:

    分阶段分别构造你的格式字符串:

    inner_format_string = "{num} for %s: "
    full_format_string = " ".join(inner_format_string.format(num=i) for i in xrange(1, len(cand_list) + 1))
    
    ballot = raw_input(full_format_string % tuple(cand_list))
    

    【讨论】:

      【解决方案3】:
      canidates = ["Frank","Bill","Joe","Suzy"]
      raw_input(", ".join("Enter %d For %s"%(num,canidate) for num,canidate in enumerate(canidates,1)))
      

      也许

      【讨论】:

      • 几乎完美,只需要防止在每个候选人之后换行
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2011-12-11
      • 1970-01-01
      • 2013-12-03
      • 2017-02-22
      • 1970-01-01
      • 2010-12-24
      相关资源
      最近更新 更多