字符串等价于+ =

时间:2014-03-07 07:48:21

标签: python string python-2.7

字符串是否等效+ =?

即:

x = 1
while x <= 100:
    y = x
    if x % 3 == 0:
        y = 'Fizz'
    if x % 5 == 0:
        y += 'Buzz'
    if x % 7 == 0:
        y += 'Foo'
    if x % 11 == 0:
        y += 'Bar'
    print y
    x += 1
raw_input('Press enter to exit...')

如果应用与数字相同的规则,则应返回a string and a second string。是否有可能做到这一点?因为这样做会返回TypeError: unsupported operand type(s) for +=: 'int' and 'str',即使y是一个开头的字符串,也不是int

6 个答案:

答案 0 :(得分:2)

如果你这样做: 您将字符串连接到字符串:

x = 'a string'
x += '6'
print x

如果你这样做: 您将int连接到字符串,以便得到错误:

x = 'a string'
x += 6
print x

错误:

TypeError: cannot concatenate 'str' and 'int' objects

在进行'+'操作之前,你必须确保变量类型;基于变量类型,python可以添加或连接

答案 1 :(得分:0)

那将是s1 += s2

>>> s1 = "a string"
>>> s1 += " and a second string"
>>> s1
'a string and a second string'
>>>

与Perl不同,Python主要拒绝执行隐式转换(数值类型是主要的例外)。要将整数i的字符串表示形式连接到字符串s,您必须编写

s += str(i)

答案 2 :(得分:0)

以下代码适用于Python 2.7.4和Python 3.0:

a='aaa'
a+='bbb'
print(a)
aaabbb

答案 3 :(得分:0)

我不知道,但也许您正在寻找operator

operator.iadd(a, b)¶
operator.__iadd__(a, b)
a = iadd(a, b) is equivalent to a += b.

http://docs.python.org/2/library/operator.html

x = 'a string'
x += ' and a second string'
print x

operator.iadd(x, ' and a third string')

print x

How can I concatenate a string and a number in Python?

答案 4 :(得分:0)

x = 1
while x <= 100:
    y = str(x)
    if x % 3 == 0:
        y = 'Fizz'
    if x % 5 == 0:
        y += 'Buzz'
    if x % 7 == 0:
        y += 'Foo'
    if x % 11 == 0:
        y += 'Bar'
    print y
    x += 1
raw_input('Press enter to exit...')

这很简单。 您首先将X定义为integer,然后将其放入while循环中。 在每次迭代的最开始,您定义y = x,它基本上告诉python将y设置为整数。

然后根据你得到的x modulus <nr>,你将string添加到名为y的整数中(是的,它也是一个整数)..这会导致错误,因为它是非法的由于INTWORD的工作方式,它们只是不同,因此您需要在将它们合并到同一个变量之前对其中一个进行处理。

如何调试自己的代码:尝试执行print(type(x), type(y))并获得两个变量的差异。可能会帮助您解决这个问题。

解决方案是y = str(x)

所以,没有.. Y不是以

开头的字符串

因为您重新定义了y循环的每次迭代while y = x&lt; - 使Y成为一个int,因为那是x的原因:)

另外,请尝试使用.format()

x = 1
while x <= 100:
    y = x
    if x % 3 == 0:
        y = '{0}Fizz'.format(x)
    if x % 5 == 0:
        y += '{0}Buzz'.format(x)
    if x % 7 == 0:
        y += '{0}Foo'.format(x)
    if x % 11 == 0:
        y += '{0}Bar'.format(x)
    print y
    x += 1
raw_input('Press enter to exit...')

另一个人观察是,如果您x % 3 == 0替换y = ...,但是在y附加的所有其他if个案中,为什么会这样?我只是按照您提供代码的方式离开了它,但其余部分elifwhy not concade on all 's

答案 5 :(得分:0)

我设法使用isinstance()

修复了它
x = 1
while x <= 100:
    y = x
    if x % 3 == 0:
        y = 'Fizz'
    if x % 5 == 0:
        if isinstance(y, str):
            y += 'Buzz'
        else:
            y = 'Buzz'
    if x % 7 == 0:
        if isinstance(y, str):
            y += 'Foo'
        else:
            y = 'Foo'
    if x % 11 == 0:
        if isinstance(y, str):
            y += 'Bar'
        else:
           y = 'Bar'
    print y
    x += 1
raw_input('Press enter to exit...')

请告诉我这个特别糟糕的代码(我有写作的习惯)。