“创建一个名为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
答案 0 :(得分:0)
以下是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]
,这是一个示例运行:
[] + ['a', 'b', 'c', 'd']
random.randrange(0, 4)
返回0
。'a'
元素为零,恰好也是'a'
。['a'] + ['b', 'c', 'd']
。random.randrange(1, 4)
返回3
。'b'
,即'd'
。['a', 'd'] + ['c', 'b']
。random.randrange(2, 4)
返回2. 'c'
与元素2交换,恰好是'c'
。['a', 'd', 'c'] + ['b']
。random.randrange(3, 4)
只能返回3. 'b'
。['a', 'd', 'c', 'b']
。答案 1 :(得分:-1)
复制+粘贴
import random
f=open('/tmp/names.txt', 'r')
array=f.readlines() # read all lines
f.close() # release file
array_len = len(array)
for index in range(array_len):
swap = random.randrange(array_len - 1)
swap += swap >= index
array[index], array[swap] = array[swap], array[index]
f=open('/tmp/shuffle.txt', 'w') # open dst file
f.write("".join(array)) # save shuffled names
f.close() # release - close file