【问题标题】:How do you get a loop to stop when an array runs out of values in python?当数组用完python中的值时,如何让循环停止?
【发布时间】:2016-11-12 10:33:49
【问题描述】:

我正在开发一个宾果游戏,为此我使用了一个包含 75 个数字的数组。滚动数字后,代码将删除它。当数组中没有数字时,我想停止滚动数字。

到目前为止,我有这个:

import random
numbers=[]
number=1
for i in range (0,75):
    numbers.append(number)
    number=number+1

当数组中的数字用完时,如何让代码停止滚动数字?

【问题讨论】:

  • 您可能想更好地解释您的问题。在您的代码中,我没有看到可能用完数字的数组(或列表)。
  • "如果 numbers:" 对你有用,空列表将被视为 false
  • 首先我希望你用随机数填充你的数组。目前你还没有这样做。然后从范围(len(array))中选择一个具有随机索引的数字(这不是宾果游戏的工作原理吗?)并使用例如列表的 remove 方法将其删除。您可以使用简单的 for 循环,因为您事先知道必须删除一个数字多少次。但这真的是任务吗?一个人的宾果游戏有点乏味,因为你总是赢。
  • "当数组中没有数字时,我想停止滚动数字。"这就像说“虽然数组中还有数字,但滚动一个数字并将其删除。”这实际上是 Ahsanul Haque 的回答。

标签: python arrays random


【解决方案1】:

您可以使用random 打乱您的元素,然后按顺序选择它们:

import random
numbers = list(range(1,76))
random.shuffle(numbers)

while len(numbers) > 0:
  number = numbers.pop()
  print(number)

【讨论】:

  • while numbers 应该足以代替while len(numbers) > 0
  • 而且,您实际上不是按顺序挑选它们,而是按相反的顺序挑选它们。 (只是为了澄清)
  • @AhsanulHaque:这是怎么倒序的?没有顺序,因为numbers 列表是随机开始的,所以无论数字是从前面还是从后面弹出都没有区别。此方法比使用list.remove() 从列表中删除特定值更有效。
  • @mhawke,我强调了then pick them in order 部分。洗牌后他有一个清单。然后,他从右到左挑选元素。我错了吗?当然,整体上没有顺序。
  • @AhsanulHaque while len(numbers) > 0 对于不熟悉 Python 特性的人来说更清楚。
【解决方案2】:

您可以使用random 函数来混合结果。 然后,您可以使用创建一个序列,然后您可以按顺序选择它们。

【讨论】:

    【解决方案3】:

    这是你需要的:

    import random
    
    current_list = list(range(0,75))
    
    while current_list:
        value = random.choice(current_list)
        print("Current Value is {}".format(value))
        current_list.remove(value)
    

    【讨论】:

    • numbers,因为这就是 OP 所说的。
    • 非常合乎逻辑的......已修复。
    • 这仅适用于 Python 2,其中range() 返回一个列表。在 Python 3 中,range(0, 75) 返回一个特殊对象,其行为类似于列表 [0,1,...,74] 但无法修改,因此 remove() 将失败。
    • @tom,是的,在 python3 中,它会抛出 AttributeError: 'range' object has no attribute 'remove' 。我以为这是python2,但我不应该那样做,因为OP没有提到。固定。
    • 这个复杂度为 O(N²),而它可以在 O(N) 内完成
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多