【问题标题】:Python random choice duplicatePython随机选择重复
【发布时间】:2019-05-05 22:40:58
【问题描述】:

所以我正在创建一个简单的脚本,其中涉及创建一个随机的字母串。我目前正在使用此代码,它可以工作,但不是我需要它工作的方式。它不会输出任何我需要的重复字母

for i in range(x):
  letter=random.choice(string.ascii_letters)
  string+=letter
print(string)

问题是我没有得到任何重复项,这是我真正需要的,才能使这段代码正常工作。 我已经看到如何修复数字,但没有看到任何字母。 非常感谢任何解决方案。

【问题讨论】:

  • 你能添加一个示例字符串吗?
  • x 的例子是什么?
  • @Dominic。您的问题在于 string += letter 语句,因为 string 是脚本中的一个模块,并且 不是变量。注意到这一事实后,你不能写print(string)

标签: python string python-3.x random


【解决方案1】:

这确实对我有用

x=20
''.join(random.choice(string.ascii_letters.lower()) for y in range(x))

输出:

'xbzxxixfwowvitbimxwj'

【讨论】:

    【解决方案2】:

    您的代码应该可以正常工作。如果我运行它,我会得到重复。使用生成多个随机选择的相关函数random.choices会改进它。

    获取 20 个字母的字符串:

    required_length = 20
    s = ''.join(random.choices(string.ascii_letters,k=required_length))
    

    【讨论】:

      【解决方案3】:

      @多米尼克。以下是将您的代码修改为有意义的内容:

      import string
      import random
      # for example, let say: x = 10
      x = 10
      for in in range(x):
          letter = random.choice(string.ascii_letters)
          letter += letter # This can be performed more efficiently
          print(letter)
      

      【讨论】:

        【解决方案4】:

        您可以精确控制重复的数量:

        import string, random
        
        nbletters=10
        nbduplicates=3
        assert nbletters >= 2*nbduplicates 
        
        base=list(string.ascii_letters)
        random.shuffle(base)
        result=base[:nbduplicates]*2+base[2*nbduplicates:nbletters]
        random.shuffle(result)
        print("".join(result))
        

        例子:

        VsAkVglkRs
        vuWkrsJrvW
        TTjbcYcjEG
        ImFKFIqTgm
        BCVpmFvFVC
        LCOzJCJmmH
        

        【讨论】:

          猜你喜欢
          • 2013-09-16
          • 2012-04-11
          • 2017-10-25
          • 1970-01-01
          • 1970-01-01
          • 2020-02-19
          • 1970-01-01
          • 2014-07-05
          • 2011-07-02
          相关资源
          最近更新 更多