我对以下代码感到疯狂,这些代码应该非常简单但不起作用:/
class Triangulo_String:
_string = ''
_iteraciones = 0
_string_a_repetir = ''
def __init__(self, string_a_repetir, iteraciones):
self._string_a_repetir = string_a_repetir
self._iteraciones = iteraciones
def concatenar(self):
for i in range(0, self._iteraciones, 1):
self._string = self._string_a_repetir + self._string + '\n'
我正在初始化_iteraciones
到3
和_string_a_repetir
到'*'
输出只是:
***
当我期待:
*
**
***
我已经调试了它,在进行连接时,它只是连接self._string_a_repetir,而不是_string和换行符。
这么容易让我发疯._。
答案 0 :(得分:3)
相关位在此部分:
var obj = {...};
var deferred = $.Deferred();
deferred.done(function(){ /*.. asynchronous function here ..*/ });
for (var key in obj) {
if (!obj[key]["something"]) {
deferred.resolve();
}
}
让我们逐个完成迭代:
for i in range(0, self._iteraciones, 1):
self._string = self._string_a_repetir + self._string + '\n'
正如你所看到的,这完全有望发生,因为你不会每行多次重复这个角色。而且你也错误地将前一个字符串与新字符串连接起来(将它放在当前行的文本和换行符之间)。
您正在寻找的是这样的:
# Initially
_string = ''
_string_a_repetir = '*'
_iteraciones = 3
# i = 0
_string = _string_a_repetir + _string + '\n'
= '*' + '' + '\n'
= '*\n'
# i = 1
_string = _string_a_repetir + _string + '\n'
= '*' + '*\n' + '\n'
= '**\n\n'
# i = 2
_string = _string_a_repetir + _string + '\n'
= '*' + '**\n\n' + '\n'
= '***\n\n\n'
for i in range(0, self._iteraciones, 1):
self._string = self._string + (self._string_a_repetir * (i + 1)) + '\n'
可以在string * number
次重复string
。
总的来说,你不应该那样使用那些类成员:
number
这会将这些成员创建为 class 变量,这些变量在其所有实例之间共享。如果您从不更改类成员,这不是直接问题,但以后可能会引起混淆。您应该初始化class Triangulo_String:
_string = ''
_iteraciones = 0
_string_a_repetir = ''
中的所有实例属性:
__init__