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())])
我正在做一个个人项目来帮助我理解 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())])