Python中的字符串连接

2024-04-29 14:05:08 发布

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

是的,我知道这个小问题很糟糕,但我正在尝试Python,我想它会很简单。我很难搞清楚本地数据类型在Python中是如何交互的。在这里,我试图将lyrics的不同部分连接成一个长字符串,该字符串将作为输出返回。

尝试运行脚本时收到的错误是“type error:无法连接'str'和'tuple'对象”。我将所有不是字符串的内容都放在函数str()中,但显然有些内容仍然是“tuple”(以前从未使用过的数据类型)。

有人能告诉我如何将其中的元组转换成一个字符串,这样就可以顺利地连接起来吗?

(p.S.我使用变量“Copy”,因为我不确定当我减少另一个变量时,它是否会破坏for循环构造。会吗?)

#99 bottles of beer on the wall lyrics

def BottlesOfBeerLyrics(NumOfBottlesOfBeer = 99):
        BottlesOfBeer = NumOfBottlesOfBeer
        Copy = BottlesOfBeer
        Lyrics = ''

        for i in range(Copy):
                Lyrics += BottlesOfBeer, " bottles of beer on the wall, ", str(BottlesOfBeer), " bottles of beer. \n", \
                "Take one down and pass it around, ", str(BottlesOfBeer - 1), " bottles of beer on the wall. \n"

                if (BottlesOfBeer > 1):
                        Lyrics += "\n"

                BottlesOfBeer -= 1

        return Lyrics

print BottlesOfBeerLyrics(99)

有些人建议建立一个列表并加入它。我编辑了一点,我认为这是你们的意思,但你能告诉我这是不是首选的方法?

#99 bottles of beer on the wall lyrics - list method

def BottlesOfBeerLyrics(NumOfBottlesOfBeer = 99):
        BottlesOfBeer = NumOfBottlesOfBeer
        Copy = BottlesOfBeer
        Lyrics = []

        for i in range(Copy):
                Lyrics += str(BottlesOfBeer) + " bottles of beer on the wall, " + str(BottlesOfBeer) + " bottles of beer. \n" + \
                "Take one down and pass it around, " + str(BottlesOfBeer - 1) + " bottles of beer on the wall. \n"

                if (BottlesOfBeer > 1):
                        Lyrics += "\n"

                BottlesOfBeer -= 1

        return "".join(Lyrics)

print BottlesOfBeerLyrics(99)

Tags: ofthe字符串foroncopywallstr
3条回答

不要对此使用字符串连接。将字符串放入列表中,并在最后加入列表。我还建议使用str.format

verse = "{0} bottles of beer on the wall, {0} bottles of beer.\n" \
        "Take one down and pass it around, {1} bottles of beer on the wall.\n"

def bottles_of_beer_lyrics(bottles=99):
    lyrics = []
    for x in range(bottles, 0, -1):
        lyrics.append(verse.format(x, x-1))
    return '\n'.join(lyrics)

还可以使用生成器表达式更直接地获得结果:

def bottles_of_beer_lyrics(bottles=99):
    return '\n'.join(verse.format(x, x-1) for x in range(bottles, 0, -1))

最后一点,你应该注意“1瓶”在语法上是不正确的。您可能需要创建一个函数,该函数可以根据数字为您提供正确的“瓶子”形式。如果国际化是一个问题(我知道可能不是),那么您还应该知道some languages的形式不仅仅是“单数”和“复数”。

Lyrics +=左边的逗号分隔列表正在定义一个“元组”。

您需要将“,”更改为“+”,因为字符串连接不采用逗号分隔的值列表。

另外,考虑建立一个字符串列表来连接,然后使用“join”方法。

逗号运算符创建元组。“歌词+=…”一行在右侧创建一个元组。

要在Python中连接字符串,请使用“+”运算符。

Lyrics += str(BottlesOfBeer) + " bottles of beer..." + ...

然而,这仍然不是这类事情的首选方法,但是对于学习字符串连接来说是很好的。

相关问题 更多 >