python - 洗牌的程序

标签 python python-2.7

“创建一个名为 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']

关于python - 洗牌的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26963234/

相关文章:

python - 当通过消息请求将其作为输入时,正确解码 json 文件

python - 尝试异常处理

python - 将所有 Unicode 字符视为单个字母

java - 从 JAR 中执行 python 文件

python - Flask-SQLAlchemy 转换查询中的字段

python - 在 Windows Server 2012 R2 上将 python 代码作为服务运行

Python 2.7.3 : Sep argument showing error

python - 如何使用 Python Selenium 在文本框(输入)中定位和插入值?

python - 这段代码片段中 plt 指的是什么

python - PyQt5 和 Python 3.6 安装?