【问题标题】:How do you create a program that shuffles a list without using the "shuffle" function?如何在不使用“shuffle”功能的情况下创建一个随机播放列表的程序?
【发布时间】:2015-02-10 19:02:39
【问题描述】:

我正在创建一个程序,它将随机播放 100 个随机数的列表,然后将它们交换/随机播放 1000 次,而不使用“随机播放”功能。问题是,我的程序无法正常工作。这些数字根本没有彻底洗牌,我想不出一种方法来使用 for 循环将数字洗牌超过 1000 次。帮助将不胜感激。

import random
originalnum_list=[]
num_list=[]
num_list1 = []
num_list2 = []
for num in range(100):
    num_list1.append(random.randrange(0,51))

for num in range(100):
    num_list2.append(random.randrange(0,51))
originalnum_list.append(num_list1)
originalnum_list.append(num_list2)
print "The computer entered: " + str(originalnum_list)

for shuffle in range(0,1001):
    shuffle=num_list1
    num_list1=num_list2
    num_list2=shuffle
num_list.append(num_list1)
num_list.append(num_list2) 
print "The shuffeled result is: " + str(num_list)

【问题讨论】:

  • 为什么不想使用shuffle函数?这只是一个练习吗?
  • 你洗牌的逻辑是什么?我在洗牌元素中看不到任何随机性?

标签: python list for-loop random shuffle


【解决方案1】:

所以我的理解是你想要一个程序,它需要一个列表,然后随机化该列表内容的位置,对吗?

import random
def list_randomizer(lst):
    result = []
    while len(lst) > 0:
        index = random.randrange(0,len(lst))
        result.append(lst.pop(index))
    return result

此功能将随机播放您放入其中的任何列表。您可以通过 for 循环轻松地将其随机播放多次。

for i in range(1000):
    list = list_randomizer(list)

这将继续将更新后的列表传递给函数,导致它被重新洗牌 1000 次。

【讨论】:

    【解决方案2】:

    这只是交换 num_list1 和 num_list2

    for shuffle in range(0,1001):
        shuffle=num_list1
        num_list1=num_list2
        num_list2=shuffle
    

    如果你做偶数次,你最终会得到一个相同的列表。

    随机播放应该如何工作?需要公平吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-11
      • 2019-11-11
      • 1970-01-01
      • 2013-12-27
      • 2012-10-23
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      相关资源
      最近更新 更多