【问题标题】:Print out items from a list using random.choices in a for loop without brackets在不带括号的 for 循环中使用 random.choices 从列表中打印出项目
【发布时间】:2021-10-12 00:03:45
【问题描述】:

我目前正在开发一个单词加密器,我希望一个字母有多个“翻译”,所以我为每个字母制作了包含不同翻译的列表。使用 for 循环和 random 模块,我可以检查输入中的字母并将其替换为字母列表中的随机字符。示例:

import random

d= ["°", "┌", "Ï"]
o= ["‗", "‥", "ӟ"]
word = "do"
for i in range(len(word)):
    if word[i]=="d":
        print(random.choices(d), end="")
    if word[i]=="o":
        print(random.choices(o), end="")

此代码将用它们各自列表中的随机字符替换字母。 这就是问题所在:括号中随机选择的输出(它输出['°']['‥']而不是°‥)。有什么办法可以去掉括号吗?

【问题讨论】:

    标签: python python-3.x for-loop random


    【解决方案1】:

    请改用random.choice()choices() 有多个选择,所以它返回一个数组。

    【讨论】:

      【解决方案2】:

      使用* 列表解包运算符。这将解包列表或从列表中获取所有元素

      for i in range(len(word)):
          if word[i]=="d":
              print(*random.choices(d), end="")
          if word[i]=="o":
              print(*random.choices(o), end="")
      

      或者,使用random.choice 而不是random.choices,因为random.choice 返回一个字符串,而random.choices 返回一个列表。

      【讨论】:

        【解决方案3】:

        random.choises 返回k 选择的数组。当k 未传递给random.choises 函数时,它默认为1。您可以使用random.coise 来取回列表中元素之一的值。

        【讨论】:

        • choice 而不是choise
        【解决方案4】:

        您可以在 print 语句中使用"".join(random.choices(d)) 将其转换为字符串。

        【讨论】:

          【解决方案5】:

          我建议使用 randint 而不是选择。它看起来像这样

          print(d[random.randint(0, len(d))
          

          总起来就是这个样子

          d= ["°", "┌", "Ï"]
          o= ["‗", "‥", "ӟ"]
          word = "do"
          for i in range(len(word)):
              if word[i]=="d":
                  print(d[random.randint(0, len(d))
              if word[i]=="o":
                  print(o[random.randint(0, len(o))
          

          【讨论】:

            【解决方案6】:

            正如其他一些答案已经提到的那样,random.choices 总是返回一个列表,即使它只是一个项目的列表。您要查找的函数是 random.choice,它只返回给定集合中的一项。

            我的建议是使用字典将单个字符映射到一组字符以供选择。就我而言,我选择了元组,但它们可以是列表。它们甚至可以只是字符串:

            from random import choice
            
            mapping = {
                "d": ("1", "2", "3"),
                "o": ("a", "b", "c")
            }
            
            print("".join(choice(mapping[char]) for char in "dodo"))
            

            【讨论】:

              猜你喜欢
              • 2017-08-16
              • 2020-04-12
              • 2012-01-12
              • 1970-01-01
              • 2012-06-26
              • 2022-11-17
              • 2018-09-29
              • 1970-01-01
              相关资源
              最近更新 更多