将迭代项转换为字符串

时间:2013-03-01 19:16:31

标签: python iteration

这是我的代码:

def getGuessedWordd(secretWord, lettersGuessed):
    lga = "".join(lettersGuessed)
    swa = "".join(secretWord)
    jihadi = str()
    jihad=" "
    for c in swa:

        if c in lga:
            print c

        if c not in lga:
            print "_"

所有值的打印输出如下:

一 p p 升 ë

我希望在迭代完成后将其打印为'apple'。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

有三种方法可以解决这个问题。

首先,你没有理由在找到它们时逐个打印出这些字符。相反,将它们累积到list(或更好,yield它们),然后join结果并在结尾打印出来。

例如:

def getGuessedWordd(secretWord, lettersGuessed):
    lga = "".join(lettersGuessed)
    swa = "".join(secretWord)
    jihadi = str()
    jihad=" "
    result = []
    for c in swa:    
        if c in lga:
            result.append(c) 
        if c not in lga:
            result.append("_")
    print "".join(result)

其次,如果您必须在找到它们时打印它们,则无法使用print。使用sys.stdout.write

第三,如果你可以升级到Python 3,那么你可以 使用print


您可以通过其他几种方法来改进此代码:

  • 无需lgaswa。如果lettersGuessedsecretWord已经是字符串,则"".join(lettersGuessed)lettersGuessed完全相同。但是,更重要的是,即使lettersGuessed是一些完全不同的字符序列,也没关系,因为你用它们做的唯一事情是forin检查。 / LI>
  • 您定义了两个从不使用的变量,jihadjihadi
  • 没有理由使用str();它和""一样。
  • 没有理由写两个条件完全相反的if语句;只需使用else

所以,我们可以简化整个事情:

def getGuessedWordd(secretWord, lettersGuessed):
    result = []
    for c in secretWord:
        if c in lettersGuessed:
            result.append(c) 
        else:
            result.append("_")
    print "".join(result)

一旦你这样做,很明显循环与列表理解相同:

def getGuessedWordd(secretWord, lettersGuessed):
    result = [c if c in lettersGuessed else '_' for c in secretWord]
    print "".join(result)

答案 1 :(得分:0)

您想导入sys并使用sys.stdout.write(c)