Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python脚本只替换字符串一次,然后复制所有内容_Python_Arrays_Python 3.x_String_Random - Fatal编程技术网

Python脚本只替换字符串一次,然后复制所有内容

Python脚本只替换字符串一次,然后复制所有内容,python,arrays,python-3.x,string,random,Python,Arrays,Python 3.x,String,Random,当我运行print(s)时,它只替换输入一次,然后复制所有内容。如何解决此问题?为了方便起见,这里有一个想法,使用字符串中的小写字母、大写字母和数字: from string import ascii_letters, ascii_lowercase, ascii_uppercase, digits from random import choice Pattern = input("Enter your Pattern: ") s = Pattern pattern_d

当我运行print(s)时,它只替换输入一次,然后复制所有内容。如何解决此问题?

为了方便起见,这里有一个想法,使用
字符串中的小写字母、大写字母和数字:

from string import ascii_letters, ascii_lowercase, ascii_uppercase, digits
from random import choice

Pattern = input("Enter your Pattern: ")
s = Pattern

pattern_dict = {
        '/X': ascii_letters,
        '/L': ascii_lowercase,
        '/U': ascii_uppercase,
        '/0': digits
    }

for i in range(RepeatThisManyTimes):
    for pattern, replacement in pattern_dict.items():
        while pattern in s:
            s = s.replace(pattern, choice(replacement), 1

其思想是迭代这对模式,在字典中查找(
\L
\U
\0
)及其各自的可能值池以替换(
ascii\U小写
ascii\U大写
数字
)。然后,当一个给定的模式出现在字符串中时,我们用从替换池中随机获取的值替换其中一个模式。

您能显示替换代码并解释出现了什么问题吗?没关系,我修复了该部分。现在我有一个新问题。我编辑了这篇文章,这样你就可以确切地看到问题所在,谢谢你的帮助。我试过了,效果很好。但现在我面临另一个问题。我试着把它放在for循环中,这样它会重复一定的次数,现在的问题是它总是相同的文本。它只选择一次随机字符串,然后只打印完全相同的内容。有解决办法吗?我得看看你的代码,看看有什么问题。确保在每次迭代中调用
choice
,而不是只调用一次(否则,您只会随机选择一次,并始终使用相同的选择)。还要检查是否没有覆盖过程中的任何重要变量。第一次运行循环后,
s
已被修改,因此它没有任何模式
/L
/U
/0
,这就是为什么之后看不到任何更改。对于范围内的i(RepeatThisManyTimes)
循环,您需要在每次迭代时“刷新”
s
。试着把线
s=Pattern
放在这个循环中。谢谢。这一切都解决了。就因为你解释得很好,我现在有了一个想法,可以帮助我自己解决问题。我应该看看代码,了解到底发生了什么。再次非常感谢。
from random import choice
from string import ascii_lowercase, ascii_uppercase, digits

s = 'ABC-/U-/L-/0'

pattern_dict = {
    '/L': ascii_lowercase,
    '/U': ascii_uppercase,
    '/0': digits
}

for pattern, replacement in pattern_dict.items():
    while pattern in s:
        s = s.replace(pattern, choice(replacement), 1)