【问题标题】:Python script replaces string only once and then copies everythingPython脚本只替换一次字符串然后复制所有内容
【发布时间】:2020-12-17 15:38:49
【问题描述】:
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

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

【问题讨论】:

  • 您能否展示您的替换代码并解释问题所在?
  • 没关系,我修好了那部分。现在我有一个新问题。我编辑了帖子,所以你可以准确地看到问题是什么

标签: python arrays python-3.x string random


【解决方案1】:

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

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)

我们的想法是遍历要查找的模式对(\L\U\0)以及它们各自要替换的可能值池(ascii_lowercaseascii_uppercasedigits)在字典里。然后,当一个给定的模式出现在字符串中时,我们用从替换池中随机取的一个值替换它的出现。

【讨论】:

  • 嘿,非常感谢您帮助我。我试过了,它有效。现在我面临另一个问题。我尝试将它放在 for 循环中,以便它重复一定次数,现在的问题是它始终是相同的文本。它只选择一次随机字符串,然后只打印完全相同的内容。有解决办法吗?
  • 我必须查看您的代码,看看有什么问题。确保在每次迭代时都调用choice,而不是只调用一次(否则你会随机选择一次并始终使用相同的选择)。还要检查您是否在此过程中没有覆盖任何重要变量。
  • 第一次运行循环时,s 已被修改,因此它没有任何模式 /L/U/0 留在其中,这就是为什么之后你看不到任何变化。您需要在 for i in range(RepeatThisManyTimes) 循环的每次迭代中“刷新”s。尝试将行 s = Pattern 放入此循环中。
  • 谢谢。这解决了一切。正因为你解释得很好,我现在有了一个可以帮助我自己解决问题的想法。我应该查看代码并了解到底发生了什么。再次非常感谢。
猜你喜欢
  • 2014-09-28
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
相关资源
最近更新 更多