使用文本文件将单词布置为网格形式

时间:2014-04-11 22:09:55

标签: python random grid

我有一个来自文本文件的6个单词的列表,并且想要打开文件以将单词列表读取为3x2网格,也可以在每次运行程序时随机化单词的顺序。 / p>

字样是:

cat, dog, hamster, frog, snail, snake

我希望它们显示为:(但每次运行程序时都是以随机顺序执行此操作)

cat    dog     hamster
frog   snail   snake 

到目前为止,我所做的就是从6个单词的列表中获取一个单词,以随机顺序出现 - 帮助会非常适合

import random

words_file = random.choice(open('words.txt', 'r').readlines())
print words_file

3 个答案:

答案 0 :(得分:2)

这是另一个:

>>> import random
>>> with open("words.txt") as f:
...    words = random.sample([x.strip() for x in f], 6)
... 
...
>>> grouped = [words[i:i+3] for i in range(0, len(words), 3)]
>>> for l in grouped:
...     print "".join("{:<10}".format(x) for x in l)
...     
... 
snake     cat       dog       
snail     frog      hamster   

首先我们读取文件的内容并选择六个随机行(确保您的行只包含一个单词)。然后我们将单词分组为三个列表并使用字符串格式打印它们。格式括号中的<10左对齐文本,并将每个项目填充10个空格。

答案 1 :(得分:1)

要选择6个字,您应该尝试random.sample

words = randoms.sample(open('words.txt').readlines(), 6)

答案 2 :(得分:1)

您需要查看string formatting

import random

with open('words.txt','r') as infile:
    words_file = infile.readlines()

random.shuffle(words_file) # mix up the words

maxlen = len(max(words_file, key=lambda x: len(x)))+1
print_format = "{}{}{}".format("{:",maxlen,"}")

print(*(print_format.format(word) for word in words_file[:3])
print(*(print_format.format(word) for word in words_file[3:])

有更好的方法可以通过三次运行列表分组,但这适用于您的有限测试用例。 Here's a link to some more information on chunking lists

我最喜欢的食谱是使用zipiter分块:

def get_chunks(iterable,chunksize):
    return zip(*[iter(iterable)]*chunksize)

for chunk in get_chunks(words_file):
    print(*(print_format.format(word) for word in chunk))