Skip to main content
 首页 » 编程设计

python之洗牌的程序

2025年05月04日8lori

“创建一个名为 names.txt 的文本文档,其中包含 20 个名称的列表,每个名称各占一行。编写一个程序从 names.txt 中读取名称,然后生成一个名为 shuffle.txt 的文件,其中包含这些名称以随机顺序列出。(不要使用 .shuffle() 列表方法)”

这就是被问到的问题。我的代码在下面,我很难过。有什么建议吗?
顺便说一句:在我知道新文件打印正确后,我会制作新文件。

import random 
 
my_file=open('C://names.txt','r') 
 
name=my_file.read() 
 
my_list=name.split(",") 
 
for names in my_list: 
 
           my_list=random.randint(0,20) 
 
           print my_list 

请您参考如下方法:

下面是 random.shuffle() 的正确实现:

items = ['a', 'b', 'c', 'd']  # any list 
for i in range(len(items)): 
    j = random.randrange(i, len(items)) 
    items[i], items[j] = items[j], items[i] 

一些风格指南会告诉你使用 enumerate() 而不是 range(len(...)),但在这种情况下它实际上并没有代码更好。

该算法的工作原理是将列表分为两个分区:左侧最初为空的分区和右侧的第二个分区。每次循环,我们从右分区中随机选择一个元素,将其与右分区最左边的元素交换,然后将边界移过去。

使用我们的列表 [1, 2, 3, 4],这是一个运行示例:

  1. 左边的分区是空的。将列表可视化为 [] + ['a', 'b', 'c', 'd']
  2. random.randrange(0, 4) 返回 0。
  3. 将 'a' 与元素零交换,元素零恰好也是 'a'。
  4. 列表现在是 ['a'] + ['b', 'c', 'd']。
  5. random.randrange(1, 4) 返回 3。
  6. 将 'b' 与元素 3 交换,即 'd'。
  7. 我们现在有 ['a', 'd'] + ['c', 'b']。
  8. random.randrange(2, 4) 返回 2。
  9. 将 'c' 与元素 2 交换,元素 2 恰好是 'c'。
  10. 我们有 ['a', 'd', 'c'] + ['b']。
  11. random.randrange(3, 4) 只能返回 3。
  12. 用自身交换 'b'。
  13. 我们的最终结果是 ['a', 'd', 'c', 'b']。