将迭代项转换为字符串

2024-09-29 20:20:25 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的密码:

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 "_"

所有值打印如下:

a 第 第 我 电子

我想在迭代完成后把它打印成“apple”。我该怎么做?你知道吗


Tags: in密码forifdefprintjoinstr
2条回答

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

有三种方法可以解决这个问题。你知道吗

首先,你没有理由一个接一个地打印出你找到的字符。相反,将它们累积成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。你知道吗

第三,如果您可以升级到python3,那么您就可以使用print。你知道吗


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

  • 不需要lgaswa。如果lettersGuessedsecretWord已经是字符串,"".join(lettersGuessed)lettersGuessed完全相同。但是,更重要的是,即使lettersGuessed是一些完全不同的字符序列,这也无关紧要,因为你唯一要做的就是forin检查。你知道吗
  • 您定义了两个从未使用过的变量,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)

相关问题 更多 >

    热门问题