字符串是否等效+ =?
即:
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
。
答案 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
答案 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
的整数中(是的,它也是一个整数)..这会导致错误,因为它是非法的由于INT
和WORD
的工作方式,它们只是不同,因此您需要在将它们合并到同一个变量之前对其中一个进行处理。
如何调试自己的代码:尝试执行print(type(x), type(y))
并获得两个变量的差异。可能会帮助您解决这个问题。
解决方案是y = str(x)
因为您重新定义了y
循环的每次迭代while
y = x
&lt; - 使Y
成为一个int,因为那是x
的原因:)
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个案中,为什么会这样?我只是按照您提供代码的方式离开了它,但其余部分elif
或why 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...')
请告诉我这个特别糟糕的代码(我有写作的习惯)。