Python .join[] 将多行的字符串字符总数相乘

Python .join[] multiplys total string characters across multiple lines

我正在做一个个人项目来帮助我理解 python 3.4.2 循环和连接来自多个来源的字符串。

我的目标是 'string' 使用 join 并在内部调用 __len__() 来构建一个字符串,它正在乘以我的结果。我希望长度为 5 然后 10 然后 15。现在它出来 5 然后 25 然后 105。如果我继续我得到 425,1705,6825 等......

我希望我遗漏了一些简单的东西,但任何帮助都会很棒。我也在尝试有效地进行连接(我知道打印不是,那些是为了调试目的。)

我在网上使用了一个可视化的python工具来一步一步看,看看我能不能弄明白。我只是错过了一些东西。 http://www.pythontutor.com/visualize.html#mode=edit

提前致谢!

import random

def main():
    #String values will be pulled from
    string = 'valuehereisheldbythebeholderwhomrolledadtwentyandcriticalmissed'

    #Initial string creation
    strTest = ''
    print('strTest Blank: ' + strTest)

    #first round string generation
    strTest = strTest.join([string[randomIndex(string.__len__())] for i in range(randomLength())])
    print('strTest 1: ' + strTest)
    print('strTest 1 length: ' + str(strTest.__len__()))

    #second round string generation
    strTest = strTest.join([string[randomIndex(string.__len__())] for i in range(randomLength())])
    print('strTest 2: ' + strTest)
    print('strTest 2 length: ' + str(strTest.__len__()))

    #final round string generation
    strTest = strTest.join([string[randomIndex(string.__len__())] for i in range(randomLength())])
    print('strTest 3: ' + strTest)
    print('strTest 3 length: ' + str(strTest.__len__()))

def randomIndex(index):
    #create random value between position 0 and total string length to generate string
    return random.randint(0,index)

def randomLength():
    #return random length for string creation, static for testing
    return 5
    #return random.randint(10,100)

main()
# output desired is 
# strTest 1 length: 5
# strTest 2 length: 10
# strTest 3 length: 15

代码运行没有任何问题,实际上发生的是,每次调用 strTest.join(...) 时,您实际上是在加入每个随机字符,然后从 string 获得的下一个字符与之前的值strTest.

引用自 Python 文档:

str.join(iterable) Return a string which is the concatenation of the strings in the iterable iterable. A TypeError will be raised if there are any non-string values in iterable, including bytes objects. The separator between elements is the string providing this method.

示例:

>>> s = 'ALPHA'
>>> '*'.join(s)
'A*L*P*H*A'
>>> s = 'TEST'
>>> ss = '-long-string-'
>>> ss.join(s)
'T-long-string-E-long-string-S-long-string-T'

所以你可能想要这样的东西:

strTest = strTest + ''.join([string[randomIndex(string.__len__())] for i in range(randomLength())])