【问题标题】:Creating random numbers in a list在列表中创建随机数
【发布时间】:2021-10-03 17:41:39
【问题描述】:

尊敬的程序员,

我有一个关于我的代码不起作用的问题。实际上,每当我调用该函数时,我都想生成应该在列表中显示的随机数。有人可以帮我澄清这里出了什么问题以及如何继续吗?我现在有点迷茫。

这是我收到的错误消息:

TypeError: RandomNumbers() missing 1 required positional` argument: 'Number'

我明白,但我不想输入数字,它应该输出一个由 7 个元素组成的随机列表,其中元素在 0 到 9 之间变化。例如: [2,3,5,0,2,0,9)

import random
Number = []

def RandomNumbers(Number):
    for i in range(0,7):
        x = Number.randint(0,9)
        Number.append(x)
        print(Number)

RandomNumbers()

【问题讨论】:

  • 你的def RandomNumbers(Number):接受一个参数,但在调用RandomNumbers()时你没有给出一个参数
  • 你需要写RandomNumbers(Number)。你忘了传递列表
  • 您实际上并不需要一个函数,因为您可以轻松地使用列表推导如下:- Number = [random.randint(0,9) for _ in range(7 )]
  • 当你应该打电话给random.randint()时,你也打电话给Number.randint()
  • 只是我的看法,但问题中的称呼是不必要的(通常在任何情况下都暗示)

标签: python python-3.x error-handling


【解决方案1】:

考虑到您已经提到您不想输入任何数字,请将您的 Python 函数声明更改为不接受任何参数 - 在本例中为 Number - 因为它目前需要一个。

您还需要将x = Number.randint(0,9) 替换为x = random.randint(0,9),因为randint 是属于random 的方法。

这应该做你想做的:

import random
Number = []

def RandomNumbers():
    for i in range(0,7):
        x = random.randint(0,9)
        Number.append(x)
    print(Number)

RandomNumbers()

输出:

[1, 7, 6, 5, 5, 7, 5]


还有一个更小、更清洁的解决方案,它使用list comprehensions 实现与上述相同的输出:

import random
Number = [random.randint(0,9) for _ in range(7)]

print(Number)

【讨论】:

  • 感谢您的回复。当我尝试这个时,我得到一个树形式的输出。 [8] [8, 0] [8, 0, 9] [8, 0, 9, 5] [8, 0, 9, 5, 7] [8, 0, 9, 5, 7, 0] [8 , 0, 9, 5, 7, 0, 4] 实际上我只想要一个包含 7 个元素的列表。
  • @AbishaBindar 答案已修改,有帮助吗?
  • 是的,它肯定有帮助。非常感谢!
  • @AbishaBindar 不客气 :)
【解决方案2】:

只替换最后一行代码

RandomNumbers()

RandomNumbers(ANYNUMBER)

【讨论】:

    【解决方案3】:

    没有它你不能调用一个接收对象的函数。所以你可以这样做:

    import random
    Number = []
    
    def RandomNumbers():
        for i in range(0,7):
            x = random.randint(0,9)
            Number.append(x)
        return Number
    
    print(RandomNumbers())
    

    【讨论】:

      【解决方案4】:

      您必须将Number.randint 更改为random.randint。更正后的代码如下所示:

      import random
      Number = []
      
      def RandomNumbers(Number):
          for i in range(0,7):
              x = random.randint(0,9)
              Number.append(x)
              print(Number)
      
      RandomNumbers(Number)
      

      输出:

      [9]
      [9, 1]
      [9, 1, 5]
      [9, 1, 5, 8]
      [9, 1, 5, 8, 3]
      [9, 1, 5, 8, 3, 9]
      [9, 1, 5, 8, 3, 9, 2]
      

      但是这段代码根本没有清理干净。您可以改为了解模块numpy,它具有强大的功能,包括使用随机整数创建数组!

      【讨论】:

      • numpy 解决这个问题太过分了
      【解决方案5】:
      import random
      def RandomNumbers():
          arr = []
          for i in range(0,7):
              x = random.randint(0,9)
              arr.append(x)
          return(arr)
      
      Number = RandomNumbers()
      print(Number)
      

      使用 random.randint(0,9) 而不是 Number.randint(0,9)
      您可能希望多次使用此函数,因此建议在函数内声明一个数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-11
        • 2011-05-09
        • 2014-02-27
        • 1970-01-01
        • 2018-07-15
        • 1970-01-01
        • 2011-10-20
        相关资源
        最近更新 更多